iatoolkit 2.41.2__tar.gz → 2.42.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. {iatoolkit-2.41.2/src/iatoolkit.egg-info → iatoolkit-2.42.2}/PKG-INFO +1 -1
  2. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/__init__.py +1 -1
  3. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/model_registry.py +22 -5
  4. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +15 -1
  5. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/llm_proxy.py +25 -3
  6. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/locales/en.yaml +26 -2
  7. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/locales/es.yaml +26 -2
  8. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/llm_query_repo.py +6 -0
  9. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/models.py +6 -0
  10. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/configuration_service.py +2 -1
  11. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/prompt_service.py +31 -0
  12. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/query_service.py +0 -1
  13. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/tenant_wiki_service.py +214 -42
  14. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/tool_service.py +46 -5
  15. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/prompt_api_view.py +23 -3
  16. {iatoolkit-2.41.2 → iatoolkit-2.42.2/src/iatoolkit.egg-info}/PKG-INFO +1 -1
  17. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/LICENSE +0 -0
  18. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/LICENSE_COMMUNITY.md +0 -0
  19. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/pyproject.toml +0 -0
  20. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/readme.md +0 -0
  21. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/requirements.txt +0 -0
  22. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/setup.cfg +0 -0
  23. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/base_company.py +0 -0
  24. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/cli_commands.py +0 -0
  25. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/__init__.py +0 -0
  26. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/bridge_validation.py +0 -0
  27. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/exceptions.py +0 -0
  28. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/interfaces/__init__.py +0 -0
  29. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
  30. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
  31. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
  32. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
  33. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
  34. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
  35. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
  36. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/routes.py +0 -0
  37. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/secret_resolver.py +0 -0
  38. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/session_manager.py +0 -0
  39. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/common/util.py +0 -0
  40. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/company_registry.py +0 -0
  41. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/__init__.py +0 -0
  42. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
  43. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
  44. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
  45. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
  46. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
  47. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
  48. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
  49. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
  50. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
  51. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
  52. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
  53. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
  54. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
  55. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
  56. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
  57. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
  58. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
  59. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
  60. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
  61. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
  62. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
  63. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
  64. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
  65. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
  66. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
  67. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
  68. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
  69. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
  70. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
  71. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/core.py +0 -0
  72. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/__init__.py +0 -0
  73. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
  74. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/call_service.py +0 -0
  75. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  76. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  77. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  78. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  79. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  80. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  81. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  82. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/google_auth_client.py +0 -0
  83. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/google_chat_app.py +0 -0
  84. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
  85. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/inference_handler.py +0 -0
  86. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
  87. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
  88. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
  89. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
  90. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
  91. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
  92. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
  93. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
  94. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/llm_response.py +0 -0
  95. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  96. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/__init__.py +0 -0
  97. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/api_key_repo.py +0 -0
  98. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/bridge_repo.py +0 -0
  99. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/database_manager.py +0 -0
  100. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/document_repo.py +0 -0
  101. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
  102. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
  103. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
  104. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
  105. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/memory_repo.py +0 -0
  106. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/profile_repo.py +0 -0
  107. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
  108. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
  109. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
  110. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/repositories/vs_repo.py +0 -0
  111. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/runtime_logging.py +0 -0
  112. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/__init__.py +0 -0
  113. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/api_key_service.py +0 -0
  114. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/attachment_policy_service.py +0 -0
  115. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/auth_service.py +0 -0
  116. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/benchmark_service.py +0 -0
  117. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/branding_service.py +0 -0
  118. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/company_context_service.py +0 -0
  119. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/context_builder_service.py +0 -0
  120. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/dispatcher_service.py +0 -0
  121. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/embedding_service.py +0 -0
  122. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/excel_service.py +0 -0
  123. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/file_processor_service.py +0 -0
  124. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/history_manager_service.py +0 -0
  125. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/http_tool_service.py +0 -0
  126. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/i18n_service.py +0 -0
  127. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/inference_service.py +0 -0
  128. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/jwt_service.py +0 -0
  129. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/knowledge_base_service.py +0 -0
  130. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/language_service.py +0 -0
  131. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/license_service.py +0 -0
  132. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/llm_client_service.py +0 -0
  133. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/mail_service.py +0 -0
  134. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
  135. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/mcp_token_service.py +0 -0
  136. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/memory_compiler_service.py +0 -0
  137. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/memory_lint_service.py +0 -0
  138. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
  139. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/memory_service.py +0 -0
  140. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/memory_wiki_service.py +0 -0
  141. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
  142. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
  143. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/__init__.py +0 -0
  144. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/contracts.py +0 -0
  145. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
  146. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
  147. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
  148. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
  149. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
  150. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
  151. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
  152. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
  153. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/parsers/validator.py +0 -0
  154. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/pdf_service.py +0 -0
  155. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/profile_service.py +0 -0
  156. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/prompt_resource_service.py +0 -0
  157. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
  158. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/sql_dataset_service.py +0 -0
  159. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/sql_service.py +0 -0
  160. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/sql_source_service.py +0 -0
  161. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/storage_service.py +0 -0
  162. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/structured_output_service.py +0 -0
  163. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
  164. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/system_tools.py +0 -0
  165. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/telemetry_service.py +0 -0
  166. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/tool_output_contract.py +0 -0
  167. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/user_feedback_service.py +0 -0
  168. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/user_session_context_service.py +0 -0
  169. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/visual_kb_service.py +0 -0
  170. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/visual_tool_service.py +0 -0
  171. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/warmup_service.py +0 -0
  172. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/web_search/__init__.py +0 -0
  173. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
  174. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
  175. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
  176. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/services/web_search_service.py +0 -0
  177. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  178. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
  179. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
  180. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
  181. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  182. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_help_content.js +0 -0
  183. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_history_button.js +0 -0
  184. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
  185. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_main.js +0 -0
  186. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
  187. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
  188. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
  189. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
  190. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
  191. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  192. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  193. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/styles/chat_public.css +0 -0
  194. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/styles/documents.css +0 -0
  195. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/styles/landing_page.css +0 -0
  196. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/styles/llm_output.css +0 -0
  197. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/static/styles/onboarding.css +0 -0
  198. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/_company_header.html +0 -0
  199. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/_login_widget.html +0 -0
  200. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/account.html +0 -0
  201. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/base.html +0 -0
  202. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/change_password.html +0 -0
  203. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/chat.html +0 -0
  204. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
  205. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/chat_modals.html +0 -0
  206. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/error.html +0 -0
  207. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/forgot_password.html +0 -0
  208. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/home_hosted_default.html +0 -0
  209. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
  210. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  211. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/pdf/base.html +0 -0
  212. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/pdf/letter.html +0 -0
  213. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/pdf/report.html +0 -0
  214. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/pdf/simple.html +0 -0
  215. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/templates/signup.html +0 -0
  216. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/__init__.py +0 -0
  217. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/account_view.py +0 -0
  218. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/api_key_api_view.py +0 -0
  219. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/base_login_view.py +0 -0
  220. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/categories_api_view.py +0 -0
  221. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/change_password_view.py +0 -0
  222. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
  223. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/chat_view.py +0 -0
  224. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/configuration_api_view.py +0 -0
  225. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/connectors_api_view.py +0 -0
  226. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/embedding_api_view.py +0 -0
  227. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/forgot_password_view.py +0 -0
  228. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/help_content_api_view.py +0 -0
  229. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/history_api_view.py +0 -0
  230. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/home_view.py +0 -0
  231. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/init_context_api_view.py +0 -0
  232. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  233. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/load_document_api_view.py +0 -0
  234. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/login_view.py +0 -0
  235. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/logout_api_view.py +0 -0
  236. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/memory_api_view.py +0 -0
  237. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/profile_api_view.py +0 -0
  238. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
  239. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
  240. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/rag_api_view.py +0 -0
  241. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/root_redirect_view.py +0 -0
  242. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/signup_view.py +0 -0
  243. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/static_page_view.py +0 -0
  244. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/tool_api_view.py +0 -0
  245. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
  246. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/users_api_view.py +0 -0
  247. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit/views/verify_user_view.py +0 -0
  248. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  249. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  250. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/src/iatoolkit.egg-info/requires.txt +0 -0
  251. {iatoolkit-2.41.2 → iatoolkit-2.42.2}/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: 2.41.2
3
+ Version: 2.42.2
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # IAToolkit is open source software.
5
5
 
6
- __version__ = "2.41.2"
6
+ __version__ = "2.42.2"
7
7
 
8
8
  # Expose main classes and functions at the top level of the package
9
9
 
@@ -60,6 +60,10 @@ class RouteParam:
60
60
  is_env_name: bool = False
61
61
  #: A regular expression the value must match, or None for "any non-empty".
62
62
  pattern: str | None = None
63
+ #: How to finish "'base_url' does not look like ___" when the pattern refuses a
64
+ #: value. Declared here so a new parameter cannot inherit another one's wording:
65
+ #: the message for `model_name` read "does not look like a URL".
66
+ looks_like: str = "a valid value"
63
67
 
64
68
 
65
69
  #: What each provider needs in order to be reached, keyed by provider.
@@ -81,14 +85,23 @@ class RouteParam:
81
85
  #: `openrouter` allows both and requires neither: there is one OpenRouter for
82
86
  #: everyone and its base URL has a working default, so an entry only overrides
83
87
  #: when it has a reason to.
88
+ #: `model_name` is optional and exists because a catalogue key is lowercased: it
89
+ #: identifies the model across entitlements, rate cards and usage rows, so it cannot
90
+ #: also be the name on the wire. A vLLM endpoint serving
91
+ #: `meta-llama/Llama-3.1-8B-Instruct` answers 404 to the lowercased key. When set,
92
+ #: it is the exact name that endpoint answers to, and only the wire value changes.
84
93
  PROVIDER_ROUTE_PARAMS: dict[str, tuple[RouteParam, ...]] = {
85
94
  "openai_compatible": (
86
- RouteParam("base_url", required=True, pattern=r"^https?://\S+$"),
87
- RouteParam("api_key_env", required=True, is_env_name=True, pattern=r"^[A-Z][A-Z0-9_]*$"),
95
+ RouteParam("base_url", required=True, pattern=r"^https?://\S+$", looks_like="a URL"),
96
+ RouteParam("api_key_env", required=True, is_env_name=True, pattern=r"^[A-Z][A-Z0-9_]*$",
97
+ looks_like="an environment variable name"),
98
+ RouteParam("model_name", required=False, pattern=r"^[A-Za-z0-9._:\-/]+$",
99
+ looks_like="a model name"),
88
100
  ),
89
101
  "openrouter": (
90
- RouteParam("base_url", required=False, pattern=r"^https?://\S+$"),
91
- RouteParam("api_key_env", required=False, is_env_name=True, pattern=r"^[A-Z][A-Z0-9_]*$"),
102
+ RouteParam("base_url", required=False, pattern=r"^https?://\S+$", looks_like="a URL"),
103
+ RouteParam("api_key_env", required=False, is_env_name=True, pattern=r"^[A-Z][A-Z0-9_]*$",
104
+ looks_like="an environment variable name"),
92
105
  ),
93
106
  }
94
107
 
@@ -163,12 +176,16 @@ class ModelRegistry:
163
176
 
164
177
  def get_capabilities(self, model: str, provider: str | None = None) -> dict:
165
178
  normalized_provider = self.normalize_provider(provider=provider, model=model)
179
+ # `openai_compatible` is absent on purpose. Its adapter targets any server
180
+ # that speaks chat.completions — llama.cpp, vLLM, a private gateway — and
181
+ # forwards no reasoning field, because one the server does not know earns a
182
+ # 400. Claiming the capability here made the tenant's Models page offer a
183
+ # reasoning control whose value went nowhere.
166
184
  supports_reasoning_effort = normalized_provider in {
167
185
  "openai",
168
186
  "xai",
169
187
  "openrouter",
170
188
  "deepseek",
171
- "openai_compatible",
172
189
  }
173
190
  supports_text_verbosity = normalized_provider in {"openai", "xai", "openrouter"}
174
191
  supports_store = normalized_provider in {"openai", "xai"}
@@ -22,7 +22,21 @@ class OpenAICompatibleChatAdapter:
22
22
  """
23
23
 
24
24
  supports_multimodal = False
25
- supports_reasoning = True
25
+ #: `reasoning` is a **Responses API** parameter. This class calls
26
+ #: `chat.completions.create`, whose signature has no such argument, so the
27
+ #: OpenAI SDK raises a TypeError before any request leaves the process:
28
+ #: "Completions.create() got an unexpected keyword argument 'reasoning'".
29
+ #:
30
+ #: It was True here, and both subclasses overrode it to False — DeepSeek and
31
+ #: OpenRouter each had to correct the base. Nothing was served by this class
32
+ #: directly until a model with provider `openai_compatible` was added from the
33
+ #: catalogue, and that first request crashed.
34
+ supports_reasoning = False
35
+ #: The Chat Completions equivalent is the plain string `reasoning_effort`, and
36
+ #: it stays off *here*: this class targets any OpenAI-compatible server —
37
+ #: llama.cpp, vLLM, a private gateway — and a server that does not know the
38
+ #: field answers 400. A provider whose API does accept it opts in, which is
39
+ #: what DeepseekAdapter does.
26
40
  supports_reasoning_effort = False
27
41
  supports_reasoning_content_messages = False
28
42
  supports_metadata = False
@@ -142,7 +142,11 @@ class LLMProxy:
142
142
  request_kwargs["telemetry_execution"] = telemetry_execution
143
143
 
144
144
  # Delegate to the adapter (OpenAI, Gemini, DeepSeek, xAI, Anthropic, etc.)
145
- return adapter.create_response(model=model, input=input, **request_kwargs)
145
+ return adapter.create_response(
146
+ model=self._wire_model(model, model_config),
147
+ input=input,
148
+ **request_kwargs,
149
+ )
146
150
 
147
151
  def describe_transport(self, company_short_name: str, model: str) -> str:
148
152
  provider = self._resolve_provider_for_company_model(
@@ -349,7 +353,6 @@ class LLMProxy:
349
353
  self.PROVIDER_OPENAI,
350
354
  self.PROVIDER_XAI,
351
355
  self.PROVIDER_DEEPSEEK,
352
- self.PROVIDER_OPENAI_COMPATIBLE,
353
356
  self.PROVIDER_OPENROUTER,
354
357
  })
355
358
  )
@@ -360,7 +363,9 @@ class LLMProxy:
360
363
  if explicit_reasoning_effort:
361
364
  return effective_kwargs
362
365
 
363
- request_defaults = self.configuration_service.get_llm_request_defaults(company_short_name) or {}
366
+ request_defaults = self.configuration_service.get_llm_request_defaults(
367
+ company_short_name, model
368
+ ) or {}
364
369
  default_reasoning = dict(request_defaults.get("reasoning") or {})
365
370
  default_reasoning_effort = str(default_reasoning.get("effort") or "").strip().lower()
366
371
  if not default_reasoning_effort:
@@ -744,6 +749,23 @@ class LLMProxy:
744
749
  route = (model_config or {}).get("route_config") if isinstance(model_config, dict) else None
745
750
  return dict(route) if isinstance(route, dict) else {}
746
751
 
752
+ @staticmethod
753
+ def _wire_model(model: str, model_config: Dict[str, Any] | None) -> str:
754
+ """The name the endpoint itself answers to, which is not always our key.
755
+
756
+ Catalogue keys are lowercased on write, because one key identifies a model
757
+ across entitlements, rate cards and usage rows. A server is free to be
758
+ case-sensitive: a vLLM endpoint serving `meta-llama/Llama-3.1-8B-Instruct`
759
+ answers `404 - The model does not exist` to the lowercased key.
760
+
761
+ So an entry may carry the exact served name in its route, and only the value
762
+ on the wire changes. Everything metered stays keyed by the catalogue key,
763
+ which is what keeps one model from splitting into two usage lines.
764
+ """
765
+ route = LLMProxy._model_route(model_config)
766
+ served_name = str(route.get("model_name") or "").strip()
767
+ return served_name or model
768
+
747
769
  @staticmethod
748
770
  def _model_credential_ref(model_config: Dict[str, Any] | None) -> str | None:
749
771
  """The secret this model is entitled to run on, when the company owns it.
@@ -1806,6 +1806,17 @@ ui:
1806
1806
  new_modal_title: "Create New Prompt"
1807
1807
  name_label: "Name (Slug)"
1808
1808
  name_help: "Use lowercase, numbers, and underscores only."
1809
+ create_name_label: "Name"
1810
+ create_name_placeholder: "Customer Support"
1811
+ create_name_help: "Used to suggest the technical identifier."
1812
+ create_key_label: "Technical ID"
1813
+ create_key_placeholder: "customer_support"
1814
+ create_key_help: "Stable snake_case identifier used internally."
1815
+ create_name_required: "Name is required."
1816
+ create_key_required: "Technical ID is required."
1817
+ create_creating: "Creating agent..."
1818
+ create_success: "Agent \"{name}\" created."
1819
+ create_failed: "Failed to create the agent."
1809
1820
  category_label: "Category"
1810
1821
  versions_btn: "Versions"
1811
1822
  versions_modal_title: "Previous versions"
@@ -1848,8 +1859,9 @@ ui:
1848
1859
  type_label: "Tool Type"
1849
1860
  method_label: "Execution Method"
1850
1861
  method_help: "Python method name in your company class implementation, or inference tool name."
1851
- desc_label: "Description (Prompt)"
1852
- desc_placeholder: "Describe to the LLM when and how to use this tool..."
1862
+ desc_label: "Description for the agent"
1863
+ desc_placeholder: "Describe for the agent when and how to use this tool..."
1864
+ desc_help: "This description guides the agent in deciding when to use this tool."
1853
1865
  active_label: "Active"
1854
1866
 
1855
1867
  # Schema Section
@@ -1877,6 +1889,14 @@ ui:
1877
1889
  modal_title: "Create New Tool"
1878
1890
  modal_name_label: "Tool Name (LLM Function)"
1879
1891
  modal_name_help: "Use snake_case. Must be unique."
1892
+ modal_display_name_label: "Name"
1893
+ modal_display_name_placeholder: "Tax Calculator"
1894
+ modal_display_name_help: "Used to suggest the technical identifier."
1895
+ modal_display_name_required: "Name is required."
1896
+ modal_key_label: "Technical ID"
1897
+ modal_key_placeholder: "calculate_tax"
1898
+ modal_key_help: "Stable snake_case identifier used by prompts and routing."
1899
+ modal_key_required: "Technical ID is required."
1880
1900
  modal_type_label: "Type"
1881
1901
  modal_output_preset_label: "Output preset"
1882
1902
  modal_output_preset_none: "No preset"
@@ -2172,6 +2192,8 @@ ui:
2172
2192
  col_cost: "Cost"
2173
2193
  col_key: "API key"
2174
2194
  col_enabled: "Enabled"
2195
+ col_default: "Default"
2196
+ col_reasoning: "Reasoning"
2175
2197
  cost_metered: "Metered"
2176
2198
  cost_not_billable: "No charge"
2177
2199
  cost_own_key: "Billed by your provider"
@@ -2205,6 +2227,8 @@ ui:
2205
2227
  form_route_base_url_hint: "The full URL requests go to, e.g. https://your-host/v1"
2206
2228
  form_route_api_key_env: "Credential variable"
2207
2229
  form_route_api_key_env_hint: "The NAME of an environment variable in this deployment, e.g. OSS_LLM_API_KEY. Never the key itself."
2230
+ form_route_model_name: "Name served by the endpoint"
2231
+ form_route_model_name_hint: "Optional. The exact name this endpoint answers to, e.g. meta-llama/Llama-3.1-8B-Instruct. Leave empty to send the identifier above, which is stored in lowercase."
2208
2232
  route_required: "This provider needs an endpoint and the name of its credential variable."
2209
2233
  secrets:
2210
2234
  title: "Secrets"
@@ -1811,6 +1811,17 @@ ui:
1811
1811
  new_modal_title: "Crear Nuevo Prompt"
1812
1812
  name_label: "Nombre (Slug)"
1813
1813
  name_help: "Solo minúsculas, números y guiones bajos."
1814
+ create_name_label: "Nombre"
1815
+ create_name_placeholder: "Soporte al cliente"
1816
+ create_name_help: "Se usa para sugerir el identificador técnico."
1817
+ create_key_label: "ID técnico"
1818
+ create_key_placeholder: "soporte_cliente"
1819
+ create_key_help: "Identificador estable en snake_case usado internamente."
1820
+ create_name_required: "El nombre es obligatorio."
1821
+ create_key_required: "El ID técnico es obligatorio."
1822
+ create_creating: "Creando agente..."
1823
+ create_success: "Agente \"{name}\" creado."
1824
+ create_failed: "No se pudo crear el agente."
1814
1825
  category_label: "Categoría"
1815
1826
  versions_btn: "Versiones"
1816
1827
  versions_modal_title: "Versiones antiguas"
@@ -1854,8 +1865,9 @@ ui:
1854
1865
  type_label: "Tipo de Herramienta"
1855
1866
  method_label: "Método a ejecutar"
1856
1867
  method_help: "Nombre del método Python en la implementación de la clase de su empresa, o nombre de tool en inference"
1857
- desc_label: "Descripción (Prompt)"
1858
- desc_placeholder: "Describe al LLM cuándo y cómo usar esta herramienta..."
1868
+ desc_label: "Descripción para el agente"
1869
+ desc_placeholder: "Describe al agente cuándo y cómo usar esta tool..."
1870
+ desc_help: "Esta descripción guía al agente para decidir cuándo usar esta tool."
1859
1871
  active_label: "Activo"
1860
1872
 
1861
1873
  # Schema Section
@@ -1883,6 +1895,14 @@ ui:
1883
1895
  modal_title: "Crear Nueva Herramienta"
1884
1896
  modal_name_label: "Nombre (Función LLM)"
1885
1897
  modal_name_help: "Usar snake_case. Debe ser único."
1898
+ modal_display_name_label: "Nombre"
1899
+ modal_display_name_placeholder: "Calculadora tributaria"
1900
+ modal_display_name_help: "Se usa para sugerir el identificador técnico."
1901
+ modal_display_name_required: "El nombre es obligatorio."
1902
+ modal_key_label: "ID técnico"
1903
+ modal_key_placeholder: "calcular_impuestos"
1904
+ modal_key_help: "Identificador estable en snake_case usado por prompts y routing."
1905
+ modal_key_required: "El ID técnico es obligatorio."
1886
1906
  modal_type_label: "Tipo"
1887
1907
  modal_output_preset_label: "Preset de output"
1888
1908
  modal_output_preset_none: "Sin preset"
@@ -2178,6 +2198,8 @@ ui:
2178
2198
  col_cost: "Costo"
2179
2199
  col_key: "API key"
2180
2200
  col_enabled: "Habilitado"
2201
+ col_default: "Por defecto"
2202
+ col_reasoning: "Razonamiento"
2181
2203
  cost_metered: "Con medición"
2182
2204
  cost_not_billable: "Sin costo"
2183
2205
  cost_own_key: "Lo factura tu proveedor"
@@ -2211,6 +2233,8 @@ ui:
2211
2233
  form_route_base_url_hint: "La URL completa a la que van las requests, ej. https://tu-host/v1"
2212
2234
  form_route_api_key_env: "Variable de la credencial"
2213
2235
  form_route_api_key_env_hint: "El NOMBRE de una variable de entorno de este deployment, ej. OSS_LLM_API_KEY. Nunca la key."
2236
+ form_route_model_name: "Nombre que sirve el endpoint"
2237
+ form_route_model_name_hint: "Opcional. El nombre exacto al que responde el endpoint, ej. meta-llama/Llama-3.1-8B-Instruct. Vacío envía el identificador de arriba, que se guarda en minúsculas."
2214
2238
  route_required: "Este proveedor necesita un endpoint y el nombre de la variable con su credencial."
2215
2239
  secrets:
2216
2240
  title: "Secrets"
@@ -66,6 +66,12 @@ class LLMQueryRepo:
66
66
  is_active=True
67
67
  ).first()
68
68
 
69
+ def get_tool_by_name(self, company: Company, tool_name: str) -> Tool | None:
70
+ return self.session.query(Tool).filter_by(
71
+ company_id=company.id,
72
+ name=tool_name,
73
+ ).first()
74
+
69
75
  def get_system_tool(self, tool_name: str) -> Tool | None:
70
76
  return self.session.query(Tool).filter_by(
71
77
  tool_type=Tool.TYPE_SYSTEM,
@@ -1304,6 +1304,12 @@ class CompanyModelEntitlement(Base):
1304
1304
 
1305
1305
  #: The model this company's requests use when none is specified.
1306
1306
  is_default = Column(Boolean, nullable=False, default=False)
1307
+
1308
+ #: Default reasoning effort for this company when this model answers. This
1309
+ #: is deliberately not on the shared catalogue entry: one company may want a
1310
+ #: cheap default while another spends more reasoning on the same route.
1311
+ reasoning_effort = Column(String(16), nullable=True)
1312
+
1307
1313
  is_active = Column(Boolean, nullable=False, default=True, index=True)
1308
1314
 
1309
1315
  created_at = Column(DateTime, default=datetime.now)
@@ -1405,7 +1405,8 @@ class ConfigurationService:
1405
1405
  telemetry_cfg = llm_config.get("telemetry")
1406
1406
  return dict(telemetry_cfg) if isinstance(telemetry_cfg, dict) else {}
1407
1407
 
1408
- def get_llm_request_defaults(self, company_short_name: str) -> dict:
1408
+ def get_llm_request_defaults(self, company_short_name: str, model_key: str | None = None) -> dict:
1409
+ _ = model_key
1409
1410
  self._ensure_config_loaded(company_short_name)
1410
1411
  llm_config = self._loaded_configs[company_short_name].get("llm") or {}
1411
1412
  defaults = {"text": {}, "reasoning": {}}
@@ -22,8 +22,11 @@ from iatoolkit.common.exceptions import IAToolkitException
22
22
  from iatoolkit.services.system_prompt_catalog import build_system_prompt_payload
23
23
  from iatoolkit.services.structured_output_service import StructuredOutputService
24
24
  import logging
25
+ import re
26
+ import unicodedata
25
27
 
26
28
  class PromptService:
29
+ PROMPT_NAME_MAX_LENGTH = 255
27
30
  OUTPUT_SCHEMA_MODE_BEST_EFFORT = "best_effort"
28
31
  OUTPUT_SCHEMA_MODE_STRICT = "strict"
29
32
  OUTPUT_RESPONSE_MODE_CHAT = "chat_compatible"
@@ -76,6 +79,34 @@ class PromptService:
76
79
  self.sql_service = sql_service
77
80
  self.configuration_service = configuration_service
78
81
 
82
+ @classmethod
83
+ def normalize_prompt_name(cls, prompt_name: str | None) -> str:
84
+ candidate = str(prompt_name or "").strip()
85
+ if not candidate:
86
+ raise IAToolkitException(
87
+ IAToolkitException.ErrorType.MISSING_PARAMETER,
88
+ "Prompt name is required",
89
+ )
90
+
91
+ normalized = unicodedata.normalize("NFKD", candidate).encode("ascii", "ignore").decode("ascii")
92
+ normalized = normalized.lower()
93
+ normalized = re.sub(r"[^a-z0-9]+", "_", normalized)
94
+ normalized = re.sub(r"_+", "_", normalized).strip("_")
95
+
96
+ if not normalized:
97
+ raise IAToolkitException(
98
+ IAToolkitException.ErrorType.INVALID_PARAMETER,
99
+ "Prompt name must contain letters or numbers",
100
+ )
101
+
102
+ if len(normalized) > cls.PROMPT_NAME_MAX_LENGTH:
103
+ raise IAToolkitException(
104
+ IAToolkitException.ErrorType.INVALID_PARAMETER,
105
+ f"Prompt name must be {cls.PROMPT_NAME_MAX_LENGTH} characters or fewer",
106
+ )
107
+
108
+ return normalized
109
+
79
110
  def _normalize_execution_mode(
80
111
  self,
81
112
  execution_mode: str | None,
@@ -612,7 +612,6 @@ class QueryService:
612
612
  "xai",
613
613
  "openrouter",
614
614
  "deepseek",
615
- "openai_compatible",
616
615
  ))
617
616
  )
618
617
  text_verbosity_provider_supported = bool(