iatoolkit 0.71.4__py3-none-any.whl → 0.91.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. iatoolkit/__init__.py +15 -5
  2. iatoolkit/base_company.py +4 -58
  3. iatoolkit/cli_commands.py +6 -7
  4. iatoolkit/common/exceptions.py +1 -0
  5. iatoolkit/common/routes.py +12 -28
  6. iatoolkit/common/util.py +7 -1
  7. iatoolkit/company_registry.py +50 -14
  8. iatoolkit/{iatoolkit.py → core.py} +54 -55
  9. iatoolkit/infra/{mail_app.py → brevo_mail_app.py} +15 -37
  10. iatoolkit/infra/llm_client.py +9 -5
  11. iatoolkit/locales/en.yaml +10 -2
  12. iatoolkit/locales/es.yaml +171 -162
  13. iatoolkit/repositories/database_manager.py +59 -14
  14. iatoolkit/repositories/llm_query_repo.py +34 -22
  15. iatoolkit/repositories/models.py +16 -18
  16. iatoolkit/repositories/profile_repo.py +5 -10
  17. iatoolkit/repositories/vs_repo.py +9 -4
  18. iatoolkit/services/auth_service.py +1 -1
  19. iatoolkit/services/branding_service.py +1 -1
  20. iatoolkit/services/company_context_service.py +19 -11
  21. iatoolkit/services/configuration_service.py +219 -46
  22. iatoolkit/services/dispatcher_service.py +31 -225
  23. iatoolkit/services/document_service.py +10 -1
  24. iatoolkit/services/embedding_service.py +9 -6
  25. iatoolkit/services/excel_service.py +50 -2
  26. iatoolkit/services/history_manager_service.py +189 -0
  27. iatoolkit/services/jwt_service.py +1 -1
  28. iatoolkit/services/language_service.py +8 -2
  29. iatoolkit/services/license_service.py +82 -0
  30. iatoolkit/services/mail_service.py +171 -25
  31. iatoolkit/services/profile_service.py +37 -32
  32. iatoolkit/services/{prompt_manager_service.py → prompt_service.py} +110 -1
  33. iatoolkit/services/query_service.py +192 -191
  34. iatoolkit/services/sql_service.py +63 -12
  35. iatoolkit/services/tool_service.py +231 -0
  36. iatoolkit/services/user_feedback_service.py +18 -6
  37. iatoolkit/services/user_session_context_service.py +18 -0
  38. iatoolkit/static/images/iatoolkit_core.png +0 -0
  39. iatoolkit/static/images/iatoolkit_logo.png +0 -0
  40. iatoolkit/static/js/chat_feedback_button.js +1 -1
  41. iatoolkit/static/js/chat_help_content.js +4 -4
  42. iatoolkit/static/js/chat_main.js +17 -5
  43. iatoolkit/static/js/chat_onboarding_button.js +1 -1
  44. iatoolkit/static/styles/chat_iatoolkit.css +1 -1
  45. iatoolkit/static/styles/chat_public.css +28 -0
  46. iatoolkit/static/styles/documents.css +598 -0
  47. iatoolkit/static/styles/landing_page.css +223 -7
  48. iatoolkit/system_prompts/__init__.py +0 -0
  49. iatoolkit/system_prompts/query_main.prompt +2 -1
  50. iatoolkit/system_prompts/sql_rules.prompt +47 -12
  51. iatoolkit/templates/_company_header.html +30 -5
  52. iatoolkit/templates/_login_widget.html +3 -3
  53. iatoolkit/templates/chat.html +1 -1
  54. iatoolkit/templates/forgot_password.html +3 -2
  55. iatoolkit/templates/onboarding_shell.html +1 -1
  56. iatoolkit/templates/signup.html +3 -0
  57. iatoolkit/views/base_login_view.py +1 -1
  58. iatoolkit/views/change_password_view.py +1 -1
  59. iatoolkit/views/forgot_password_view.py +9 -4
  60. iatoolkit/views/history_api_view.py +3 -3
  61. iatoolkit/views/home_view.py +4 -2
  62. iatoolkit/views/init_context_api_view.py +1 -1
  63. iatoolkit/views/llmquery_api_view.py +4 -3
  64. iatoolkit/views/{file_store_api_view.py → load_document_api_view.py} +1 -1
  65. iatoolkit/views/login_view.py +17 -5
  66. iatoolkit/views/logout_api_view.py +10 -2
  67. iatoolkit/views/prompt_api_view.py +1 -1
  68. iatoolkit/views/root_redirect_view.py +22 -0
  69. iatoolkit/views/signup_view.py +12 -4
  70. iatoolkit/views/static_page_view.py +27 -0
  71. iatoolkit/views/verify_user_view.py +1 -1
  72. iatoolkit-0.91.1.dist-info/METADATA +268 -0
  73. iatoolkit-0.91.1.dist-info/RECORD +125 -0
  74. iatoolkit-0.91.1.dist-info/licenses/LICENSE_COMMUNITY.md +15 -0
  75. iatoolkit/services/history_service.py +0 -37
  76. iatoolkit/templates/about.html +0 -13
  77. iatoolkit/templates/index.html +0 -145
  78. iatoolkit/templates/login_simulation.html +0 -45
  79. iatoolkit/views/external_login_view.py +0 -73
  80. iatoolkit/views/index_view.py +0 -14
  81. iatoolkit/views/login_simulation_view.py +0 -93
  82. iatoolkit-0.71.4.dist-info/METADATA +0 -276
  83. iatoolkit-0.71.4.dist-info/RECORD +0 -122
  84. {iatoolkit-0.71.4.dist-info → iatoolkit-0.91.1.dist-info}/WHEEL +0 -0
  85. {iatoolkit-0.71.4.dist-info → iatoolkit-0.91.1.dist-info}/licenses/LICENSE +0 -0
  86. {iatoolkit-0.71.4.dist-info → iatoolkit-0.91.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,598 @@
1
+ /* === Article Page Styles === */
2
+ .article-container {
3
+ max-width: 800px;
4
+ margin: 40px auto;
5
+ padding: 20px;
6
+ font-family: 'Georgia', serif;
7
+ line-height: 1.8;
8
+ color: #333;
9
+ background-color: #fff;
10
+ }
11
+
12
+ .article-header {
13
+ margin-bottom: 40px;
14
+ border-bottom: 1px solid #eee;
15
+ padding-bottom: 20px;
16
+ }
17
+
18
+ .article-title {
19
+ font-family: 'Helvetica Neue', sans-serif;
20
+ font-weight: 700;
21
+ font-size: 2.5rem;
22
+ color: #111;
23
+ line-height: 1.2;
24
+ }
25
+
26
+ .article-subtitle {
27
+ font-size: 1.25rem;
28
+ color: #666;
29
+ font-style: italic;
30
+ margin-top: 15px;
31
+ }
32
+
33
+ .article-date i {
34
+ margin-right: 0.35rem;
35
+ color: #6c757d;
36
+ font-size: 1rem;
37
+ position: relative;
38
+ top: 1px;
39
+ }
40
+
41
+ .article-content h2 {
42
+ font-family: 'Helvetica Neue', sans-serif;
43
+ font-weight: 600;
44
+ font-size: 1.8rem;
45
+ margin-top: 2.5rem;
46
+ margin-bottom: 1rem;
47
+ color: #222;
48
+ }
49
+
50
+ .article-content h3 {
51
+ font-family: 'Helvetica Neue', sans-serif;
52
+ font-weight: 600;
53
+ font-size: 1.4rem;
54
+ margin-top: 2rem;
55
+ margin-bottom: 0.8rem;
56
+ color: #333;
57
+ }
58
+
59
+ .article-content p {
60
+ margin-bottom: 1.5rem;
61
+ font-size: 1.1rem;
62
+ }
63
+
64
+ .article-content ul {
65
+ list-style: none; /* Quitamos los bullets por defecto */
66
+ padding-left: 0;
67
+ margin-bottom: 1.5rem;
68
+ }
69
+
70
+ .article-content li {
71
+ position: relative; /* Necesario para posicionar el bullet personalizado */
72
+ padding-left: 1.75em; /* Espacio a la izquierda para el nuevo bullet */
73
+ margin-bottom: 0.8rem; /* Un poco más de aire entre elementos */
74
+ font-size: 1.1rem;
75
+ }
76
+
77
+ .article-content li::before {
78
+ content: '•'; /* Este es nuestro nuevo bullet */
79
+ position: absolute;
80
+ left: 0;
81
+ top: -0.05em; /* Ajuste fino de la alineación vertical */
82
+
83
+ font-weight: bold;
84
+ font-size: 1.2em; /* Hacemos el bullet un poco más grande */
85
+ }
86
+
87
+
88
+ .article-content pre {
89
+ background-color: #f8f9fa;
90
+ border: 1px solid #e9ecef;
91
+ border-radius: 4px;
92
+ padding: 15px;
93
+ overflow-x: auto;
94
+ margin-bottom: 1.5rem;
95
+ font-size: 0.9em;
96
+ }
97
+
98
+ .article-content blockquote {
99
+ border-left: 4px solid #ddd;
100
+ padding-left: 15px;
101
+ color: #555;
102
+ font-style: italic;
103
+ margin: 1.5em 0;
104
+ }
105
+
106
+ .article-footer {
107
+ margin-top: 4rem;
108
+ padding-top: 2rem;
109
+ border-top: 1px solid #e9ecef;
110
+ }
111
+
112
+ .article-content code {
113
+ color: #343a40; /* Cambia el color del texto a uno oscuro y neutro */
114
+ background-color: #f1f3f5; /* Fondo gris claro para resaltar */
115
+ padding: 0.2em 0.4em;
116
+ margin: 0;
117
+ font-size: 85%;
118
+ border-radius: 3px;
119
+ font-family: 'Courier New', monospace;
120
+ }
121
+
122
+ /* Stair-style timeline */
123
+ .iat-stair-timeline {
124
+ position: relative;
125
+ margin: 2rem 0 1.5rem;
126
+ min-height: 10rem;
127
+ }
128
+
129
+ .iat-stair-step {
130
+ position: relative;
131
+ max-width: 260px;
132
+ background-color: #f8f9fa;
133
+ border-radius: 10px;
134
+ padding: 0.75rem 1rem;
135
+ box-shadow: 0 2px 8px rgba(0,0,0,0.06);
136
+ }
137
+
138
+ .iat-stair-header {
139
+ display: flex;
140
+ justify-content: flex-start;
141
+ margin-bottom: 0.35rem;
142
+ }
143
+
144
+ .iat-stair-phase-badge {
145
+ display: inline-block;
146
+ background-color: #4A55A2; /* IAToolkit color */
147
+ color: #ffffff;
148
+ font-size: 0.8rem;
149
+ font-weight: 600;
150
+ border-radius: 999px;
151
+ padding: 0.1rem 0.7rem;
152
+ }
153
+
154
+ .iat-stair-title {
155
+ font-size: 0.9rem;
156
+ margin: 0;
157
+ color: #343a40;
158
+ }
159
+
160
+ /* Posiciones escalonadas: hacia la derecha y hacia abajo */
161
+ .iat-stair-step.step-1 {
162
+ left: 0%;
163
+ top: 0;
164
+ }
165
+
166
+ .iat-stair-step.step-2 {
167
+ left: 24%;
168
+ top: 1.2rem;
169
+ }
170
+
171
+ .iat-stair-step.step-3 {
172
+ left: 48%;
173
+ top: 2.4rem;
174
+ }
175
+
176
+ .iat-stair-step.step-4 {
177
+ left: 72%;
178
+ top: 3.6rem;
179
+ }
180
+
181
+ /* Ajuste responsive: en pantallas pequeñas, apilar vertical */
182
+ @media (max-width: 768px) {
183
+ .iat-stair-timeline {
184
+ min-height: auto;
185
+ }
186
+
187
+ .iat-stair-step {
188
+ position: static;
189
+ margin-bottom: 0.75rem;
190
+ max-width: 100%;
191
+ }
192
+ }
193
+
194
+ /* Intelligence bar */
195
+ .iat-intelligence-bar {
196
+ margin: 1.5rem 0 2.5rem;
197
+ }
198
+
199
+ .iat-intelligence-labels {
200
+ display: flex;
201
+ justify-content: space-between;
202
+ font-size: 0.9rem;
203
+ color: #495057;
204
+ margin-bottom: 0.35rem;
205
+ }
206
+
207
+ .iat-intelligence-end {
208
+ font-weight: 500;
209
+ }
210
+
211
+ .iat-intelligence-track {
212
+ position: relative;
213
+ height: 6px;
214
+ border-radius: 999px;
215
+ background: #e2e5f5;
216
+ overflow: hidden;
217
+ margin-bottom: 0.4rem;
218
+ }
219
+
220
+ .iat-intelligence-fill {
221
+ width: 100%;
222
+ height: 100%;
223
+ background: linear-gradient(to right, #cfd3ff, #4A55A2);
224
+ }
225
+
226
+ .iat-intelligence-marks {
227
+ display: flex;
228
+ justify-content: space-between;
229
+ font-size: 0.75rem;
230
+ color: #6c757d;
231
+ }
232
+
233
+
234
+ /* -------- IAToolkit Core Diagram -------- */
235
+
236
+ .iat-core-diagram {
237
+ max-width: 420px;
238
+ margin: 2rem auto;
239
+ padding: 1.5rem 1.75rem;
240
+ border-radius: 18px;
241
+ background: #ffffff;
242
+ box-shadow: 0 4px 18px rgba(0,0,0,0.06);
243
+ font-family: inherit;
244
+ color: #1f2933;
245
+ font-size: 0.9rem;
246
+ }
247
+
248
+ /* Generic box inside Core diagram */
249
+ .iat-core-diagram .core-box {
250
+ border-radius: 10px;
251
+ border: 1px solid rgba(0,0,0,0.08);
252
+ padding: 0.75rem 1rem;
253
+ text-align: center;
254
+ background: #ffffff;
255
+ }
256
+
257
+ /* Titles & subtitles */
258
+ .iat-core-diagram .core-title {
259
+ font-weight: 600;
260
+ margin-bottom: 0.15rem;
261
+ }
262
+
263
+ .iat-core-diagram .core-sub {
264
+ font-size: 0.8rem;
265
+ color: #6c757d;
266
+ }
267
+
268
+ /* Main Core Box */
269
+ .iat-core-diagram .core-main {
270
+ background: #f7f8ff;
271
+ border-color: #d8ddff;
272
+ }
273
+
274
+ .iat-core-diagram .core-main-title {
275
+ font-weight: 700;
276
+ margin-bottom: 0.5rem;
277
+ color: #25316D;
278
+ font-size: 0.95rem;
279
+ }
280
+
281
+ .iat-core-diagram .core-main-layers {
282
+ border-radius: 8px;
283
+ border: 1px solid rgba(0,0,0,0.06);
284
+ overflow: hidden;
285
+ font-size: 0.8rem;
286
+ }
287
+
288
+ .iat-core-diagram .core-layer {
289
+ padding: 0.35rem 0.5rem;
290
+ background: #ffffff;
291
+ }
292
+
293
+ .iat-core-diagram .core-layer + .core-layer {
294
+ border-top: 1px solid rgba(0,0,0,0.05);
295
+ }
296
+
297
+ /* Companies row */
298
+ .iat-core-diagram .core-companies-row {
299
+ display: flex;
300
+ gap: 0.75rem;
301
+ margin-top: 0.75rem;
302
+ margin-bottom: 0.25rem;
303
+ }
304
+
305
+ /* Data box spacing */
306
+ .iat-core-diagram .core-data {
307
+ margin-top: 0.5rem;
308
+ }
309
+
310
+ /* Vertical arrow */
311
+ .iat-core-diagram .core-arrow {
312
+ width: 100%;
313
+ height: 18px;
314
+ position: relative;
315
+ margin: 0.4rem 0;
316
+ }
317
+
318
+ .iat-core-diagram .core-arrow::before {
319
+ content: "";
320
+ position: absolute;
321
+ top: 0;
322
+ left: 50%;
323
+ height: 12px;
324
+ border-left: 1px solid #9ca3af;
325
+ transform: translateX(-50%);
326
+ }
327
+
328
+ .iat-core-diagram .core-arrow::after {
329
+ content: "";
330
+ position: absolute;
331
+ bottom: 0;
332
+ left: 50%;
333
+ border-width: 5px 4px 0 4px;
334
+ border-style: solid;
335
+ border-color: #9ca3af transparent transparent transparent;
336
+ transform: translateX(-50%);
337
+ }
338
+
339
+ /* Split arrow to both companies */
340
+ .iat-core-diagram .core-arrow-split {
341
+ position: relative;
342
+ height: 32px;
343
+ margin-top: 0.4rem;
344
+ }
345
+
346
+ .iat-core-diagram .core-arrow-split .split-line {
347
+ position: absolute;
348
+ top: 0;
349
+ left: 50%;
350
+ height: 16px;
351
+ border-left: 1px solid #9ca3af;
352
+ transform: translateX(-50%);
353
+ }
354
+
355
+ .iat-core-diagram .core-arrow-split .split-arrow-left,
356
+ .iat-core-diagram .core-arrow-split .split-arrow-right {
357
+ position: absolute;
358
+ top: 18px;
359
+ width: 50%;
360
+ height: 12px;
361
+ }
362
+
363
+ /* Línea horizontal */
364
+ .iat-core-diagram .core-arrow-split .split-arrow-left::before,
365
+ .iat-core-diagram .core-arrow-split .split-arrow-right::before {
366
+ content: "";
367
+ position: absolute;
368
+ top: 7px;
369
+ width: 100%;
370
+ border-top: 1px solid #9ca3af;
371
+ }
372
+
373
+ /* Puntita de la flecha */
374
+ .iat-core-diagram .core-arrow-split .split-arrow-left::after,
375
+ .iat-core-diagram .core-arrow-split .split-arrow-right::after {
376
+ content: "";
377
+ position: absolute;
378
+ top: -1px;
379
+ border-width: 5px 4px 0 4px;
380
+ border-style: solid;
381
+ border-color: #9ca3af transparent transparent transparent;
382
+ }
383
+
384
+ .iat-core-diagram .core-arrow-split .split-arrow-left {
385
+ left: 0;
386
+ }
387
+
388
+ .iat-core-diagram .core-arrow-split .split-arrow-left::after {
389
+ left: calc(100% - 4px);
390
+ }
391
+
392
+ .iat-core-diagram .core-arrow-split .split-arrow-right {
393
+ right: 0;
394
+ }
395
+
396
+ .iat-core-diagram .core-arrow-split .split-arrow-right::after {
397
+ right: calc(100% - 4px);
398
+ }
399
+
400
+ /* Dispatcher Diagram container */
401
+ .dispatcher-diagram {
402
+ max-width: 420px;
403
+ margin: 2rem auto;
404
+ padding: 1.5rem 1.75rem;
405
+ border-radius: 18px;
406
+ background: #f8fafc;
407
+ box-shadow: 0 4px 18px rgba(0,0,0,0.06);
408
+ font-family: inherit;
409
+ color: #1f2933;
410
+ font-size: 0.9rem;
411
+ position: relative;
412
+ text-align: center;
413
+ }
414
+
415
+ /* Generic box */
416
+ .disp-box {
417
+ border-radius: 14px;
418
+ border: 1px solid rgba(0,0,0,0.06);
419
+ background: #ffffff;
420
+ padding: 0.75rem 1.2rem;
421
+ display: inline-flex;
422
+ align-items: center;
423
+ justify-content: center;
424
+ gap: 0.5rem;
425
+ }
426
+
427
+ /* Dispatcher main box */
428
+ .disp-main {
429
+ background: #4A55A2;
430
+ border-color: #4A55A2;
431
+ color: #ffffff;
432
+ margin: 0 auto;
433
+ min-width: 240px;
434
+ padding: 1rem 1.25rem; /* ← antes era 0.75rem */
435
+ padding-top: 1.2rem; /* más aire vertical */
436
+ padding-bottom: 1.2rem;
437
+ border-radius: 16px; /* más suave */
438
+ gap: 0.75rem; /* separa mejor ícono-texto */
439
+ }
440
+
441
+ .disp-main-text {
442
+ font-weight: 700;
443
+ font-size: 1.15rem;
444
+ letter-spacing: 0.3px;
445
+ font-family: "Segoe UI", Inter, system-ui, sans-serif;
446
+ }
447
+
448
+ .disp-icon {
449
+ font-size: 1.6rem;
450
+ line-height: 1;
451
+ margin-right: 0.2rem;
452
+ }
453
+
454
+ /* Document icon */
455
+ .disp-doc-icon {
456
+ font-size: 1.1rem;
457
+ color: #4A55A2;
458
+ margin-right: 0.35rem;
459
+ }
460
+
461
+ /* Vertical arrows */
462
+ .disp-arrow-vertical {
463
+ width: 100%;
464
+ height: 24px;
465
+ position: relative;
466
+ margin: 0.4rem 0 0.2rem;
467
+ }
468
+
469
+ .disp-arrow-vertical::before {
470
+ content: "";
471
+ position: absolute;
472
+ top: 0;
473
+ left: 50%;
474
+ height: 16px;
475
+ border-left: 1px solid #9ca3af;
476
+ transform: translateX(-50%);
477
+ }
478
+
479
+ .disp-arrow-vertical::after {
480
+ content: "";
481
+ position: absolute;
482
+ bottom: 0;
483
+ left: 50%;
484
+ border-width: 5px 4px 0 4px;
485
+ border-style: solid;
486
+ border-color: #9ca3af transparent transparent transparent;
487
+ transform: translateX(-50%);
488
+ }
489
+
490
+ .disp-arrow-small {
491
+ height: 20px;
492
+ margin-top: 0.2rem;
493
+ }
494
+
495
+ /* Branch row from Dispatcher to both columns */
496
+ .disp-branch-row {
497
+ position: relative;
498
+ height: 20px;
499
+ margin-bottom: 0.3rem;
500
+ }
501
+
502
+ .disp-branch-line {
503
+ position: absolute;
504
+ top: 10px;
505
+ left: 18%;
506
+ right: 18%;
507
+ border-top: 1px solid #9ca3af;
508
+ }
509
+
510
+ .disp-branch-node {
511
+ position: absolute;
512
+ top: 10px;
513
+ width: 0;
514
+ height: 10px;
515
+ border-left: 1px solid #9ca3af;
516
+ }
517
+
518
+ .disp-branch-node.left {
519
+ left: 30%;
520
+ }
521
+
522
+ .disp-branch-node.right {
523
+ right: 30%;
524
+ }
525
+
526
+ /* Columns: company + resource */
527
+ .disp-companies-row {
528
+ display: flex;
529
+ justify-content: space-between;
530
+ gap: 0.9rem;
531
+ margin-top: 0.2rem;
532
+ }
533
+
534
+ .disp-column {
535
+ flex: 1;
536
+ }
537
+
538
+ /* Company boxes */
539
+ .disp-company {
540
+ background: #f3f4f6;
541
+ border-radius: 14px;
542
+ border-color: rgba(0,0,0,0.04);
543
+ flex-direction: column;
544
+ padding: 0.75rem 0.9rem;
545
+ }
546
+
547
+ /* “Building” icon */
548
+ .disp-company-icon {
549
+ width: 26px;
550
+ height: 18px;
551
+ border-radius: 2px;
552
+ border: 2px solid #4b5563;
553
+ border-bottom-width: 4px;
554
+ margin: 0 auto 0.25rem;
555
+ position: relative;
556
+ }
557
+
558
+ .disp-company-icon::before,
559
+ .disp-company-icon::after {
560
+ content: "";
561
+ position: absolute;
562
+ bottom: -4px;
563
+ width: 6px;
564
+ height: 4px;
565
+ background: #4b5563;
566
+ }
567
+
568
+ .disp-company-icon::before {
569
+ left: 3px;
570
+ }
571
+
572
+ .disp-company-icon::after {
573
+ right: 3px;
574
+ }
575
+
576
+ .disp-company-text {
577
+ font-size: 0.9rem;
578
+ font-weight: 500;
579
+ }
580
+
581
+ /* Resource boxes */
582
+ .disp-resource {
583
+ margin-top: 0.1rem;
584
+ justify-content: flex-start;
585
+ }
586
+
587
+ .disp-resource-text {
588
+ font-size: 0.85rem;
589
+ font-weight: 500;
590
+ }
591
+
592
+ /* Responsive tweak */
593
+ @media (max-width: 480px) {
594
+ .dispatcher-diagram {
595
+ padding: 1.3rem 1.1rem;
596
+ font-size: 0.85rem;
597
+ }
598
+ }