iatoolkit 0.22.1__py3-none-any.whl → 0.50.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.

Potentially problematic release.


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

Files changed (46) hide show
  1. iatoolkit/common/routes.py +31 -31
  2. iatoolkit/common/session_manager.py +0 -1
  3. iatoolkit/common/util.py +0 -21
  4. iatoolkit/iatoolkit.py +5 -18
  5. iatoolkit/infra/llm_client.py +3 -5
  6. iatoolkit/infra/redis_session_manager.py +48 -2
  7. iatoolkit/repositories/models.py +1 -2
  8. iatoolkit/services/auth_service.py +74 -0
  9. iatoolkit/services/dispatcher_service.py +12 -21
  10. iatoolkit/services/excel_service.py +15 -15
  11. iatoolkit/services/history_service.py +2 -11
  12. iatoolkit/services/profile_service.py +83 -25
  13. iatoolkit/services/query_service.py +132 -82
  14. iatoolkit/services/tasks_service.py +1 -1
  15. iatoolkit/services/user_feedback_service.py +3 -6
  16. iatoolkit/services/user_session_context_service.py +112 -54
  17. iatoolkit/static/js/chat_feedback.js +1 -1
  18. iatoolkit/static/js/chat_history.js +1 -5
  19. iatoolkit/static/js/chat_main.js +1 -1
  20. iatoolkit/static/styles/landing_page.css +62 -2
  21. iatoolkit/system_prompts/query_main.prompt +3 -12
  22. iatoolkit/templates/_login_widget.html +6 -8
  23. iatoolkit/templates/chat.html +78 -4
  24. iatoolkit/templates/error.html +1 -1
  25. iatoolkit/templates/index.html +38 -11
  26. iatoolkit/templates/{home.html → login_test.html} +11 -51
  27. iatoolkit/views/external_login_view.py +50 -111
  28. iatoolkit/views/{file_store_view.py → file_store_api_view.py} +4 -4
  29. iatoolkit/views/history_api_view.py +52 -0
  30. iatoolkit/views/init_context_api_view.py +62 -0
  31. iatoolkit/views/llmquery_api_view.py +50 -0
  32. iatoolkit/views/llmquery_web_view.py +38 -0
  33. iatoolkit/views/{home_view.py → login_test_view.py} +2 -5
  34. iatoolkit/views/login_view.py +79 -56
  35. iatoolkit/views/{prompt_view.py → prompt_api_view.py} +4 -4
  36. iatoolkit/views/{user_feedback_view.py → user_feedback_api_view.py} +16 -19
  37. {iatoolkit-0.22.1.dist-info → iatoolkit-0.50.2.dist-info}/METADATA +2 -2
  38. {iatoolkit-0.22.1.dist-info → iatoolkit-0.50.2.dist-info}/RECORD +40 -41
  39. iatoolkit/common/auth.py +0 -200
  40. iatoolkit/templates/login.html +0 -43
  41. iatoolkit/views/download_file_view.py +0 -58
  42. iatoolkit/views/history_view.py +0 -57
  43. iatoolkit/views/init_context_view.py +0 -35
  44. iatoolkit/views/llmquery_view.py +0 -65
  45. {iatoolkit-0.22.1.dist-info → iatoolkit-0.50.2.dist-info}/WHEEL +0 -0
  46. {iatoolkit-0.22.1.dist-info → iatoolkit-0.50.2.dist-info}/top_level.txt +0 -0
@@ -10,73 +10,102 @@ from iatoolkit.services.profile_service import ProfileService
10
10
  from iatoolkit.services.prompt_manager_service import PromptService
11
11
  from iatoolkit.services.query_service import QueryService
12
12
  import os
13
- from iatoolkit.common.session_manager import SessionManager
14
13
  from iatoolkit.services.branding_service import BrandingService
15
14
  from iatoolkit.services.onboarding_service import OnboardingService
16
15
 
16
+
17
17
  class InitiateLoginView(MethodView):
18
18
  """
19
- Handles the initial, fast part of the standard login process.
20
- Authenticates user credentials, sets up the server-side session,
21
- and immediately returns the loading shell page.
19
+ Handles the initial part of the login process.
20
+ Authenticates, decides the login path (fast or slow), and renders
21
+ either the chat page directly or the loading shell.
22
22
  """
23
+
23
24
  @inject
24
25
  def __init__(self,
25
26
  profile_service: ProfileService,
26
27
  branding_service: BrandingService,
27
- onboarding_service: OnboardingService):
28
+ onboarding_service: OnboardingService,
29
+ query_service: QueryService,
30
+ prompt_service: PromptService):
28
31
  self.profile_service = profile_service
29
32
  self.branding_service = branding_service
30
33
  self.onboarding_service = onboarding_service
34
+ self.query_service = query_service
35
+ self.prompt_service = prompt_service
31
36
 
32
37
  def post(self, company_short_name: str):
33
- # get company info
34
38
  company = self.profile_service.get_company_by_short_name(company_short_name)
35
39
  if not company:
36
- return render_template('error.html',
37
- message="Empresa no encontrada"), 404
40
+ return render_template('error.html', message="Empresa no encontrada"), 404
38
41
 
39
42
  email = request.form.get('email')
40
43
  password = request.form.get('password')
41
44
 
42
- # 1. authenticate the user
43
- response = self.profile_service.login(
45
+ # 1. Authenticate user and create the unified session.
46
+ auth_response = self.profile_service.login(
44
47
  company_short_name=company_short_name,
45
48
  email=email,
46
49
  password=password
47
50
  )
48
51
 
49
- if not response['success']:
52
+ if not auth_response['success']:
50
53
  return render_template(
51
- 'login.html',
54
+ 'index.html',
52
55
  company_short_name=company_short_name,
53
56
  company=company,
54
- form_data={
55
- "email": email,
56
- "password": password,
57
- },
58
- alert_message=response["message"]), 400
59
-
60
- # 2. Get branding and onboarding data for the shell page
61
- branding_data = self.branding_service.get_company_branding(company)
62
- onboarding_cards = self.onboarding_service.get_onboarding_cards(company)
63
-
64
- target_url = url_for('login',
65
- company_short_name=company_short_name,
66
- _external=True)
67
-
68
- # 3. Render the shell page, passing the URL for the heavy lifting
69
- # The shell's AJAX call will now be authenticated via the session cookie.
70
- return render_template(
71
- "onboarding_shell.html",
72
- iframe_src_url=target_url,
73
- external_user_id='',
74
- branding=branding_data,
75
- onboarding_cards=onboarding_cards
57
+ form_data={"email": email},
58
+ alert_message=auth_response["message"]
59
+ ), 400
60
+
61
+ user_identifier = auth_response['user_identifier']
62
+
63
+ # 2. PREPARE and DECIDE: Call prepare_context to determine the path.
64
+ prep_result = self.query_service.prepare_context(
65
+ company_short_name=company_short_name, user_identifier=user_identifier
76
66
  )
77
67
 
68
+ if prep_result.get('rebuild_needed'):
69
+ # --- SLOW PATH: Context rebuild is needed ---
70
+ # Render the shell, which will call LoginView for the heavy lifting.
71
+ branding_data = self.branding_service.get_company_branding(company)
72
+ onboarding_cards = self.onboarding_service.get_onboarding_cards(company)
73
+ target_url = url_for('login', company_short_name=company_short_name, _external=True)
74
+
75
+ return render_template(
76
+ "onboarding_shell.html",
77
+ iframe_src_url=target_url,
78
+ branding=branding_data,
79
+ onboarding_cards=onboarding_cards
80
+ )
81
+ else:
82
+ # --- FAST PATH: Context is already cached ---
83
+ # Render chat.html directly.
84
+ try:
85
+ session_info = self.profile_service.get_current_session_info()
86
+ user_profile = session_info.get('profile', {})
87
+
88
+ prompts = self.prompt_service.get_user_prompts(company_short_name)
89
+ branding_data = self.branding_service.get_company_branding(company)
90
+
91
+ return render_template("chat.html",
92
+ user_is_local=user_profile.get('user_is_local'),
93
+ user_email=user_profile.get('user_email'),
94
+ branding=branding_data,
95
+ prompts=prompts,
96
+ iatoolkit_base_url=os.getenv('IATOOLKIT_BASE_URL'),
97
+ ), 200
98
+ except Exception as e:
99
+ return render_template("error.html", company=company, company_short_name=company_short_name,
100
+ message=f"Error in fast path: {str(e)}"), 500
101
+
78
102
 
79
103
  class LoginView(MethodView):
104
+ """
105
+ Handles the heavy-lifting part of the login, ONLY triggered by the iframe
106
+ in the slow path (when context rebuild is needed).
107
+ """
108
+
80
109
  @inject
81
110
  def __init__(self,
82
111
  profile_service: ProfileService,
@@ -89,41 +118,35 @@ class LoginView(MethodView):
89
118
  self.branding_service = branding_service
90
119
 
91
120
  def get(self, company_short_name: str):
92
- """
93
- Handles the heavy-lifting part of the login, triggered by the iframe.
94
- The user is already authenticated via the session cookie.
95
- """
96
- # 1. Retrieve user and company info from the session.
97
- user_id = SessionManager.get('user_id')
98
- if not user_id:
121
+ # 1. Use the new centralized method to get session info.
122
+ session_info = self.profile_service.get_current_session_info()
123
+ user_identifier = session_info.get('user_identifier')
124
+ user_profile = session_info.get('profile', {})
125
+
126
+ if not user_identifier:
99
127
  # This can happen if the session expires or is invalid.
100
- # Redirecting to home is a safe fallback.
101
- return redirect(url_for('home', company_short_name=company_short_name))
128
+ return redirect(url_for('login_page', company_short_name=company_short_name))
102
129
 
103
- user_email = SessionManager.get('user')['email']
104
130
  company = self.profile_service.get_company_by_short_name(company_short_name)
105
131
  if not company:
106
132
  return render_template('error.html', message="Empresa no encontrada"), 404
107
133
 
108
134
  try:
109
- # 2. Init the company/user LLM context (the long-running task).
110
- self.query_service.llm_init_context(
135
+ # 2. Finalize the context rebuild (the potentially long-running task).
136
+ # We pass the identifier, and the service resolves if it's local or external.
137
+ self.query_service.finalize_context_rebuild(
111
138
  company_short_name=company_short_name,
112
- local_user_id=user_id
139
+ user_identifier=user_identifier
113
140
  )
114
141
 
115
- # 3. Get the prompt list from backend.
142
+ # 3. Get the necessary data for the chat page.
116
143
  prompts = self.prompt_service.get_user_prompts(company_short_name)
117
-
118
- # 4. Get the branding data.
119
144
  branding_data = self.branding_service.get_company_branding(company)
120
145
 
121
- # 5. Render the final chat page.
146
+ # 4. Render the final chat page.
122
147
  return render_template("chat.html",
123
- company_short_name=company_short_name,
124
- auth_method="Session",
125
- session_jwt=None, # No JWT in this flow
126
- user_email=user_email,
148
+ user_is_local=user_profile.get('user_is_local'),
149
+ user_email=user_profile.get('user_email'),
127
150
  branding=branding_data,
128
151
  prompts=prompts,
129
152
  iatoolkit_base_url=os.getenv('IATOOLKIT_BASE_URL'),
@@ -133,4 +156,4 @@ class LoginView(MethodView):
133
156
  return render_template("error.html",
134
157
  company=company,
135
158
  company_short_name=company_short_name,
136
- message="Ha ocurrido un error inesperado."), 500
159
+ message=f"An unexpected error occurred during context loading: {str(e)}"), 500
@@ -6,22 +6,22 @@
6
6
  from flask import jsonify
7
7
  from flask.views import MethodView
8
8
  from iatoolkit.services.prompt_manager_service import PromptService
9
- from iatoolkit.common.auth import IAuthentication
9
+ from iatoolkit.services.auth_service import AuthService
10
10
  from injector import inject
11
11
  import logging
12
12
 
13
13
 
14
- class PromptView(MethodView):
14
+ class PromptApiView(MethodView):
15
15
  @inject
16
16
  def __init__(self,
17
- iauthentication: IAuthentication,
17
+ iauthentication: AuthService,
18
18
  prompt_service: PromptService ):
19
19
  self.iauthentication = iauthentication
20
20
  self.prompt_service = prompt_service
21
21
 
22
22
  def get(self, company_short_name):
23
23
  # get access credentials
24
- iaut = self.iauthentication.verify(company_short_name)
24
+ iaut = self.iauthentication.verify()
25
25
  if not iaut.get("success"):
26
26
  return jsonify(iaut), 401
27
27
 
@@ -3,32 +3,36 @@
3
3
  #
4
4
  # IAToolkit is open source software.
5
5
 
6
- from flask import request, jsonify, render_template
6
+ from flask import request, jsonify
7
7
  from flask.views import MethodView
8
8
  from iatoolkit.services.user_feedback_service import UserFeedbackService
9
- from iatoolkit.common.auth import IAuthentication
9
+ from iatoolkit.services.auth_service import AuthService
10
10
  from injector import inject
11
11
  import logging
12
12
 
13
13
 
14
- class UserFeedbackView(MethodView):
14
+ class UserFeedbackApiView(MethodView):
15
15
  @inject
16
16
  def __init__(self,
17
- iauthentication: IAuthentication,
17
+ iauthentication: AuthService,
18
18
  user_feedback_service: UserFeedbackService ):
19
19
  self.iauthentication = iauthentication
20
20
  self.user_feedback_service = user_feedback_service
21
21
 
22
22
  def post(self, company_short_name):
23
- data = request.get_json()
24
- if not data:
25
- return jsonify({"error_message": "Cuerpo de la solicitud JSON inválido o faltante"}), 400
26
-
27
23
  # get access credentials
28
- iaut = self.iauthentication.verify(company_short_name, data.get("external_user_id"))
24
+ iaut = self.iauthentication.verify()
29
25
  if not iaut.get("success"):
30
26
  return jsonify(iaut), 401
31
27
 
28
+ user_identifier = iaut.get('user_identifier')
29
+ if not user_identifier:
30
+ return jsonify({"error": "Could not identify user from session or payload"}), 400
31
+
32
+ data = request.get_json()
33
+ if not data:
34
+ return jsonify({"error_message": "Cuerpo de la solicitud JSON inválido o faltante"}), 402
35
+
32
36
  message = data.get("message")
33
37
  if not message:
34
38
  return jsonify({"error_message": "Falta el mensaje de feedback"}), 400
@@ -45,15 +49,11 @@ class UserFeedbackView(MethodView):
45
49
  if not rating:
46
50
  return jsonify({"error_message": "Falta la calificación"}), 400
47
51
 
48
- external_user_id = data.get("external_user_id")
49
- local_user_id = data.get("local_user_id", 0)
50
-
51
52
  try:
52
53
  response = self.user_feedback_service.new_feedback(
53
54
  company_short_name=company_short_name,
54
55
  message=message,
55
- external_user_id=external_user_id,
56
- local_user_id=local_user_id,
56
+ user_identifier=user_identifier,
57
57
  space=space,
58
58
  type=type,
59
59
  rating=rating
@@ -66,9 +66,6 @@ class UserFeedbackView(MethodView):
66
66
  except Exception as e:
67
67
  logging.exception(
68
68
  f"Error inesperado al procesar feedback para company {company_short_name}: {e}")
69
- if local_user_id:
70
- return render_template("error.html",
71
- message="Ha ocurrido un error inesperado."), 500
72
- else:
73
- return jsonify({"error_message": str(e)}), 500
69
+
70
+ return jsonify({"error_message": str(e)}), 500
74
71
 
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 0.22.1
3
+ Version: 0.50.2
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
7
- Requires-Python: >=3.11
7
+ Requires-Python: >=3.12
8
8
  Description-Content-Type: text/markdown
9
9
  Requires-Dist: aiohappyeyeballs==2.4.4
10
10
  Requires-Dist: aiohttp==3.11.9
@@ -2,23 +2,22 @@ iatoolkit/__init__.py,sha256=4PWjMJjktixtrxF6BY405qyA50Sv967kEP2x-oil6qk,1120
2
2
  iatoolkit/base_company.py,sha256=uFJmy77LPAceVqkTeuJqo15-auDiq4aTwvC_bbBD0mQ,4607
3
3
  iatoolkit/cli_commands.py,sha256=G5L9xQXZ0lVFXQWBaE_KEZHyfuiT6PL1nTQRoSdnBzc,2302
4
4
  iatoolkit/company_registry.py,sha256=tduqt3oV8iDX_IB1eA7KIgvIxE4edTcy-3qZIXh3Lzw,2549
5
- iatoolkit/iatoolkit.py,sha256=ByINe4luvUU0C5ERGt6M8keymVgMwJSNR9_eb_34L5s,17354
5
+ iatoolkit/iatoolkit.py,sha256=I6IsmzFAUDwTY1fGqozQqjTzPQK1OazE3kxqoddI5PU,16946
6
6
  iatoolkit/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- iatoolkit/common/auth.py,sha256=83WsyHF7TdjPYfAA-da-waizlWLIqSTx-2z4pI4LAnw,8471
8
7
  iatoolkit/common/exceptions.py,sha256=EXx40n5htp7UiOM6P1xfJ9U6NMcADqm62dlFaKz7ICU,1154
9
- iatoolkit/common/routes.py,sha256=st_IC0pSddbkmQb-zb5sSk7n2_WVLGZgKCg645ADzcM,6097
10
- iatoolkit/common/session_manager.py,sha256=7D_RuJs60w-1zDr3fOGEz9JW7IZlSXuUHgUT87CzaUo,472
11
- iatoolkit/common/util.py,sha256=08js3KLJTXICOd5sgwDp2u_kDaZO_0xG4BIuzWZnLo8,15535
8
+ iatoolkit/common/routes.py,sha256=VrBMUP0HIEuxrYgtAHfup6a3hXrpoUU85JYqOx2aW4g,6022
9
+ iatoolkit/common/session_manager.py,sha256=UeKfD15bcEA3P5e0WSURfotLqpsiIMp3AXxAMhtgHs0,471
10
+ iatoolkit/common/util.py,sha256=w9dTd3csK0gKtFSp-a4t7XmCPZiYDhiON92uXRbTT8A,14624
12
11
  iatoolkit/infra/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
13
12
  iatoolkit/infra/call_service.py,sha256=iRk9VxbXaAwlLIl8fUzGDWIAdzwfsbs1MtP84YeENxg,4929
14
13
  iatoolkit/infra/gemini_adapter.py,sha256=kXV-t5i9GmWBafUPX2kAyiqvcT7GPoxHylcCUWG_c_U,15051
15
14
  iatoolkit/infra/google_chat_app.py,sha256=_uKWxeacHH6C5a4FVx0YZjBn1tL-x_MIQV9gqgWGAjo,1937
16
- iatoolkit/infra/llm_client.py,sha256=6kSbhgWjH9ENxCzVSpMRg_6uPTHvCuGB0cwSGFDtrZ4,18633
15
+ iatoolkit/infra/llm_client.py,sha256=Twn_e-H8Q305PqMtqSAafR1w9So6M_YUx5jAhWZUBJ4,18562
17
16
  iatoolkit/infra/llm_proxy.py,sha256=cHyNxUpVE4UDoWUfvSGfGCrIUFPTrpWZOixELQTsGFY,5744
18
17
  iatoolkit/infra/llm_response.py,sha256=YUUQPBHzmP3Ce6-t0kKMRIpowvh7de1odSoefEByIvI,904
19
18
  iatoolkit/infra/mail_app.py,sha256=PLGZdEs7LQ_9bmMRRxz0iqQdNa4xToAFyf9tg75wK8U,6103
20
19
  iatoolkit/infra/openai_adapter.py,sha256=Z1JSi3Tw2mXQ7JAh6yR79Ri_9yZJcJpcZLOLL3Mfda8,3530
21
- iatoolkit/infra/redis_session_manager.py,sha256=Dkwii8fns0_Vd9hm9GmotmrKtSCxVps868U5sqj7FAE,2278
20
+ iatoolkit/infra/redis_session_manager.py,sha256=EPr3E_g7LHxn6U4SV5lT_L8WQsAwg8VzA_WIEZ3TwOw,3667
22
21
  iatoolkit/infra/connectors/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
23
22
  iatoolkit/infra/connectors/file_connector.py,sha256=HOjRTFd-WfDOcFyvHncAhnGNZuFgChIwC-P6osPo9ZM,352
24
23
  iatoolkit/infra/connectors/file_connector_factory.py,sha256=3qvyfH4ZHKuiMxJFkawOxhW2-TGKKtsBYHgoPpZMuKU,2118
@@ -30,30 +29,31 @@ iatoolkit/repositories/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCL
30
29
  iatoolkit/repositories/database_manager.py,sha256=UaU7k3s7IRuXhCHTy9GoCeP9K1ad0LBdj_n1a_QjGS0,3108
31
30
  iatoolkit/repositories/document_repo.py,sha256=Y7bF1kZB1HWJsAGjWdF7P2aVYeTYNufq9ngQXp7mDkY,1124
32
31
  iatoolkit/repositories/llm_query_repo.py,sha256=YT_t7cYGQk8rwzH_17-28aTzO-e2jUfa2rvXy8tugvA,3612
33
- iatoolkit/repositories/models.py,sha256=DVmFYncVF-JKiE7SZjN8SmsDOsEx1ADlF1PpVnnfASM,13209
32
+ iatoolkit/repositories/models.py,sha256=3YbIJXNMZiTkMbPyiSOiyzqUKEQF0JIfN4VSWYzwr44,13146
34
33
  iatoolkit/repositories/profile_repo.py,sha256=vwDuVec9IDUCSyM7ecf790oqdpV36cpM2bgqP8POkHQ,4128
35
34
  iatoolkit/repositories/tasks_repo.py,sha256=icVO_r2oPagGnnBhwVFzznnvEEU2EAx-2dlWuWvoDC4,1745
36
35
  iatoolkit/repositories/vs_repo.py,sha256=UkpmQQiocgM5IwRBmmWhw3HHzHP6zK1nN3J3TcQgjhc,5300
37
36
  iatoolkit/services/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
37
+ iatoolkit/services/auth_service.py,sha256=9vK09ozxdjcSwM8H8HVdsSb3JXx00GnFs4o7tyfOXLs,2762
38
38
  iatoolkit/services/benchmark_service.py,sha256=CdbFYyS3FHFhNzWQEa9ZNjUlmON10DT1nKNbZQ1EUi8,5880
39
39
  iatoolkit/services/branding_service.py,sha256=gXj9Lj6EIFNIHT6wAHia5lr4_2a2sD-ExMbewno5YD8,7505
40
- iatoolkit/services/dispatcher_service.py,sha256=ygdaaTbt2mEIzWwPcJ-PbgzW6W16BbguR5U4Ne4oqjM,14087
40
+ iatoolkit/services/dispatcher_service.py,sha256=7tltTH-r-Bg2J2xs597Vyhzflw736dOpPG_soPZFokI,13570
41
41
  iatoolkit/services/document_service.py,sha256=nMXrNtbHQuc9pSaten0LvKY0kT8_WngBDmZJUP3jNPw,5936
42
- iatoolkit/services/excel_service.py,sha256=CJGhu7cQl9J6y_ZWSJ-M63Xm-RXR9Zs66oOR2NJErZQ,3868
42
+ iatoolkit/services/excel_service.py,sha256=JdAcg7_vPz3J16cf2chC6j7WYVpiT55tDX9667tfMUc,3764
43
43
  iatoolkit/services/file_processor_service.py,sha256=B1sUUhZNFf-rT4_1wrD38GKNoBFMp2g0dYrXYMCWe2E,4122
44
- iatoolkit/services/history_service.py,sha256=ZlYfaSHOcCxxc6ICTnqflaGBlzctpJdNUwXpUPG5xWI,1630
44
+ iatoolkit/services/history_service.py,sha256=3IxcdpKV1mHBGIiv2KIYV3LsVQJ0GPdFuCOiGYRszMU,1255
45
45
  iatoolkit/services/jwt_service.py,sha256=YoZ9h7_o9xBko-arNQv4MbcwnxoSWVNj4VbZmMo_QGY,3908
46
46
  iatoolkit/services/load_documents_service.py,sha256=ZpB0BZ3qX1fGJGBtZtMLbFdWWx0hkPoeCS3OqJKwCTs,7291
47
47
  iatoolkit/services/mail_service.py,sha256=2h-fcF3swZDya_o7IpgXkmuj3iEVHVCiHi7oVxU99sQ,2182
48
48
  iatoolkit/services/onboarding_service.py,sha256=cMO2Ho1-G3wAeVNl-j25LwCMJjRwj3yKHpYKnZUFLDE,2001
49
- iatoolkit/services/profile_service.py,sha256=Mxt_Hdz-SyYDuwWVu10hZnb00dKaOeONX8zp1TzpQt4,17387
49
+ iatoolkit/services/profile_service.py,sha256=Y1EbTDNFDWrUQ4QqiaM2OfluZqiJfL9hhbeqJ7nsbtw,20235
50
50
  iatoolkit/services/prompt_manager_service.py,sha256=U-XmSpkeXvv1KRN4dytdMxSYBMRSB7y-UHcb18mk0nA,8342
51
- iatoolkit/services/query_service.py,sha256=CI_LUBdqolvsuh7TjY23oaQcc8s6rmmr4LqnjE81ZJc,15394
51
+ iatoolkit/services/query_service.py,sha256=sEmdBDLTpdZbNu43KAUO6vXqqWBBxTWKWlQm4oFGtSk,17796
52
52
  iatoolkit/services/search_service.py,sha256=i1xGWu7ORKIIDH0aAQBkF86dVVbLQ0Yrooz5TiZ6aGo,1823
53
53
  iatoolkit/services/sql_service.py,sha256=MIslAtpJWnTMgSD74nnqTvQj27p-lHiyRXc6OiA2C_c,2172
54
- iatoolkit/services/tasks_service.py,sha256=g0rBku8JSRuludFKJFNfKARJoKdX9JXISKNVe7wtH5A,6850
55
- iatoolkit/services/user_feedback_service.py,sha256=KW3VMgsH_ZNlBZIHr8eF49oO7jr75lPpr_1wWTEQYsc,2472
56
- iatoolkit/services/user_session_context_service.py,sha256=j8mKgmSyma6k_1FyXOXwpnYi9CrdEBCpPJA1eLHYZsg,3807
54
+ iatoolkit/services/tasks_service.py,sha256=itREO5rDnUIgsqtyCOBKDtH30QL5v1egs4qPTiBK8xU,6865
55
+ iatoolkit/services/user_feedback_service.py,sha256=ooy750qWmYOeJi-IJQofu8pLG4svGjGU_JKpKMURZkw,2353
56
+ iatoolkit/services/user_session_context_service.py,sha256=TeYi4xF04Xk-4Qnp6cVTmxuNzA4B1nMVUuFDjTHeiZQ,6764
57
57
  iatoolkit/static/images/arrow_up.png,sha256=vPcWMebWVOOt13x5U7pzsyukysoiXO0siSyErUMleHw,2781
58
58
  iatoolkit/static/images/diagrama_iatoolkit.jpg,sha256=GhauwUVqWjt9dWtsW53Uon_mo61j73brmC4ogQc6tkY,93527
59
59
  iatoolkit/static/images/logo_clinica.png,sha256=vLX6X7O9RPUHYTQHvO_Fx28sI4JulpRZsRpkuJ9XIu0,56806
@@ -63,55 +63,54 @@ iatoolkit/static/images/logo_notaria.png,sha256=FLDK1mHydFpzudKLKQSqHdSqq6vbqs77
63
63
  iatoolkit/static/images/logo_tarjeta.png,sha256=HQe2lp_jHFWq5hnx3SCBEcqW5IFfvSCktv9oyN--5cQ,1700
64
64
  iatoolkit/static/images/logo_umayor.png,sha256=FHr1wvI8uDn1YRbRcLSRLBOc0mYusHx9Um6ZzVZUbOQ,19199
65
65
  iatoolkit/static/images/upload.png,sha256=zh5FiINURpaWZQF86bF_gALBX4W1c4aLp5wPQO9xGXI,296
66
- iatoolkit/static/js/chat_feedback.js,sha256=_izl49hFEUZYREcJoaPukpTs0YjDgJYUu-QfPt5Ll2s,4398
66
+ iatoolkit/static/js/chat_feedback.js,sha256=DDT2NPgglrLnW75vtEAVXS72MNt7vlMcavzr94q80qQ,4398
67
67
  iatoolkit/static/js/chat_filepond.js,sha256=mzXafm7a506EpM37KATTK3zvAswO1E0KSUY1vKbwuRc,3163
68
- iatoolkit/static/js/chat_history.js,sha256=1iLTsfC_SfcdhSYIzVvfPGmrVnzb0HMpPQyZXFnUbbY,4478
69
- iatoolkit/static/js/chat_main.js,sha256=lpTM_E2HBJMdh1d43nT6niecCDrLbACKkPLcQbBIRyU,17314
68
+ iatoolkit/static/js/chat_history.js,sha256=4hYNODIwYNd5vaQqkR28HZyXYIFKgSayrnmOuT_DUac,4381
69
+ iatoolkit/static/js/chat_main.js,sha256=j3rbJjWWCEAM1XUXPv6K2SW4S3kBrPAwEzVtLTjHslI,17314
70
70
  iatoolkit/static/styles/chat_iatoolkit.css,sha256=WgzKKyFRuQU8SozX1sWSN7b66SxVoKIHDwpK6V-xL6g,11417
71
71
  iatoolkit/static/styles/chat_info.css,sha256=17DbgoNYE21VYWfb5L9-QLCpD2R1idK4imKRLwXtJLY,1058
72
72
  iatoolkit/static/styles/chat_modal.css,sha256=mdfjrJtmUn3O9rKwIGjJc-oSNmJGnzUY1aAJqEfPh38,4301
73
- iatoolkit/static/styles/landing_page.css,sha256=O0LJv4MQbYDbiAG2O0UHGfk6vBU3QBsq-VRorAUuaSU,3802
73
+ iatoolkit/static/styles/landing_page.css,sha256=5MHlXkmgZVv9uHE7rZTGYzZeynya3ONY4hp7e2uPXwk,4898
74
74
  iatoolkit/static/styles/llm_output.css,sha256=AlxgRSOleeCk2dLAqFWVaQ-jwZiJjcpC5rHuUv3T6VU,2312
75
75
  iatoolkit/system_prompts/format_styles.prompt,sha256=MSMe1qvR3cF_0IbFshn8R0z6Wx6VCHQq1p37rpu5wwk,3576
76
- iatoolkit/system_prompts/query_main.prompt,sha256=w_9ybgWgiQH4V_RbAXqsvz0M7oOuiyhxcwf-D0CgfA4,3017
76
+ iatoolkit/system_prompts/query_main.prompt,sha256=D2Wjf0uunQIQsQiJVrY-BTQz6PemM5En6ftmw_c5t4E,2808
77
77
  iatoolkit/system_prompts/sql_rules.prompt,sha256=y4nURVnb9AyFwt-lrbMNBHHtZlhk6kC9grYoOhRnrJo,59174
78
78
  iatoolkit/templates/_branding_styles.html,sha256=x0GJmY1WWpPxKBUoqmxh685_1c6-4uLJWNPU6r81uAc,1912
79
- iatoolkit/templates/_login_widget.html,sha256=3SyzFgqCjkfBD1zepFuhfdUOSTuCHem6fS3BdgqN4Nw,1998
79
+ iatoolkit/templates/_login_widget.html,sha256=c-IKNLITu6-tAM_9hj9NnXh2J8WS6Zy4XaVTvKvnzKg,1851
80
80
  iatoolkit/templates/_navbar.html,sha256=o1PvZE5ueLmVpGUAmsjtu-vS_WPROTlJc2sTXl6AS4Y,360
81
81
  iatoolkit/templates/about.html,sha256=ciC08grUVz5qLzdzDDqDX31xirg5PrJIRYabWpV9oA8,294
82
82
  iatoolkit/templates/base.html,sha256=Bd_dBk_wiAhX0DPQHJAdPtCBBq2xK1J1Z2b9p3Wn0e8,2214
83
83
  iatoolkit/templates/change_password.html,sha256=G5a3hYLTpz_5Q_eZ4LNcYSqLeW-CuT4NCHD8bkhAd9k,3573
84
- iatoolkit/templates/chat.html,sha256=UeVY2K2DIgK5N5MR-8HcAK97reMdSYE-wL2Xrg3JgUA,9485
84
+ iatoolkit/templates/chat.html,sha256=mT73hW42QtN2uGciGuwdQQhVi8iQgkQoUWK4cvWZ9Xw,12315
85
85
  iatoolkit/templates/chat_modals.html,sha256=ngKk0L8qnWteBDLAqCKv8-55LWNH3-HwVyk2of6ylWo,5510
86
- iatoolkit/templates/error.html,sha256=BNF-7z8AYL5vF4ZMUFMrOBt8c85kCFrm9qSHn9EiHWg,540
86
+ iatoolkit/templates/error.html,sha256=c3dxieMygsvdjQMiQu_sn6kqqag9zFtVu-z5FunX6so,580
87
87
  iatoolkit/templates/forgot_password.html,sha256=NRZqbNHJXSLNArF_KLbzuem-U57v07awS0ikI_DJbfM,2360
88
88
  iatoolkit/templates/header.html,sha256=179agI7rnYwP_rvJNXIiVde5E8Ec5649_XKq6eew2Hk,1263
89
- iatoolkit/templates/home.html,sha256=76DwD8joOLphNyV13JgBQgGhVH1Nx-q5-pBPhrAxZHw,7922
90
- iatoolkit/templates/index.html,sha256=TRSV9HN7lqbvnWYSk7hwXOZ2evrDg23Kq5FUqIQnWNc,6390
91
- iatoolkit/templates/login.html,sha256=r4hy7MsQkfDqi6pBRNkkRiFr3GPSoHCT89R5lQLUWZc,1991
89
+ iatoolkit/templates/index.html,sha256=jBLCqZoIMmUCA1KQESW9BcEgaxE0Rjs-4-i2V0ueSMo,7654
90
+ iatoolkit/templates/login_test.html,sha256=b71G5zyKnjDKAZ4DyCpM0diUC38-0WMategv-SKeKfY,5979
92
91
  iatoolkit/templates/onboarding_shell.html,sha256=at7VXh9vQmDiWu2mJbc6NkzEVlu8I8Xgn6_31JltrW0,7477
93
92
  iatoolkit/templates/signup.html,sha256=9ArDvcNQgHFR2dwxy-37AXzGUOeOsT7Nz5u0y6fAB3U,4385
94
93
  iatoolkit/templates/test.html,sha256=rwNtxC83tbCl5COZFXYvmRBxxmgFJtPNuVBd_nq9KWY,133
95
94
  iatoolkit/views/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
96
95
  iatoolkit/views/change_password_view.py,sha256=tM0woZyKdhY4XYjS_YXg2sKq3RYkXGfcq_eVAKrNvNM,4498
97
96
  iatoolkit/views/chat_token_request_view.py,sha256=wf32_A2Sq8NHYWshCwL10Tovd1znLoD0jQjzutR3sVE,4408
98
- iatoolkit/views/download_file_view.py,sha256=1gZ0ipqeCn39sTrJFo1-tlewlcSF7s_YNTvE4qd0HOw,2010
99
- iatoolkit/views/external_login_view.py,sha256=VyDrncAbtowZ_gOmk1kXoWhNw78xHGaz4LijIRmtWY8,6562
100
- iatoolkit/views/file_store_view.py,sha256=mmr8U4_ycSe22kdGmVfzXpJPJffo5JRGNjk3-bUdVRw,2355
97
+ iatoolkit/views/external_login_view.py,sha256=quXpu8_BJBkZ1VWGxICAu-IcVq45_sU2IxYgN3Ke4K4,4143
98
+ iatoolkit/views/file_store_api_view.py,sha256=Uz9f6sey3_F5K8zuyQz6SwYRKAalCjD1ekf-Mkl_Kfo,2326
101
99
  iatoolkit/views/forgot_password_view.py,sha256=-qKJeeOBqJFdvDUk7rCNg1E1cDQnJQkozPpb0T0FgwA,3159
102
- iatoolkit/views/history_view.py,sha256=fzZrnC-RySa7ngcPe2Hmf9_s3imx6VB6MKROMcNpjoU,2064
103
- iatoolkit/views/home_view.py,sha256=TihO2flkelJa9j6a0FKCMVhD-2X7BhemonB7LTne4x8,1248
100
+ iatoolkit/views/history_api_view.py,sha256=x-tZhB8UzqrD2n-WDIfmHK9iVhGZ9f0yncsGs9mxwt0,1953
104
101
  iatoolkit/views/index_view.py,sha256=P5aVdEWxsYOZGbzcXd6WFE733qZ7YXIoeqriUMAM6V8,1527
105
- iatoolkit/views/init_context_view.py,sha256=ndN56lE10XLj5yxUF0d53zf2ibpZZ20XzcdicNlo-Pk,1251
106
- iatoolkit/views/llmquery_view.py,sha256=rv2i3oeXlNc3Sv7Qu3DZGf37r-bMSa4N25FzG7_kPAI,2432
107
- iatoolkit/views/login_view.py,sha256=2KI94fBIK-tkpJFnd1eR4vAa3J379Trb1e6jRUQGW7E,5564
108
- iatoolkit/views/prompt_view.py,sha256=l8KHlLmkSgSLK43VbhwKED7mCN9YyfeHHh4zvx0pT0E,1257
102
+ iatoolkit/views/init_context_api_view.py,sha256=1j8NKfODfPrffbA5YO8TPMHh-ildlLNzReIxv_qO-W4,2586
103
+ iatoolkit/views/llmquery_api_view.py,sha256=Rh-y-VENwwtNsDrYAD_SWKwjK16fW-pFRWlEvI-OYwY,2120
104
+ iatoolkit/views/llmquery_web_view.py,sha256=WhjlA1mfsoL8hL9tlKQfjCUcaTzT43odlp_uQKmT314,1500
105
+ iatoolkit/views/login_test_view.py,sha256=E50Lyhf6EsUilQl9W4SLKIWW39h_Gcyf8Y2rwAJqA-Y,1049
106
+ iatoolkit/views/login_view.py,sha256=tQQhYks_4rKKyAzr6ZNuKsc4uHCPDHjZkrMwEBToKzo,6985
107
+ iatoolkit/views/prompt_api_view.py,sha256=MP0r-MiswwKcbNc_5KY7aVbHkrR218I8XCiCX1D0yTA,1244
109
108
  iatoolkit/views/signup_view.py,sha256=BCjhM2lMiDPwYrlW_eEwPl-ZLupblbFfsonWtq0E4vU,3922
110
109
  iatoolkit/views/tasks_review_view.py,sha256=keLsLCyOTTlcoIapnB_lbuSvLwrPVZVpBiFC_7ChbLg,3388
111
110
  iatoolkit/views/tasks_view.py,sha256=a3anTXrJTTvbQuc6PSpOzidLKQFL4hWa7PI2Cppcz8w,4110
112
- iatoolkit/views/user_feedback_view.py,sha256=G37zmP8P4LvZrSymNJ5iFXhLZg1A3BEwRfTpH1Iam5w,2652
111
+ iatoolkit/views/user_feedback_api_view.py,sha256=59XB9uQLHI4Q6QA4_XhK787HzfXb-c6EY7k1Ccyr4hI,2424
113
112
  iatoolkit/views/verify_user_view.py,sha256=7XLSaxvs8LjBr3cYOUDa9B8DqW_50IGlq0IvmOQcD0Y,2340
114
- iatoolkit-0.22.1.dist-info/METADATA,sha256=15bveuUgweJKf_HYeL36lKc6kQytFpKAusbzEUR6TEo,9301
115
- iatoolkit-0.22.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
116
- iatoolkit-0.22.1.dist-info/top_level.txt,sha256=V_w4QvDx0b1RXiy8zTCrD1Bp7AZkFe3_O0-9fMiwogg,10
117
- iatoolkit-0.22.1.dist-info/RECORD,,
113
+ iatoolkit-0.50.2.dist-info/METADATA,sha256=2-CxWVuSxylyjv_ze0da9KgTIOmKO0qD7SBjwm0C54Y,9301
114
+ iatoolkit-0.50.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
115
+ iatoolkit-0.50.2.dist-info/top_level.txt,sha256=V_w4QvDx0b1RXiy8zTCrD1Bp7AZkFe3_O0-9fMiwogg,10
116
+ iatoolkit-0.50.2.dist-info/RECORD,,