iatoolkit 0.61.0__tar.gz → 0.63.0__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.

Potentially problematic release.


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

Files changed (121) hide show
  1. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/PKG-INFO +1 -1
  2. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/pyproject.toml +1 -1
  3. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/common/util.py +0 -6
  4. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/iatoolkit.py +1 -1
  5. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/branding_service.py +3 -5
  6. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +16 -9
  7. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/styles/landing_page.css +16 -9
  8. iatoolkit-0.63.0/src/iatoolkit/templates/_company_header.html +16 -0
  9. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/index.html +10 -13
  10. iatoolkit-0.63.0/src/iatoolkit/views/home_view.py +69 -0
  11. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit.egg-info/PKG-INFO +1 -1
  12. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit.egg-info/SOURCES.txt +0 -1
  13. iatoolkit-0.61.0/src/iatoolkit/templates/_company_header.html +0 -15
  14. iatoolkit-0.61.0/src/iatoolkit/templates/home.html +0 -80
  15. iatoolkit-0.61.0/src/iatoolkit/views/home_view.py +0 -43
  16. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/readme.md +0 -0
  17. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/requirements.txt +0 -0
  18. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/setup.cfg +0 -0
  19. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/__init__.py +0 -0
  20. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/base_company.py +0 -0
  21. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/cli_commands.py +0 -0
  22. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/common/__init__.py +0 -0
  23. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/common/exceptions.py +0 -0
  24. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/common/routes.py +0 -0
  25. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/common/session_manager.py +0 -0
  26. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/company_registry.py +0 -0
  27. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/__init__.py +0 -0
  28. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/call_service.py +0 -0
  29. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  30. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  31. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  32. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  33. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  34. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  35. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  36. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/gemini_adapter.py +0 -0
  37. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
  38. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/llm_client.py +0 -0
  39. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
  40. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/llm_response.py +0 -0
  41. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/mail_app.py +0 -0
  42. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/openai_adapter.py +0 -0
  43. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  44. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/repositories/__init__.py +0 -0
  45. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/repositories/database_manager.py +0 -0
  46. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/repositories/document_repo.py +0 -0
  47. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  48. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/repositories/models.py +0 -0
  49. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
  50. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/repositories/tasks_repo.py +0 -0
  51. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
  52. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/__init__.py +0 -0
  53. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/auth_service.py +0 -0
  54. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/benchmark_service.py +0 -0
  55. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
  56. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/document_service.py +0 -0
  57. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/excel_service.py +0 -0
  58. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/file_processor_service.py +0 -0
  59. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/history_service.py +0 -0
  60. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/jwt_service.py +0 -0
  61. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/load_documents_service.py +0 -0
  62. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/mail_service.py +0 -0
  63. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/onboarding_service.py +0 -0
  64. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/profile_service.py +0 -0
  65. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/prompt_manager_service.py +0 -0
  66. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/query_service.py +0 -0
  67. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/search_service.py +0 -0
  68. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/sql_service.py +0 -0
  69. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/tasks_service.py +0 -0
  70. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
  71. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
  72. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  73. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  74. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  75. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  76. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  77. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/js/chat_main.js +0 -0
  78. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  79. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  80. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  81. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/styles/chat_info.css +0 -0
  82. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  83. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
  84. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
  85. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/system_prompts/format_styles.prompt +0 -0
  86. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/system_prompts/query_main.prompt +0 -0
  87. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/system_prompts/sql_rules.prompt +0 -0
  88. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/about.html +0 -0
  89. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/base.html +0 -0
  90. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/change_password.html +0 -0
  91. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/chat.html +0 -0
  92. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/chat_modals.html +0 -0
  93. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/error.html +0 -0
  94. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/forgot_password.html +0 -0
  95. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/header.html +0 -0
  96. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/login_simulation.html +0 -0
  97. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  98. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/signup.html +0 -0
  99. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/templates/test.html +0 -0
  100. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/__init__.py +0 -0
  101. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/base_login_view.py +0 -0
  102. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/change_password_view.py +0 -0
  103. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/external_login_view.py +0 -0
  104. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/file_store_api_view.py +0 -0
  105. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
  106. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/history_api_view.py +0 -0
  107. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/index_view.py +0 -0
  108. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
  109. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  110. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/login_simulation_view.py +0 -0
  111. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/login_view.py +0 -0
  112. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/logout_api_view.py +0 -0
  113. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
  114. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/signup_view.py +0 -0
  115. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/tasks_api_view.py +0 -0
  116. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/tasks_review_api_view.py +0 -0
  117. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  118. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit/views/verify_user_view.py +0 -0
  119. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  120. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/src/iatoolkit.egg-info/requires.txt +0 -0
  121. {iatoolkit-0.61.0 → iatoolkit-0.63.0}/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.61.0
3
+ Version: 0.63.0
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.61.0"
7
+ version = "0.63.0"
8
8
  requires-python = ">=3.12"
9
9
  description = "IAToolkit"
10
10
  readme = "readme.md"
@@ -21,10 +21,8 @@ class Utility:
21
21
  def __init__(self):
22
22
  self.encryption_key = os.getenv('FERNET_KEY')
23
23
 
24
-
25
24
  def render_prompt_from_template(self,
26
25
  template_pathname: str,
27
- query: str = None,
28
26
  client_data: dict = {},
29
27
  **kwargs) -> str:
30
28
 
@@ -37,8 +35,6 @@ class Utility:
37
35
  env = Environment(loader=FileSystemLoader(template_dir))
38
36
  template = env.get_template(template_file)
39
37
 
40
- kwargs["query"] = query
41
-
42
38
  # add all the keys in client_data to kwargs
43
39
  kwargs.update(client_data)
44
40
 
@@ -53,7 +49,6 @@ class Utility:
53
49
  def render_prompt_from_string(self,
54
50
  template_string: str,
55
51
  searchpath: str | list[str] = None,
56
- query: str = None,
57
52
  client_data: dict = {},
58
53
  **kwargs) -> str:
59
54
  """
@@ -76,7 +71,6 @@ class Utility:
76
71
  env = Environment(loader=loader)
77
72
  template = env.from_string(template_string)
78
73
 
79
- kwargs["query"] = query
80
74
  kwargs.update(client_data)
81
75
 
82
76
  prompt = template.render(**kwargs)
@@ -19,7 +19,7 @@ from werkzeug.middleware.proxy_fix import ProxyFix
19
19
  from injector import Binder, Injector, singleton
20
20
  from importlib.metadata import version as _pkg_version, PackageNotFoundError
21
21
 
22
- IATOOLKIT_VERSION = "0.61.0"
22
+ IATOOLKIT_VERSION = "0.63.0"
23
23
 
24
24
  # global variable for the unique instance of IAToolkit
25
25
  _iatoolkit_instance: Optional['IAToolkit'] = None
@@ -80,10 +80,6 @@ class BrandingService:
80
80
  secondary_rgb = hex_to_rgb(final_branding_values['brand_secondary_color'])
81
81
 
82
82
  # --- CONSTRUCCIÓN DE ESTILOS Y VARIABLES CSS ---
83
- header_style = (
84
- f"background-color: {final_branding_values['header_background_color']}; "
85
- f"color: {final_branding_values['header_text_color']};"
86
- )
87
83
  primary_text_style = (
88
84
  f"font-weight: {final_branding_values['primary_font_weight']}; "
89
85
  f"font-size: {final_branding_values['primary_font_size']};"
@@ -103,6 +99,9 @@ class BrandingService:
103
99
  :root {{
104
100
  --brand-primary-color: {final_branding_values['brand_primary_color']};
105
101
  --brand-secondary-color: {final_branding_values['brand_secondary_color']};
102
+ --brand-header-bg: {final_branding_values['header_background_color']};
103
+ --brand-header-text: {final_branding_values['header_text_color']};
104
+
106
105
  --brand-primary-color-rgb: {', '.join(map(str, primary_rgb))};
107
106
  --brand-secondary-color-rgb: {', '.join(map(str, secondary_rgb))};
108
107
  --brand-text-on-primary: {final_branding_values['brand_text_on_primary']};
@@ -133,7 +132,6 @@ class BrandingService:
133
132
 
134
133
  return {
135
134
  "name": company.name if company else "IAToolkit",
136
- "header_style": header_style,
137
135
  "primary_text_style": primary_text_style,
138
136
  "secondary_text_style": secondary_text_style,
139
137
  "tertiary_text_style": tertiary_text_style,
@@ -28,18 +28,15 @@
28
28
 
29
29
  /* --- Encabezado de Empresa Personalizado (Actualizado) --- */
30
30
  .custom-company-header {
31
- /* Estructura y Posicionamiento */
32
- display: flex;
33
- align-items: center;
34
- justify-content: space-between; /* Para separar el nombre y el "Powered by" */
35
31
  height: 78px;
36
- padding: 0 1.5rem;
37
- width: 100%;
38
32
  margin-bottom: 20px;
33
+ padding: 0 1.5rem; /* Padding interno para que el texto no toque los bordes */
34
+ border-radius: 0.375rem; /* Bordes redondeados para que coincida con los formularios */
39
35
 
40
- background-color: var(--brand-primary-color);
41
- color: var(--brand-text-on-primary);
42
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
36
+ /* Los estilos de color y sombra se mantienen */
37
+ background-color: var(--brand-header-bg);
38
+ color: var(--brand-header-text);
39
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); /* Sombra ligeramente más suave */
43
40
  }
44
41
 
45
42
  /* Estilo específico para el nombre de la marca (Letra más grande) */
@@ -64,6 +61,14 @@
64
61
  color: inherit;
65
62
  }
66
63
 
64
+ /* --- Estilo para el enlace de IAToolkit --- */
65
+ .custom-company-header .iatoolkit-link {
66
+ color: inherit; /* Hereda el color del texto padre */
67
+ text-decoration: none; /* ¡Elimina el subrayado! */
68
+ font-weight: 600; /* Un poco más de peso para diferenciarlo */
69
+ transition: opacity 0.2s ease-in-out;
70
+ }
71
+
67
72
  .branded-form-container {
68
73
  background-color: #ffffff;
69
74
  border: 1px solid #dee2e6;
@@ -114,6 +119,8 @@
114
119
  /* Estilo para la sección del encabezado */
115
120
  .company-section {
116
121
  border-radius: 0.375rem; /* Mismo radio que .chat-block para consistencia */
122
+ background-color: var(--brand-header-bg);
123
+ color: var(--brand-header-text);
117
124
  }
118
125
 
119
126
  /* Spinner */
@@ -19,13 +19,15 @@ body {
19
19
 
20
20
  /* --- Encabezado Propio (sin usar .navbar) --- */
21
21
  .website-header {
22
- background-color: var(--website-primary-color); /* Color primario del website */
23
- border-bottom: 1px solid transparent; /* Borde ya no necesario con fondo sólido */
24
- position: sticky;
25
- top: 0;
26
- z-index: 1020;
27
- padding: 0.75rem 0;
28
- width: 100%;
22
+ margin-top: 1rem;
23
+ padding: 1rem 1.5rem; /* Padding vertical y horizontal */
24
+ border-radius: 0.5rem;
25
+ display: flex;
26
+ align-items: center;
27
+
28
+ /* Estilos de color (se mantienen) */
29
+ background-color: var(--website-primary-color);
30
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
29
31
  }
30
32
 
31
33
  .website-brand {
@@ -36,10 +38,11 @@ body {
36
38
 
37
39
  /* --- Sección Principal (Hero) --- */
38
40
  .hero-section {
39
- padding: 5rem 0;
41
+ padding: 2rem 0 1rem; /* Ajustado: 5rem arriba, 0 a los lados, 2.5rem abajo */
40
42
  }
43
+
41
44
  .hero-title {
42
- font-size: 3.5rem;
45
+ font-size: 3rem;
43
46
  font-weight: 800;
44
47
  line-height: 1.2;
45
48
  margin-bottom: 1.5rem;
@@ -79,6 +82,10 @@ body {
79
82
  border-color: var(--website-primary-color-dark);
80
83
  }
81
84
 
85
+ .bg-light h3 {
86
+ color: var(--website-primary-color);
87
+ }
88
+
82
89
  /* --- Sección de Características (Features) --- */
83
90
  .features-section {
84
91
  padding: 5rem 0;
@@ -0,0 +1,16 @@
1
+ {# El div principal ahora es un contenedor y tiene los estilos y clases de alineación #}
2
+ <div class="custom-company-header container d-flex justify-content-between align-items-center">
3
+
4
+ <a href="{{ url_for('home', company_short_name=company_short_name) }}"
5
+ class="brand-name"
6
+ style="{{ branding.primary_text_style }}">
7
+ {{ branding.name }}
8
+ </a>
9
+
10
+
11
+ {# Texto "Powered by" con enlace a iatoolkit.com #}
12
+ <span class="powered-by">
13
+ Powered by <a href="{{ url_for('index') }}" rel="noopener noreferrer" class="iatoolkit-link">IAToolkit</a>
14
+ </span>
15
+
16
+ </div>
@@ -1,6 +1,6 @@
1
1
  {% extends "base.html" %}
2
2
 
3
- {% block title %}IAToolkit - Asistente Inteligente Personalizable{% endblock %}
3
+ {% block title %}IAToolkit{% endblock %}
4
4
 
5
5
  {% block styles %}
6
6
  {# Enlazamos la hoja de estilos del website y los iconos de Bootstrap #}
@@ -11,10 +11,8 @@
11
11
 
12
12
  {% block content %}
13
13
  <!-- 1. Encabezado con una clase 100% propia y única -->
14
- <header class="website-header">
15
- <div class="container">
16
- <span class="website-brand">IAToolkit</span>
17
- </div>
14
+ <header class="website-header container">
15
+ <span class="website-brand">IAToolkit</span>
18
16
  </header>
19
17
 
20
18
  <!-- 2. Sección Principal (Hero) -->
@@ -22,24 +20,23 @@
22
20
  <div class="container">
23
21
  <div class="row align-items-center g-5 py-5">
24
22
  <div class="col-lg-7">
25
- <h1 class="hero-title gradient-text">IA que entiende tu negocio desde el primer día.</h1>
23
+ <h1 class="hero-title gradient-text">Framework de IA Open Source</h1>
26
24
  <ul class="hero-bullets mt-4">
27
- <li><i class="bi bi-hdd-stack"></i> Conecta tus bases de datos, APIs y documentos.</li>
28
- <li><i class="bi bi-chat-dots"></i> Construye un asistente que entiende el lenguaje de tu empresa.</li>
29
- <li><i class="bi bi-rocket-takeoff"></i> Despliega donde quieras, con tu marca y tus reglas.</li>
30
- </ul>
25
+ <li><i class="bi bi-hdd-stack"></i>Integra tus bases de datos SQL y documentos para dar contexto real a tus asistentes.</li>
26
+ <li><i class="bi bi-code-slash"></i>Crea un repositorio de prompts validados por tu equipo para estandarizar y acelerar las tareas de IA.</li>
27
+ <li><i class="bi bi-shield-lock"></i> Monta la plataforma en tu propia infraestructura con control total sobre el LLM, garantizando la privacidad de los datos.</li> </ul>
31
28
  </div>
32
29
  <div class="col-lg-5">
33
30
  <div class="border rounded-3 p-4 p-md-5 shadow-sm bg-light">
34
31
  <h3 class="fw-bold text-center mb-3">Prueba la Plataforma</h3>
35
32
  <p class="text-muted text-center mb-4">
36
- Explora una versión de demostración completamente funcional para ver el asistente en acción.
33
+ Encontraras una demo de IAToolkit con una empresa ficticia que te permitira probar la plataforma.
37
34
  </p>
38
35
  <div class="d-grid">
39
36
  {# Este botón usa la clase .btn-primary, que es estilizada por .hero-section .btn-primary en el CSS #}
40
37
  <a href="{{ url_for('home', company_short_name='sample_company') }}"
41
38
  class="btn btn-primary btn-lg fw-bold">
42
- Acceder a la Demo
39
+ Acceder
43
40
  </a>
44
41
  </div>
45
42
  </div>
@@ -126,7 +123,7 @@
126
123
  <p class="author-bio mb-0">
127
124
  Soy <strong>Fernando Libedinsky</strong>, ingeniero de software y creador de <strong>IAToolkit</strong>.
128
125
  <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.
129
- <br>IAToolkit es la continuación de ese impulso, una plataforma creada para conectar rapidamente empresas con la inteligencia artificial.
126
+ <br>IAToolkit es la continuación de ese impulso, una plataforma creada para conectar rapidamente empresas con la IA.
130
127
  </p>
131
128
  </div>
132
129
  </div>
@@ -0,0 +1,69 @@
1
+ # iatoolkit/views/home_view.py
2
+ import logging
3
+ import os
4
+ from flask import render_template, abort, session, render_template_string
5
+ from flask.views import MethodView
6
+ from injector import inject
7
+ from iatoolkit.services.profile_service import ProfileService
8
+ from iatoolkit.services.branding_service import BrandingService
9
+ import logging
10
+
11
+ class HomeView(MethodView):
12
+ """
13
+ Handles the rendering of the company-specific home page with a login widget.
14
+ If the custom template is not found or fails, it renders an error page.
15
+ """
16
+
17
+ @inject
18
+ def __init__(self,
19
+ profile_service: ProfileService,
20
+ branding_service: BrandingService):
21
+ self.profile_service = profile_service
22
+ self.branding_service = branding_service
23
+
24
+ def get(self, company_short_name: str):
25
+ company = self.profile_service.get_company_by_short_name(company_short_name)
26
+
27
+ if not company:
28
+ abort(404, description=f"La empresa '{company_short_name}' no fue encontrada.")
29
+
30
+ branding_data = self.branding_service.get_company_branding(company)
31
+ alert_message = session.pop('alert_message', None)
32
+ alert_icon = session.pop('alert_icon', 'error')
33
+
34
+
35
+ # 1. Construimos la ruta al archivo de plantilla específico de la empresa.
36
+ company_template_path = os.path.join(os.getcwd(), f'companies/{company_short_name}/templates/home.html')
37
+
38
+ # 2. Verificamos si el archivo de plantilla personalizado no existe.
39
+ if not os.path.exists(company_template_path):
40
+ return render_template(
41
+ "error.html",
42
+ company=company,
43
+ company_short_name=company_short_name,
44
+ branding=branding_data,
45
+ message=f"La plantilla de la página de inicio para la empresa '{company_short_name}' no está configurada."
46
+ ), 500
47
+
48
+ # 3. Si el archivo existe, intentamos leerlo y renderizarlo.
49
+ try:
50
+ with open(company_template_path, 'r') as f:
51
+ template_string = f.read()
52
+
53
+ # Usamos render_template_string, que entiende el contexto de Flask.
54
+ return render_template_string(
55
+ template_string,
56
+ company=company,
57
+ company_short_name=company_short_name,
58
+ branding=branding_data,
59
+ alert_message=alert_message,
60
+ alert_icon=alert_icon
61
+ )
62
+ except Exception as e:
63
+ return render_template(
64
+ "error.html",
65
+ company=company,
66
+ company_short_name=company_short_name,
67
+ branding=branding_data,
68
+ message="Ocurrió un error al procesar la plantilla personalizada de la página de inicio."
69
+ ), 500
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 0.61.0
3
+ Version: 0.63.0
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -89,7 +89,6 @@ src/iatoolkit/templates/chat_modals.html
89
89
  src/iatoolkit/templates/error.html
90
90
  src/iatoolkit/templates/forgot_password.html
91
91
  src/iatoolkit/templates/header.html
92
- src/iatoolkit/templates/home.html
93
92
  src/iatoolkit/templates/index.html
94
93
  src/iatoolkit/templates/login_simulation.html
95
94
  src/iatoolkit/templates/onboarding_shell.html
@@ -1,15 +0,0 @@
1
- <div class="custom-company-header" style="{{ branding.header_style }}">
2
-
3
- {# Enlace condicional para el nombre de la marca a la izquierda #}
4
- <a href="{{ url_for('home', company_short_name=company_short_name) }}"
5
- class="brand-name"
6
- style="{{ branding.primary_text_style }}">
7
- {{ branding.name }}
8
- </a>
9
-
10
- <span class="powered-by">
11
- Powered by IAToolkit
12
- </a>
13
- </span>
14
-
15
- </div>
@@ -1,80 +0,0 @@
1
- {% extends "base.html" %}
2
-
3
- {% block title %}{{ branding.name }} - Inicio{% endblock %}
4
-
5
- {% block styles %}
6
- {# Carga las variables de CSS personalizadas de la empresa #}
7
- <style>
8
- {{ branding.css_variables | safe }}
9
- </style>
10
- {% endblock %}
11
-
12
- {% block content %}
13
- {% include '_company_header.html' %}
14
-
15
- {# Contenido principal con la propuesta de valor y el widget de login #}
16
- <div class="container my-4 my-md-5">
17
- <div class="row align-items-center g-5">
18
-
19
- {# Columna de la propuesta de valor #}
20
- <div class="col-lg-7">
21
- <h1 class="branded-headline mb-3">Inteligencia Artificial con nuestros propios datos</h1>
22
- <p class="lead text-muted">
23
- Hemos diseñado este asistente de inteligencia artificial, entrenado exclusivamente con el conocimiento y los datos de Sample Company, para ser tu principal punto de apoyo. Olvídate de buscar en múltiples sistemas; ahora puedes obtener respuestas precisas y agilizar tus tareas en un solo lugar.
24
- </p>
25
- <ul class="list-unstyled mt-4 fs-5">
26
- <li class="mb-2"><i class="bi bi-check-circle-fill text-branded-primary me-2"></i>Consulta al instante políticas internas, manuales de procedimientos y la documentación de cualquier proyecto.</li>
27
- <li class="mb-2"><i class="bi bi-check-circle-fill text-branded-primary me-2"></i>Genera resúmenes de informes, redacta borradores de correos electrónicos o traduce documentos con total seguridad.</li>
28
- <li class="mb-2"><i class="bi bi-check-circle-fill text-branded-primary me-2"></i>Acelera tus proyectos encontrando rápidamente al experto o equipo correcto para cada consulta.</li> </ul>
29
- </div>
30
-
31
- {# Columna del widget de inicio de sesión #}
32
- <div class="col-lg-5">
33
- <div class="branded-form-container">
34
- <h4 class="branded-form-title">Iniciar Sesión</h4>
35
-
36
- <!-- 1. Encabezado de Marketing -->
37
- <div class="text-center mb-4">
38
- <p class="text-muted widget-intro-text">
39
- Ingresa tus credenciales para acceder a la plataforma de {{ branding.name }}.
40
- </p>
41
- </div>
42
-
43
- <!-- 2. Formulario de Inicio de Sesión -->
44
- <form id="login-form"
45
- action="{{ url_for('login', company_short_name=company_short_name) }}"
46
- method="post">
47
- <div class="mb-3">
48
- <label for="email" class="form-label d-block">Correo Electrónico</label>
49
- <input type="email" id="email" name="email" class="form-control"
50
- required value="{{ form_data.email if form_data is defined else '' }}">
51
- </div>
52
- <div class="mb-3">
53
- <label for="password" class="form-label d-block">Contraseña</label>
54
- <input type="password" id="password" name="password"
55
- class="form-control" required>
56
- </div>
57
- <button type="submit" class="btn btn-branded-primary w-100 fw-bold py-2">
58
- Iniciar Sesión
59
- </button>
60
- </form>
61
-
62
- <!-- 3. Nueva Sección de Registro más Atractiva -->
63
- <div class="mt-4 pt-3 text-center" style="border-top: 1px solid #e0e0e0;">
64
- <span class="text-muted small">¿Eres nuevo aquí?</span>
65
- <a href="{{ url_for('signup', company_short_name=company_short_name) }}" id="signup-link" class="fw-bold ms-1 text-decoration-none" style="color: var(--brand-primary-color);">Crea una cuenta gratis</a>
66
- </div>
67
-
68
- <!-- 4. Enlace de Recuperación de Contraseña (más sutil) -->
69
- <div class="text-center mt-2">
70
- <a href="{{ url_for('forgot_password', company_short_name=company_short_name) }}" class="text-decoration-none text-muted" style="font-size: 0.8rem;">
71
- ¿Olvidaste tu contraseña?
72
- </a>
73
- </div>
74
- </div>
75
- </div>
76
-
77
- </div>
78
- </div>
79
-
80
- {% endblock %}
@@ -1,43 +0,0 @@
1
- # iatoolkit/views/home_view.py
2
-
3
- from flask import render_template, abort, session
4
- from flask.views import MethodView
5
- from injector import inject
6
- from iatoolkit.services.profile_service import ProfileService
7
- from iatoolkit.services.branding_service import BrandingService
8
-
9
-
10
- class HomeView(MethodView):
11
- """
12
- Handles the rendering of the company-specific home page with a login widget.
13
- """
14
-
15
- @inject
16
- def __init__(self,
17
- profile_service: ProfileService,
18
- branding_service: BrandingService):
19
- self.profile_service = profile_service
20
- self.branding_service = branding_service
21
-
22
- def get(self, company_short_name: str):
23
- company = self.profile_service.get_company_by_short_name(company_short_name)
24
-
25
- if not company:
26
- abort(404, description=f"La empresa '{company_short_name}' no fue encontrada.")
27
-
28
- # Obtener los datos de branding para la plantilla
29
- branding_data = self.branding_service.get_company_branding(company)
30
-
31
- # Recuperar y limpiar cualquier mensaje de alerta de la sesión
32
- alert_message = session.pop('alert_message', None)
33
- alert_icon = session.pop('alert_icon', 'error')
34
-
35
- # Renderizar la nueva plantilla home.html
36
- return render_template(
37
- 'home.html',
38
- company=company,
39
- company_short_name=company_short_name,
40
- branding=branding_data,
41
- alert_message=alert_message,
42
- alert_icon=alert_icon
43
- )
File without changes
File without changes
File without changes