iatoolkit 0.4.2__py3-none-any.whl → 0.66.2__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 (123) hide show
  1. iatoolkit/__init__.py +13 -35
  2. iatoolkit/base_company.py +74 -8
  3. iatoolkit/cli_commands.py +15 -23
  4. iatoolkit/common/__init__.py +0 -0
  5. iatoolkit/common/exceptions.py +46 -0
  6. iatoolkit/common/routes.py +141 -0
  7. iatoolkit/common/session_manager.py +24 -0
  8. iatoolkit/common/util.py +348 -0
  9. iatoolkit/company_registry.py +7 -8
  10. iatoolkit/iatoolkit.py +169 -96
  11. iatoolkit/infra/__init__.py +5 -0
  12. iatoolkit/infra/call_service.py +140 -0
  13. iatoolkit/infra/connectors/__init__.py +5 -0
  14. iatoolkit/infra/connectors/file_connector.py +17 -0
  15. iatoolkit/infra/connectors/file_connector_factory.py +57 -0
  16. iatoolkit/infra/connectors/google_cloud_storage_connector.py +53 -0
  17. iatoolkit/infra/connectors/google_drive_connector.py +68 -0
  18. iatoolkit/infra/connectors/local_file_connector.py +46 -0
  19. iatoolkit/infra/connectors/s3_connector.py +33 -0
  20. iatoolkit/infra/gemini_adapter.py +356 -0
  21. iatoolkit/infra/google_chat_app.py +57 -0
  22. iatoolkit/infra/llm_client.py +429 -0
  23. iatoolkit/infra/llm_proxy.py +139 -0
  24. iatoolkit/infra/llm_response.py +40 -0
  25. iatoolkit/infra/mail_app.py +145 -0
  26. iatoolkit/infra/openai_adapter.py +90 -0
  27. iatoolkit/infra/redis_session_manager.py +122 -0
  28. iatoolkit/locales/en.yaml +144 -0
  29. iatoolkit/locales/es.yaml +140 -0
  30. iatoolkit/repositories/__init__.py +5 -0
  31. iatoolkit/repositories/database_manager.py +110 -0
  32. iatoolkit/repositories/document_repo.py +33 -0
  33. iatoolkit/repositories/llm_query_repo.py +91 -0
  34. iatoolkit/repositories/models.py +336 -0
  35. iatoolkit/repositories/profile_repo.py +123 -0
  36. iatoolkit/repositories/tasks_repo.py +52 -0
  37. iatoolkit/repositories/vs_repo.py +139 -0
  38. iatoolkit/services/__init__.py +5 -0
  39. iatoolkit/services/auth_service.py +193 -0
  40. {services → iatoolkit/services}/benchmark_service.py +6 -6
  41. iatoolkit/services/branding_service.py +149 -0
  42. {services → iatoolkit/services}/dispatcher_service.py +39 -99
  43. {services → iatoolkit/services}/document_service.py +5 -5
  44. {services → iatoolkit/services}/excel_service.py +27 -21
  45. {services → iatoolkit/services}/file_processor_service.py +5 -5
  46. iatoolkit/services/help_content_service.py +30 -0
  47. {services → iatoolkit/services}/history_service.py +8 -16
  48. iatoolkit/services/i18n_service.py +104 -0
  49. {services → iatoolkit/services}/jwt_service.py +18 -27
  50. iatoolkit/services/language_service.py +77 -0
  51. {services → iatoolkit/services}/load_documents_service.py +19 -14
  52. {services → iatoolkit/services}/mail_service.py +5 -5
  53. iatoolkit/services/onboarding_service.py +43 -0
  54. {services → iatoolkit/services}/profile_service.py +155 -89
  55. {services → iatoolkit/services}/prompt_manager_service.py +26 -11
  56. {services → iatoolkit/services}/query_service.py +142 -104
  57. {services → iatoolkit/services}/search_service.py +21 -5
  58. {services → iatoolkit/services}/sql_service.py +24 -6
  59. {services → iatoolkit/services}/tasks_service.py +10 -10
  60. iatoolkit/services/user_feedback_service.py +103 -0
  61. iatoolkit/services/user_session_context_service.py +143 -0
  62. iatoolkit/static/images/fernando.jpeg +0 -0
  63. iatoolkit/static/js/chat_feedback_button.js +80 -0
  64. iatoolkit/static/js/chat_filepond.js +85 -0
  65. iatoolkit/static/js/chat_help_content.js +124 -0
  66. iatoolkit/static/js/chat_history_button.js +112 -0
  67. iatoolkit/static/js/chat_logout_button.js +36 -0
  68. iatoolkit/static/js/chat_main.js +364 -0
  69. iatoolkit/static/js/chat_onboarding_button.js +97 -0
  70. iatoolkit/static/js/chat_prompt_manager.js +94 -0
  71. iatoolkit/static/js/chat_reload_button.js +35 -0
  72. iatoolkit/static/styles/chat_iatoolkit.css +592 -0
  73. iatoolkit/static/styles/chat_modal.css +169 -0
  74. iatoolkit/static/styles/chat_public.css +107 -0
  75. iatoolkit/static/styles/landing_page.css +182 -0
  76. iatoolkit/static/styles/llm_output.css +115 -0
  77. iatoolkit/static/styles/onboarding.css +169 -0
  78. iatoolkit/system_prompts/query_main.prompt +5 -15
  79. iatoolkit/templates/_company_header.html +20 -0
  80. iatoolkit/templates/_login_widget.html +42 -0
  81. iatoolkit/templates/about.html +13 -0
  82. iatoolkit/templates/base.html +65 -0
  83. iatoolkit/templates/change_password.html +66 -0
  84. iatoolkit/templates/chat.html +287 -0
  85. iatoolkit/templates/chat_modals.html +181 -0
  86. iatoolkit/templates/error.html +51 -0
  87. iatoolkit/templates/forgot_password.html +50 -0
  88. iatoolkit/templates/index.html +145 -0
  89. iatoolkit/templates/login_simulation.html +34 -0
  90. iatoolkit/templates/onboarding_shell.html +104 -0
  91. iatoolkit/templates/signup.html +76 -0
  92. iatoolkit/views/__init__.py +5 -0
  93. iatoolkit/views/base_login_view.py +92 -0
  94. iatoolkit/views/change_password_view.py +117 -0
  95. iatoolkit/views/external_login_view.py +73 -0
  96. iatoolkit/views/file_store_api_view.py +65 -0
  97. iatoolkit/views/forgot_password_view.py +72 -0
  98. iatoolkit/views/help_content_api_view.py +54 -0
  99. iatoolkit/views/history_api_view.py +56 -0
  100. iatoolkit/views/home_view.py +61 -0
  101. iatoolkit/views/index_view.py +14 -0
  102. iatoolkit/views/init_context_api_view.py +73 -0
  103. iatoolkit/views/llmquery_api_view.py +57 -0
  104. iatoolkit/views/login_simulation_view.py +81 -0
  105. iatoolkit/views/login_view.py +153 -0
  106. iatoolkit/views/logout_api_view.py +49 -0
  107. iatoolkit/views/profile_api_view.py +46 -0
  108. iatoolkit/views/prompt_api_view.py +37 -0
  109. iatoolkit/views/signup_view.py +94 -0
  110. iatoolkit/views/tasks_api_view.py +72 -0
  111. iatoolkit/views/tasks_review_api_view.py +55 -0
  112. iatoolkit/views/user_feedback_api_view.py +60 -0
  113. iatoolkit/views/verify_user_view.py +62 -0
  114. {iatoolkit-0.4.2.dist-info → iatoolkit-0.66.2.dist-info}/METADATA +2 -2
  115. iatoolkit-0.66.2.dist-info/RECORD +119 -0
  116. {iatoolkit-0.4.2.dist-info → iatoolkit-0.66.2.dist-info}/top_level.txt +0 -1
  117. iatoolkit/system_prompts/arquitectura.prompt +0 -32
  118. iatoolkit-0.4.2.dist-info/RECORD +0 -32
  119. services/__init__.py +0 -5
  120. services/api_service.py +0 -75
  121. services/user_feedback_service.py +0 -67
  122. services/user_session_context_service.py +0 -85
  123. {iatoolkit-0.4.2.dist-info → iatoolkit-0.66.2.dist-info}/WHEEL +0 -0
@@ -0,0 +1,119 @@
1
+ iatoolkit/__init__.py,sha256=4PWjMJjktixtrxF6BY405qyA50Sv967kEP2x-oil6qk,1120
2
+ iatoolkit/base_company.py,sha256=vU4ki-wB3PWIn3_Bvehfh0TfBH_XNC614tRBKNmEd84,4718
3
+ iatoolkit/cli_commands.py,sha256=G5L9xQXZ0lVFXQWBaE_KEZHyfuiT6PL1nTQRoSdnBzc,2302
4
+ iatoolkit/company_registry.py,sha256=tduqt3oV8iDX_IB1eA7KIgvIxE4edTcy-3qZIXh3Lzw,2549
5
+ iatoolkit/iatoolkit.py,sha256=lz8-49TDLG0RcDqg5kh7jlir7K6JQbKDRKTBMGGKu7c,19134
6
+ iatoolkit/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ iatoolkit/common/exceptions.py,sha256=EXx40n5htp7UiOM6P1xfJ9U6NMcADqm62dlFaKz7ICU,1154
8
+ iatoolkit/common/routes.py,sha256=sYkW9mLIh8IUh8v_CyLxwR9wELiPJdZqjt07DVyozeU,6261
9
+ iatoolkit/common/session_manager.py,sha256=UeKfD15bcEA3P5e0WSURfotLqpsiIMp3AXxAMhtgHs0,471
10
+ iatoolkit/common/util.py,sha256=lwMhQ2gT1DPzJ3mmL9xw3uobWJFIapAw50ks6mCvV60,15028
11
+ iatoolkit/infra/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
12
+ iatoolkit/infra/call_service.py,sha256=iRk9VxbXaAwlLIl8fUzGDWIAdzwfsbs1MtP84YeENxg,4929
13
+ iatoolkit/infra/gemini_adapter.py,sha256=kXV-t5i9GmWBafUPX2kAyiqvcT7GPoxHylcCUWG_c_U,15051
14
+ iatoolkit/infra/google_chat_app.py,sha256=_uKWxeacHH6C5a4FVx0YZjBn1tL-x_MIQV9gqgWGAjo,1937
15
+ iatoolkit/infra/llm_client.py,sha256=clTYqV_0a2VD2vVH3j6AWqd1gVUmeg-fU3_myizmjQc,18543
16
+ iatoolkit/infra/llm_proxy.py,sha256=cHyNxUpVE4UDoWUfvSGfGCrIUFPTrpWZOixELQTsGFY,5744
17
+ iatoolkit/infra/llm_response.py,sha256=YUUQPBHzmP3Ce6-t0kKMRIpowvh7de1odSoefEByIvI,904
18
+ iatoolkit/infra/mail_app.py,sha256=PLGZdEs7LQ_9bmMRRxz0iqQdNa4xToAFyf9tg75wK8U,6103
19
+ iatoolkit/infra/openai_adapter.py,sha256=tbzd8aPAH5cQOJT-sD4ypqq2fWB6WiEIGuGesUDnQNk,3550
20
+ iatoolkit/infra/redis_session_manager.py,sha256=EPr3E_g7LHxn6U4SV5lT_L8WQsAwg8VzA_WIEZ3TwOw,3667
21
+ iatoolkit/infra/connectors/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
22
+ iatoolkit/infra/connectors/file_connector.py,sha256=HOjRTFd-WfDOcFyvHncAhnGNZuFgChIwC-P6osPo9ZM,352
23
+ iatoolkit/infra/connectors/file_connector_factory.py,sha256=3qvyfH4ZHKuiMxJFkawOxhW2-TGKKtsBYHgoPpZMuKU,2118
24
+ iatoolkit/infra/connectors/google_cloud_storage_connector.py,sha256=IXpL3HTo7Ft4EQsYiQq5wXRRQK854jzOEB7ZdWjLa4U,2050
25
+ iatoolkit/infra/connectors/google_drive_connector.py,sha256=WR1AlO5-Bl3W89opdja0kKgHTJzVOjTsy3H4SlIvwVg,2537
26
+ iatoolkit/infra/connectors/local_file_connector.py,sha256=hrzIgpMJOTuwTqzlQeTIU_50ZbZ6yl8lcWPv6hMnoqI,1739
27
+ iatoolkit/infra/connectors/s3_connector.py,sha256=Nj4_YaLobjfcnbZewJf21_K2EXohgcc3mJll1Pzn4zg,1123
28
+ iatoolkit/locales/en.yaml,sha256=6FO_3U7QMvRDve8f6a_VpB5n--F7klTpYbYekB_Gqd8,6577
29
+ iatoolkit/locales/es.yaml,sha256=vQJQWKR7mnGtG32gTcnwJW52YmizVrgGSvKFQuiMw-s,7520
30
+ iatoolkit/repositories/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
31
+ iatoolkit/repositories/database_manager.py,sha256=QgV8hNnVv9RmeOvUdomdj_mfk0bf3Rl8Ti41a-5zIAY,3700
32
+ iatoolkit/repositories/document_repo.py,sha256=Y7bF1kZB1HWJsAGjWdF7P2aVYeTYNufq9ngQXp7mDkY,1124
33
+ iatoolkit/repositories/llm_query_repo.py,sha256=YT_t7cYGQk8rwzH_17-28aTzO-e2jUfa2rvXy8tugvA,3612
34
+ iatoolkit/repositories/models.py,sha256=b08sJ8ZXyIbMa7dK4wgG7juTG7-FzL--ADFv8Zx-sQU,14417
35
+ iatoolkit/repositories/profile_repo.py,sha256=21am3GP7XCG0nq6i3pArQ7mfGsrRn8rdcWT98fsdwlU,4397
36
+ iatoolkit/repositories/tasks_repo.py,sha256=icVO_r2oPagGnnBhwVFzznnvEEU2EAx-2dlWuWvoDC4,1745
37
+ iatoolkit/repositories/vs_repo.py,sha256=UkpmQQiocgM5IwRBmmWhw3HHzHP6zK1nN3J3TcQgjhc,5300
38
+ iatoolkit/services/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
39
+ iatoolkit/services/auth_service.py,sha256=c2yDHNQqbt8Tio7QSL4FaxcHVtsBxLQf8VC2pDetZ4Y,7753
40
+ iatoolkit/services/benchmark_service.py,sha256=CdbFYyS3FHFhNzWQEa9ZNjUlmON10DT1nKNbZQ1EUi8,5880
41
+ iatoolkit/services/branding_service.py,sha256=a9T32oEFZY2e0DXg8WrFGX9KXBJYfuN2sbcD2Hpgypk,7832
42
+ iatoolkit/services/dispatcher_service.py,sha256=Qdn2x4cozpgpKg2448sUxkhO6tuplzb8xPWUxdTTFBE,12772
43
+ iatoolkit/services/document_service.py,sha256=nMXrNtbHQuc9pSaten0LvKY0kT8_WngBDmZJUP3jNPw,5936
44
+ iatoolkit/services/excel_service.py,sha256=JdAcg7_vPz3J16cf2chC6j7WYVpiT55tDX9667tfMUc,3764
45
+ iatoolkit/services/file_processor_service.py,sha256=B1sUUhZNFf-rT4_1wrD38GKNoBFMp2g0dYrXYMCWe2E,4122
46
+ iatoolkit/services/help_content_service.py,sha256=LV-HYe-1YyUkiYfeuzZmvW100pQMlqpL4h49lnJSFD0,940
47
+ iatoolkit/services/history_service.py,sha256=3IxcdpKV1mHBGIiv2KIYV3LsVQJ0GPdFuCOiGYRszMU,1255
48
+ iatoolkit/services/i18n_service.py,sha256=MisTYp1WZe2YUnq4oWWnSqfsneetOV5igUIlyEJBDmI,3933
49
+ iatoolkit/services/jwt_service.py,sha256=W2kQVNQheQSLkNLS7RZ4jd3hmySBPLbHAS5hvBrUI10,3244
50
+ iatoolkit/services/language_service.py,sha256=7G6LVCgvzckszxju04pECCl2VJHJGH5IXOhVtlJGASI,3024
51
+ iatoolkit/services/load_documents_service.py,sha256=ZpB0BZ3qX1fGJGBtZtMLbFdWWx0hkPoeCS3OqJKwCTs,7291
52
+ iatoolkit/services/mail_service.py,sha256=2h-fcF3swZDya_o7IpgXkmuj3iEVHVCiHi7oVxU99sQ,2182
53
+ iatoolkit/services/onboarding_service.py,sha256=cMO2Ho1-G3wAeVNl-j25LwCMJjRwj3yKHpYKnZUFLDE,2001
54
+ iatoolkit/services/profile_service.py,sha256=_7H6dfOKl6UoXpr6mOKnjbSNe8ef6Wwh8Fc2hNJlBuo,21820
55
+ iatoolkit/services/prompt_manager_service.py,sha256=U-XmSpkeXvv1KRN4dytdMxSYBMRSB7y-UHcb18mk0nA,8342
56
+ iatoolkit/services/query_service.py,sha256=gtMEAQ7IRVrFAMq4h_Pc_lHlMlXFI6heLSuBYHenkfs,17502
57
+ iatoolkit/services/search_service.py,sha256=i1xGWu7ORKIIDH0aAQBkF86dVVbLQ0Yrooz5TiZ6aGo,1823
58
+ iatoolkit/services/sql_service.py,sha256=MIslAtpJWnTMgSD74nnqTvQj27p-lHiyRXc6OiA2C_c,2172
59
+ iatoolkit/services/tasks_service.py,sha256=itREO5rDnUIgsqtyCOBKDtH30QL5v1egs4qPTiBK8xU,6865
60
+ iatoolkit/services/user_feedback_service.py,sha256=__65iWHPmBafqaYtVuv8Lg9XBgVshDXvL1JXFw5TxfM,5003
61
+ iatoolkit/services/user_session_context_service.py,sha256=vYF_vWM37tPB_ZyPBJ6f6WTJVjT2j-4L8JfZbqbI93k,6775
62
+ iatoolkit/static/images/fernando.jpeg,sha256=W68TYMuo5hZVpbP-evwH6Nu4xWFv2bc8pJzSKDoLTeQ,100612
63
+ iatoolkit/static/js/chat_feedback_button.js,sha256=Wzb2l3jmpZNwY2KYQQDuBmFKS4oU9WteB9s4U-bEqb4,2429
64
+ iatoolkit/static/js/chat_filepond.js,sha256=mzXafm7a506EpM37KATTK3zvAswO1E0KSUY1vKbwuRc,3163
65
+ iatoolkit/static/js/chat_help_content.js,sha256=N9APsdNoPWWyC1aMLjfq-xFfFYZ5g8ZefUGTkYt75DY,5211
66
+ iatoolkit/static/js/chat_history_button.js,sha256=YxJPNDwgnNCZAk0u3bTOWWZ_iXWimNNQY05LGFgvg-U,3488
67
+ iatoolkit/static/js/chat_logout_button.js,sha256=Of9H6IbAboSBmeqRaurEVW6_dL752L0UeDcDLNBD5Z0,1335
68
+ iatoolkit/static/js/chat_main.js,sha256=qXf8za7CAY5deLUraNsGJo_ljB1ceNkhFZo8IsCEgn0,13255
69
+ iatoolkit/static/js/chat_onboarding_button.js,sha256=vjvEloJ9PA9D7jOGca0QjS3J_7bU97R71L7kSyY3wOI,3153
70
+ iatoolkit/static/js/chat_prompt_manager.js,sha256=QYki28CpyM2Chn82dnOP2eH6FObxH8eChGFyUxukv1M,3319
71
+ iatoolkit/static/js/chat_reload_button.js,sha256=FHMm5sLdn2HuWDq66wphNuRcltjLG-aADp0yTwEbnQw,1256
72
+ iatoolkit/static/styles/chat_iatoolkit.css,sha256=C1qVIpL6hUdhkYIE4D1PeQmr-hv1QptuFqoWLcKkAuY,17006
73
+ iatoolkit/static/styles/chat_modal.css,sha256=ac49DAyViRUJZFcvxB7z8Ufv_ixAEXSKOC8NdtTuiMU,4130
74
+ iatoolkit/static/styles/chat_public.css,sha256=4EHN_VvURQYlooCmNB-UHIhvMsn4GFm7tKtr4VKpCNE,3830
75
+ iatoolkit/static/styles/landing_page.css,sha256=E6VRI5dko_naloH_FmNAHpjzxz4NZbrbzKwYLw4fYJA,4297
76
+ iatoolkit/static/styles/llm_output.css,sha256=AlxgRSOleeCk2dLAqFWVaQ-jwZiJjcpC5rHuUv3T6VU,2312
77
+ iatoolkit/static/styles/onboarding.css,sha256=Bo0hd8ngVy404_a-gtNFi-hzljhIAnpE-1oQJGnj0F0,3655
78
+ iatoolkit/system_prompts/format_styles.prompt,sha256=MSMe1qvR3cF_0IbFshn8R0z6Wx6VCHQq1p37rpu5wwk,3576
79
+ iatoolkit/system_prompts/query_main.prompt,sha256=D2Wjf0uunQIQsQiJVrY-BTQz6PemM5En6ftmw_c5t4E,2808
80
+ iatoolkit/system_prompts/sql_rules.prompt,sha256=y4nURVnb9AyFwt-lrbMNBHHtZlhk6kC9grYoOhRnrJo,59174
81
+ iatoolkit/templates/_company_header.html,sha256=wrwDftsSVu1uMPchsweAPLupsPkmLIPQBQ0xpIIyxjA,747
82
+ iatoolkit/templates/_login_widget.html,sha256=mheHpa_mcGK7UYSYdzxyD_n97MnJXJE19IcFxxUQYTY,1952
83
+ iatoolkit/templates/about.html,sha256=ciC08grUVz5qLzdzDDqDX31xirg5PrJIRYabWpV9oA8,294
84
+ iatoolkit/templates/base.html,sha256=xOox6JJEd6dHBlw6DBrFDJTXtAKCaXZc3Ffrufa-GDk,3042
85
+ iatoolkit/templates/change_password.html,sha256=rvB4R7lO3y__umQRvkcK1FaOYYvvHn4oKCdrUzvIvf8,3483
86
+ iatoolkit/templates/chat.html,sha256=Os_jD8QKh5goHnhJCo79FBzupzX37DnpcsyWc141fCY,13000
87
+ iatoolkit/templates/chat_modals.html,sha256=ojJRZ1a1yt7ByFLIqEyDpUTRuMepJIR6We9HLsLZFdI,8278
88
+ iatoolkit/templates/error.html,sha256=IdswYbZYp5cHZjPdKBOR44OBwL1GRVR--UTpSKYSwTU,1779
89
+ iatoolkit/templates/forgot_password.html,sha256=RPV_fDCzEdSQpA0qM8RNSCsNlhUhgp9sRGUHpMMBQ10,2247
90
+ iatoolkit/templates/index.html,sha256=mOuHePAmQ5PaMwqkJf7HU5oIL_lh8iKBKFng6d-QVzA,8017
91
+ iatoolkit/templates/login_simulation.html,sha256=1svwCBPrJ3Gy6bD9WMuz25NBSdFgZt4j8_sC7HE6MFU,1270
92
+ iatoolkit/templates/onboarding_shell.html,sha256=3Kb7R9AytkztJpxoTCi4zNZRZxxQ3mZsAId44BR5PaU,4611
93
+ iatoolkit/templates/signup.html,sha256=u2wiahk_d_BfooknSCcgcgAaQqIfas2aj6fe0cG3jzE,4174
94
+ iatoolkit/views/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
95
+ iatoolkit/views/base_login_view.py,sha256=wwPcB2LE0FwyE-Any-KPkAJPYtzUw5_9E6q2sxO5Ryo,3700
96
+ iatoolkit/views/change_password_view.py,sha256=JfFcJgqIbsDaMgt9OB70GsWmzR8er6vmLi-fm-gPU1A,4966
97
+ iatoolkit/views/external_login_view.py,sha256=d4gUQbxFsThGbbAUdtFn7AMgPJjeb7_8KFFoH3vspVA,2853
98
+ iatoolkit/views/file_store_api_view.py,sha256=UvtZWOG-rLQMLfs8igOIYoQ-tkkEg5baMjqCJdKxaRQ,2300
99
+ iatoolkit/views/forgot_password_view.py,sha256=k200mbuzL6CZ-P8NfovpBYKAkzK0FNvZawD8kjGUWGA,3184
100
+ iatoolkit/views/help_content_api_view.py,sha256=f6zEQwTczA7X9Hbmstiglz6Oj1sMpXdF87bNY46BXEU,2026
101
+ iatoolkit/views/history_api_view.py,sha256=AFl_EQ3NaY4x_8BZ-jAYMV5DGAIEPgbyjNQnfI7iXt0,1974
102
+ iatoolkit/views/home_view.py,sha256=zKR-8bzOrS2OKy9Ka-j3Tsg3MHDzUurJQQ0LOfVF8P4,2574
103
+ iatoolkit/views/index_view.py,sha256=OsykSlXLB-TpFAPkDlsMna6bi3Ie5PXL303Hsg3WwUM,329
104
+ iatoolkit/views/init_context_api_view.py,sha256=i6fiotS7e7-xXFNH98FLnKqkXWj9pQ-gmgI2Y5bH93A,3000
105
+ iatoolkit/views/llmquery_api_view.py,sha256=MfUqHbX-EX8u3wBl2w7FMCPBZPm-EyH4aBvZdGljhms,2164
106
+ iatoolkit/views/login_simulation_view.py,sha256=0Qt-puRnltI2HZxlfdyJmOf26-hQp3xjknGV_jkwV7E,3484
107
+ iatoolkit/views/login_view.py,sha256=3C356H9UfI8VHcMwg8K8_5F3ZlFqeDD3s4pIaEfPUKw,6412
108
+ iatoolkit/views/logout_api_view.py,sha256=tvk4sCCXOFsk6qfGsrwY-pDKHL4ET30tL7ncTG-PT8A,1733
109
+ iatoolkit/views/profile_api_view.py,sha256=qhlmhyygIs5h-OyNDwq1uGUS8S-GxB2zOYY51Hs5prY,1645
110
+ iatoolkit/views/prompt_api_view.py,sha256=zumYnC_LWq_IeLraoL24YrY87U6a7iC6maY1PN-IP6U,1263
111
+ iatoolkit/views/signup_view.py,sha256=aAY5R4iH2Bi6qzfTNpyHvD-Vx6jC8oSKXlwQNOrQqw4,3980
112
+ iatoolkit/views/tasks_api_view.py,sha256=wGnuwuuL83ByQ1Yre6ytRVztA0OGQjGrwMjB1_G830U,2630
113
+ iatoolkit/views/tasks_review_api_view.py,sha256=wsCpzqyRyUdCXWAhyGlBe3eNZZ6A1DQG7TblN_GZNfM,1894
114
+ iatoolkit/views/user_feedback_api_view.py,sha256=QOTBtpNqYAmewXDgVAoaIprnVjvf1xM0ExWxSFp3ICI,2098
115
+ iatoolkit/views/verify_user_view.py,sha256=zo24b1Z-yAUR09zrAtl-o7-TwsSZQIHVHx2qK3VjEkc,2721
116
+ iatoolkit-0.66.2.dist-info/METADATA,sha256=tARrXrUegiJY4D_mftfIFDeEn2uclyfbp1e-lyeLnA8,9301
117
+ iatoolkit-0.66.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
118
+ iatoolkit-0.66.2.dist-info/top_level.txt,sha256=V_w4QvDx0b1RXiy8zTCrD1Bp7AZkFe3_O0-9fMiwogg,10
119
+ iatoolkit-0.66.2.dist-info/RECORD,,
@@ -1,32 +0,0 @@
1
- Mi app es un chatbot multiempresa, que se conecta
2
- con datos empresariales por sql y llamadas a endpoints.
3
-
4
- Es principalmente un backend, pero tambien puede actuar como frontend.
5
- Cuando actua como backend, los usuarios se identifican como external_user_id
6
- y el front lo informa en la vista external_login_view.
7
-
8
- Cuando actua como front y back,
9
- existe un acceso que simula un usuario externo a través de
10
- public_chat_view.
11
-
12
- El otro mecanismo de acceso es con el sistema de usuarios
13
- integrado a mi app, con tablas propias: user, company, user_company
14
- y el acceso se hace a través de profile_service.
15
-
16
- Estos accesos sirven para autentificar las consultas.
17
- Cada vez que hay un acceso en estos puntos, se llama a query_service
18
- para que construya el contexto de la empresa y se lo envie al
19
- llm.
20
-
21
- Se guarda en session de redis, el response.id generado
22
- para linkearlo con las consultas futuras (responses api de openai).
23
-
24
- Por otra parte, las queries ingresan a través de llm_query_view,
25
- el que autentifica al solicitante y la dirige a query_service.
26
-
27
- Query_service gestiona los prompts que pueden ser solicitados
28
- y llama a invoke en openai_client, quien se encarga
29
- de interactuar con el llm.
30
-
31
- Una vez terminada la interacción, se graba un registro en la
32
- tabla llm_queries.
@@ -1,32 +0,0 @@
1
- iatoolkit/__init__.py,sha256=GkFxAQHKPifz4Kd8M73Rc8TWRVIxjxkl1N0nsPvb_sU,1743
2
- iatoolkit/base_company.py,sha256=FlB-HFYH8FoTl4nbtsYgfKjkdZtizJbKwXqaosxmRqc,2009
3
- iatoolkit/cli_commands.py,sha256=CyaabHA3HdKd-eIqrJD8IQFT7Tqn_BEdi4jb1utisMo,2909
4
- iatoolkit/company_registry.py,sha256=KOUzJHLYgzMAV6BxkTiDPlN_ME4fktp7yRzKLlXZ5-w,2597
5
- iatoolkit/iatoolkit.py,sha256=OwlGujwtNLBYtfZuCpcX_yzrgB8BVo9Jfh72owM8FFc,15651
6
- iatoolkit/system_prompts/arquitectura.prompt,sha256=2W-7NWy6P6y1Gh5_-zD1iK-BWq1Siu8TuvGCouP67bQ,1267
7
- iatoolkit/system_prompts/format_styles.prompt,sha256=MSMe1qvR3cF_0IbFshn8R0z6Wx6VCHQq1p37rpu5wwk,3576
8
- iatoolkit/system_prompts/query_main.prompt,sha256=Eu5VOQzUygJ45Ct1WKYGbi0JMltgI6FQIZWlGmN1bdk,3214
9
- iatoolkit/system_prompts/sql_rules.prompt,sha256=y4nURVnb9AyFwt-lrbMNBHHtZlhk6kC9grYoOhRnrJo,59174
10
- services/__init__.py,sha256=fSvSfIcPW1dHwTBY1hQ5dBEhaoorzk_GzR4G46gD8tY,173
11
- services/api_service.py,sha256=InIKTc64BWcp4U4tYKHz28x4ErPxIfvR9x3ZlxJZlXs,2911
12
- services/benchmark_service.py,sha256=0Vgsx_FaUZL7igoBYbe1AZkIWOiEUx1FSCV_0Ut0mtk,5921
13
- services/dispatcher_service.py,sha256=j3Vm3vgDIgwMn9tF1BBHN3sY-V30XIkbHNcXVR0u-kY,15491
14
- services/document_service.py,sha256=np8wjaFpS8kVgAeVr8JWzGHcdRl1S4vsOX-dxyaLP8E,5961
15
- services/excel_service.py,sha256=wE9Udbyb96kGRSnZZ6KM2mbE484rKjTEhta9GKKpy-8,3630
16
- services/file_processor_service.py,sha256=0CM4CQu6KKfcLVGkxs4hYxgdz8kKRWfkV5rDH9UoccM,4173
17
- services/history_service.py,sha256=6fGSSWxy60nxtkwp_fodwDHoVKhpIUbHnzAzUSiNi-Y,1657
18
- services/jwt_service.py,sha256=dC45Sn6FyzdzRiQJnzgkjN3Hy21V1imRxB0hTyWRvlA,3979
19
- services/load_documents_service.py,sha256=eDqi4Nr2K0BvHS4om07LL_wbFcyfJ4qIQiMULviZWsE,7098
20
- services/mail_service.py,sha256=ystFit1LuYUC4ekYYebyiy1rqYQmxeL6K8h58MxEkOY,2233
21
- services/profile_service.py,sha256=vZV0cregZQiPKYcNLaD7xjez2y6-3Mq97cDndC8NL8w,17922
22
- services/prompt_manager_service.py,sha256=bWG4SIgt0u45PVUfm0xRLbLfKC7bk6uozVHRdkdgCmc,7761
23
- services/query_service.py,sha256=zpaDzjzh2HqAG1F2Ap8WHBpfAMVtzZ_6v1JGVEguwvs,15687
24
- services/search_service.py,sha256=oJD6WRXCJBD7WUVHWWKxexRkhR8nQSrFtcPV3pFO2KQ,1153
25
- services/sql_service.py,sha256=H7CIPpXTcxLXLojD2fBFr_mIAD0PW1vEJhKHLfJi4Hk,1418
26
- services/tasks_service.py,sha256=hHJDlcsSOPtEleD6_Vv3pocfxWNmthIhmZSdnoWFpEM,6861
27
- services/user_feedback_service.py,sha256=YtCndRBekDEWYEbac431Ksn2gMO5iBrI3WqKK0xtShE,2513
28
- services/user_session_context_service.py,sha256=5qn7fqpuiU8KgMpU4M5-iRUsETumz1raBw-EeZLuE1A,3868
29
- iatoolkit-0.4.2.dist-info/METADATA,sha256=F2KitiTXfL4FN4nIp7ebGr36828ZVRO5QFT5Bvxmfg8,9300
30
- iatoolkit-0.4.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
31
- iatoolkit-0.4.2.dist-info/top_level.txt,sha256=dqlBbmgo9okD9d_WMR9uYzdup7Rxgj26yFF85jRGeu4,19
32
- iatoolkit-0.4.2.dist-info/RECORD,,
services/__init__.py DELETED
@@ -1,5 +0,0 @@
1
- # Copyright (c) 2024 Fernando Libedinsky
2
- # Producto: IAToolkit
3
- # Todos los derechos reservados.
4
- # En trámite de registro en el Registro de Propiedad Intelectual de Chile.
5
-
services/api_service.py DELETED
@@ -1,75 +0,0 @@
1
- # Copyright (c) 2024 Fernando Libedinsky
2
- # Producto: IAToolkit
3
- # Todos los derechos reservados.
4
- # En trámite de registro en el Registro de Propiedad Intelectual de Chile.
5
-
6
- from infra.call_service import CallServiceClient
7
- from injector import inject
8
- from common.exceptions import IAToolkitException
9
- import json
10
- from typing import Optional, Dict, Any, Union
11
-
12
- class ApiService:
13
- @inject
14
- def __init__(self, call_service: CallServiceClient):
15
- self.call_service = call_service
16
-
17
- def call_api(
18
- self,
19
- endpoint: str,
20
- method: str,
21
- headers: Optional[Dict[str, str]] = None,
22
- params: Optional[Dict[str, Union[str, int, float, bool]]] = None,
23
- body: Optional[Dict[str, Any]] = None,
24
- files: Optional[Dict[str, Any]] = None,
25
- timeout: Union[int, float, tuple] = 10
26
- ) -> str:
27
- """
28
- Ejecuta una llamada HTTP genérica.
29
-
30
- - endpoint: URL completa
31
- - method: GET | POST | PUT | DELETE (case-insensitive)
32
- - headers: dict opcional de cabeceras
33
- - params: dict opcional de query string
34
- - body: dict opcional para JSON (POST/PUT/DELETE)
35
- - files: dict opcional para multipart/form-data (prioriza POST files)
36
- - timeout: segundos (int/float) o tuple (connect, read)
37
- """
38
- m = (method or "").strip().lower()
39
-
40
- if m == "get":
41
- response, status_code = self.call_service.get(
42
- endpoint, params=params, headers=headers, timeout=timeout
43
- )
44
- elif m == "post":
45
- # Si vienen files → multipart; si no → JSON
46
- if files:
47
- response, status_code = self.call_service.post_files(
48
- endpoint, data=files, params=params, headers=headers, timeout=timeout
49
- )
50
- else:
51
- response, status_code = self.call_service.post(
52
- endpoint=endpoint, json_dict=body, params=params, headers=headers, timeout=timeout
53
- )
54
- elif m == "put":
55
- response, status_code = self.call_service.put(
56
- endpoint, json_dict=body, params=params, headers=headers, timeout=timeout
57
- )
58
- elif m == "delete":
59
- response, status_code = self.call_service.delete(
60
- endpoint, json_dict=body, params=params, headers=headers, timeout=timeout
61
- )
62
- else:
63
- raise IAToolkitException(
64
- IAToolkitException.ErrorType.INVALID_PARAMETER,
65
- f"API error: método '{method}' no soportado"
66
- )
67
-
68
- if status_code < 200 or status_code >= 300:
69
- raise IAToolkitException(
70
- IAToolkitException.ErrorType.CALL_ERROR,
71
- f"API {endpoint} error: {status_code}"
72
- )
73
-
74
- # Normalizamos a string JSON (para que el LLM lo consuma consistente)
75
- return json.dumps(response)
@@ -1,67 +0,0 @@
1
- # Copyright (c) 2024 Fernando Libedinsky
2
- # Producto: IAToolkit
3
- # Todos los derechos reservados.
4
- # En trámite de registro en el Registro de Propiedad Intelectual de Chile.
5
-
6
- from repositories.models import UserFeedback
7
- from injector import inject
8
- from repositories.profile_repo import ProfileRepo
9
- from infra.google_chat_app import GoogleChatApp
10
- import logging
11
-
12
-
13
- class UserFeedbackService:
14
- @inject
15
- def __init__(self, profile_repo: ProfileRepo, google_chat_app: GoogleChatApp):
16
- self.profile_repo = profile_repo
17
- self.google_chat_app = google_chat_app
18
-
19
- def new_feedback(self,
20
- company_short_name: str,
21
- message: str,
22
- external_user_id: str = None,
23
- local_user_id: int = 0,
24
- space: str = None,
25
- type: str = None,
26
- rating: int = None) -> dict:
27
- try:
28
- # validate company
29
- company = self.profile_repo.get_company_by_short_name(company_short_name)
30
- if not company:
31
- return {'error': f'No existe la empresa: {company_short_name}'}
32
-
33
- # send notification to Google Chat
34
- chat_message = f"*Nuevo feedback de {company_short_name}*:\n*Usuario:* {external_user_id or local_user_id}\n*Mensaje:* {message}\n*Calificación:* {rating}"
35
-
36
- # TO DO: get the space and type from the input data
37
- chat_data = {
38
- "type": type,
39
- "space": {
40
- "name": space
41
- },
42
- "message": {
43
- "text": chat_message
44
- }
45
- }
46
-
47
- chat_result = self.google_chat_app.send_message(message_data=chat_data)
48
-
49
- if not chat_result.get('success'):
50
- logging.warning(f"Error al enviar notificación a Google Chat: {chat_result.get('message')}")
51
-
52
- # create the UserFeedback object
53
- new_feedback = UserFeedback(
54
- company_id=company.id,
55
- message=message,
56
- local_user_id=local_user_id,
57
- external_user_id=external_user_id,
58
- rating=rating
59
- )
60
- new_feedback = self.profile_repo.save_feedback(new_feedback)
61
- if not new_feedback:
62
- return {'error': 'No se pudo guardar el feedback'}
63
-
64
- return {'message': 'Feedback guardado correctamente'}
65
-
66
- except Exception as e:
67
- return {'error': str(e)}
@@ -1,85 +0,0 @@
1
- # Copyright (c) 2024 Fernando Libedinsky
2
- # Producto: IAToolkit
3
- # Todos los derechos reservados.
4
- # En trámite de registro en el Registro de Propiedad Intelectual de Chile.
5
-
6
- from infra.redis_session_manager import RedisSessionManager
7
- from typing import List, Dict, Optional
8
- import json
9
-
10
-
11
- class UserSessionContextService:
12
- """
13
- Gestiona el contexto de la sesión del usuario, incluyendo el historial
14
- de conversación con el LLM y datos de la sesión del usuario.
15
-
16
- Usa RedisSessionManager para persistencia directa en Redis.
17
- """
18
-
19
- def _get_llm_history_key(self, company_short_name: str, user_identifier: str) -> str:
20
- user_identifier = (user_identifier or "").strip()
21
- if not user_identifier:
22
- return None
23
- return f"llm_history:{company_short_name}/{user_identifier}"
24
-
25
- def _get_user_data_key(self, company_short_name: str, user_identifier: str) -> str:
26
- user_identifier = (user_identifier or "").strip()
27
- if not user_identifier:
28
- return None
29
- return f"user_data:{company_short_name}/{user_identifier}"
30
-
31
- def clear_all_context(self, company_short_name: str, user_identifier: str):
32
- """Limpia todo el contexto de sesión para un usuario."""
33
- self.clear_llm_history(company_short_name, user_identifier)
34
- self.clear_user_session_data(company_short_name, user_identifier)
35
-
36
- def clear_llm_history(self, company_short_name: str, user_identifier: str):
37
- history_key = self._get_llm_history_key(company_short_name, user_identifier)
38
- if history_key:
39
- RedisSessionManager.remove(history_key)
40
-
41
- def get_last_response_id(self, company_short_name: str, user_identifier: str) -> str:
42
- history_key = self._get_llm_history_key(company_short_name, user_identifier)
43
- if not history_key:
44
- return None
45
-
46
- return RedisSessionManager.get(history_key, '')
47
-
48
- def save_last_response_id(self, company_short_name: str, user_identifier: str, response_id: str):
49
- user_identifier = (user_identifier or "").strip()
50
- history_key = self._get_llm_history_key(company_short_name, user_identifier)
51
- if not history_key or not user_identifier:
52
- return
53
-
54
- RedisSessionManager.set(history_key, response_id)
55
-
56
- def save_context_history(self, company_short_name: str, user_identifier: str, context_history: List[Dict]):
57
- history_key = f"chat_history:{company_short_name}/{user_identifier}"
58
- if not history_key:
59
- return
60
- RedisSessionManager.set(history_key, json.dumps(context_history))
61
-
62
- def get_context_history(self, company_short_name: str, user_identifier: str) -> Optional[List[Dict]]:
63
- history_key = f"chat_history:{company_short_name}/{user_identifier}"
64
- return RedisSessionManager.get_json(history_key, {})
65
-
66
- def save_user_session_data(self, company_short_name: str, user_identifier: str, data: dict):
67
- """Guarda un diccionario de datos en la sesión del usuario."""
68
- user_identifier = (user_identifier or "").strip()
69
- data_key = self._get_user_data_key(company_short_name, user_identifier)
70
- if data_key:
71
- RedisSessionManager.set_json(data_key, data)
72
-
73
- def get_user_session_data(self, company_short_name: str, user_identifier: str) -> dict:
74
- """Recupera el diccionario de datos de la sesión del usuario."""
75
- data_key = self._get_user_data_key(company_short_name, user_identifier)
76
- if not data_key:
77
- return {}
78
-
79
- return RedisSessionManager.get_json(data_key, {})
80
-
81
- def clear_user_session_data(self, company_short_name: str, user_identifier: str):
82
- """Limpia los datos de la sesión del usuario."""
83
- data_key = self._get_user_data_key(company_short_name, user_identifier)
84
- if data_key:
85
- RedisSessionManager.remove(data_key)