iatoolkit 2.40.0__tar.gz → 2.41.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {iatoolkit-2.40.0/src/iatoolkit.egg-info → iatoolkit-2.41.0}/PKG-INFO +1 -1
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/model_registry.py +20 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/routes.py +3 -1
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/llm_proxy.py +57 -4
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/locales/en.yaml +52 -5
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/locales/es.yaml +52 -5
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/database_manager.py +33 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +7 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/models.py +242 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/dispatcher_service.py +10 -1
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/tenant_wiki_service.py +460 -6
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/tool_service.py +7 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/configuration_api_view.py +45 -39
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/login_view.py +11 -1
- {iatoolkit-2.40.0 → iatoolkit-2.41.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/LICENSE +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/pyproject.toml +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/readme.md +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/requirements.txt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/setup.cfg +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/benchmark_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/llm_client_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.40.0 → iatoolkit-2.41.0}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -26,6 +26,26 @@ class ModelMetadata:
|
|
|
26
26
|
history_type: HistoryType
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
#: Providers a model can actually be served by: the ones `LLMProxy._build_adapter`
|
|
30
|
+
#: knows how to build. Deliberately narrower than `ProviderType`, which also
|
|
31
|
+
#: contains `xai` — `normalize_provider` accepts it and a client is built for it,
|
|
32
|
+
#: but there is no xAI adapter, so a model declared `xai` raises "Provider not
|
|
33
|
+
#: supported" on its first request. A test pins this tuple to the adapters that
|
|
34
|
+
#: exist so the two cannot drift.
|
|
35
|
+
#:
|
|
36
|
+
#: Anything that lets a person choose a provider must offer exactly these: the
|
|
37
|
+
#: value reaches `_build_adapter` verbatim, so a typo becomes a runtime failure in
|
|
38
|
+
#: front of an end user, hours after it was saved.
|
|
39
|
+
SERVABLE_PROVIDERS: tuple[str, ...] = (
|
|
40
|
+
"openai",
|
|
41
|
+
"anthropic",
|
|
42
|
+
"gemini",
|
|
43
|
+
"deepseek",
|
|
44
|
+
"openrouter",
|
|
45
|
+
"openai_compatible",
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
29
49
|
@singleton
|
|
30
50
|
class ModelRegistry:
|
|
31
51
|
"""
|
|
@@ -253,9 +253,11 @@ def register_views(app):
|
|
|
253
253
|
|
|
254
254
|
# company configuration
|
|
255
255
|
configuration_view = ConfigurationApiView.as_view('configuration')
|
|
256
|
+
# No POST: adding an arbitrary new key had no caller in any frontend, and
|
|
257
|
+
# the write path is deliberately narrow — see TENANT_WRITABLE_CONFIG_KEYS.
|
|
256
258
|
app.add_url_rule('/<company_short_name>/api/configuration',
|
|
257
259
|
view_func=configuration_view,
|
|
258
|
-
methods=['GET', '
|
|
260
|
+
methods=['GET', 'PATCH'],)
|
|
259
261
|
|
|
260
262
|
# explicit runtime reload endpoint used by admin/dashboard integrations
|
|
261
263
|
app.add_url_rule('/<company_short_name>/api/load_configuration',
|
|
@@ -118,6 +118,7 @@ class LLMProxy:
|
|
|
118
118
|
provider=provider,
|
|
119
119
|
company_short_name=company_short_name,
|
|
120
120
|
telemetry_request=telemetry_request,
|
|
121
|
+
model_config=model_config,
|
|
121
122
|
)
|
|
122
123
|
|
|
123
124
|
request_kwargs = self._apply_provider_request_overrides(
|
|
@@ -202,12 +203,20 @@ class LLMProxy:
|
|
|
202
203
|
provider: str,
|
|
203
204
|
company_short_name: str,
|
|
204
205
|
telemetry_request: Dict[str, Any] | None = None,
|
|
206
|
+
model_config: Dict[str, Any] | None = None,
|
|
205
207
|
) -> Any:
|
|
206
208
|
"""
|
|
207
209
|
Return an adapter instance for the given provider.
|
|
208
210
|
If none exists yet, create it using a cached or new low-level client.
|
|
211
|
+
|
|
212
|
+
``model_config`` is threaded through because whose key pays is decided
|
|
213
|
+
per model, not per provider: a company can resell one model through the
|
|
214
|
+
platform and fund another with a key of its own, and both may be served
|
|
215
|
+
by the same provider. The client cache is keyed by the resolved api key,
|
|
216
|
+
so two models of one provider on different keys get different clients
|
|
217
|
+
instead of sharing the first one created.
|
|
209
218
|
"""
|
|
210
|
-
client_config = self._get_client_config(company_short_name, provider)
|
|
219
|
+
client_config = self._get_client_config(company_short_name, provider, model_config=model_config)
|
|
211
220
|
api_key = client_config["api_key"]
|
|
212
221
|
base_url = client_config.get("base_url") or ""
|
|
213
222
|
default_headers = client_config.get("default_headers") or {}
|
|
@@ -569,12 +578,19 @@ class LLMProxy:
|
|
|
569
578
|
f"Provider not supported in _create_client_for_provider: {provider}"
|
|
570
579
|
)
|
|
571
580
|
|
|
572
|
-
def _get_client_config(
|
|
581
|
+
def _get_client_config(
|
|
582
|
+
self,
|
|
583
|
+
company_short_name: str,
|
|
584
|
+
provider: str,
|
|
585
|
+
model_config: Dict[str, Any] | None = None,
|
|
586
|
+
) -> dict:
|
|
573
587
|
provider_config = self.configuration_service.get_llm_provider_config(company_short_name, provider) or {}
|
|
588
|
+
secret_ref = self._model_credential_ref(model_config)
|
|
574
589
|
provider_api_key = self._get_api_key_from_config(
|
|
575
590
|
company_short_name,
|
|
576
591
|
provider,
|
|
577
592
|
required=False,
|
|
593
|
+
secret_ref=secret_ref,
|
|
578
594
|
)
|
|
579
595
|
gateway_transport = self.gateway_resolver.resolve(
|
|
580
596
|
company_short_name=company_short_name,
|
|
@@ -595,6 +611,7 @@ class LLMProxy:
|
|
|
595
611
|
company_short_name,
|
|
596
612
|
provider,
|
|
597
613
|
required=True,
|
|
614
|
+
secret_ref=secret_ref,
|
|
598
615
|
)
|
|
599
616
|
configured_base_url = self._get_base_url_from_config(company_short_name, provider)
|
|
600
617
|
configured_headers = self._get_default_headers_from_config(company_short_name, provider)
|
|
@@ -709,7 +726,34 @@ class LLMProxy:
|
|
|
709
726
|
# -------------------------------------------------------------------------
|
|
710
727
|
# Configuration helpers
|
|
711
728
|
# -------------------------------------------------------------------------
|
|
712
|
-
|
|
729
|
+
@staticmethod
|
|
730
|
+
def _model_credential_ref(model_config: Dict[str, Any] | None) -> str | None:
|
|
731
|
+
"""The secret this model is entitled to run on, when the company owns it.
|
|
732
|
+
|
|
733
|
+
`credential_owner` and `secret_key_name` come from the company's
|
|
734
|
+
catalogue entitlement, and until now nothing on the request path read
|
|
735
|
+
them: the key was resolved only from `llm.provider_api_keys`, by name. So
|
|
736
|
+
a model the catalogue said the platform pays for could still run on a
|
|
737
|
+
customer's key — whenever the customer had stored a secret under the same
|
|
738
|
+
name as the platform's variable — and be invoiced as platform-served.
|
|
739
|
+
|
|
740
|
+
Only `company` ownership overrides. `platform` deliberately falls through
|
|
741
|
+
to the deployment's mapping, which is what "we pay for this" means.
|
|
742
|
+
"""
|
|
743
|
+
if not isinstance(model_config, dict):
|
|
744
|
+
return None
|
|
745
|
+
if str(model_config.get("credential_owner") or "").strip().lower() != "company":
|
|
746
|
+
return None
|
|
747
|
+
return str(model_config.get("secret_key_name") or "").strip() or None
|
|
748
|
+
|
|
749
|
+
def _get_api_key_from_config(
|
|
750
|
+
self,
|
|
751
|
+
company_short_name: str,
|
|
752
|
+
provider: str,
|
|
753
|
+
*,
|
|
754
|
+
required: bool = True,
|
|
755
|
+
secret_ref: str | None = None,
|
|
756
|
+
) -> str:
|
|
713
757
|
"""
|
|
714
758
|
Read the LLM API key from company configuration and environment variables.
|
|
715
759
|
|
|
@@ -730,8 +774,17 @@ class LLMProxy:
|
|
|
730
774
|
provider_keys = llm_config.get("provider_api_keys") or {}
|
|
731
775
|
env_var_name = None
|
|
732
776
|
|
|
777
|
+
# 0) El secreto de la habilitación del modelo, cuando la empresa trae su
|
|
778
|
+
# propia key. Gana sobre el mapeo del archivo porque es la decisión
|
|
779
|
+
# explícita y por modelo; el mapeo es del deployment y por proveedor.
|
|
780
|
+
# 0) El secreto de la habilitación del modelo, cuando la empresa trae su
|
|
781
|
+
# propia key. Gana sobre el mapeo del archivo porque es la decisión
|
|
782
|
+
# explícita y por modelo; el mapeo es del deployment y por proveedor.
|
|
783
|
+
if secret_ref:
|
|
784
|
+
env_var_name = secret_ref
|
|
785
|
+
|
|
733
786
|
# 1) Intentar api-key específica por proveedor (si existe el bloque provider_api_keys)
|
|
734
|
-
if provider_keys and isinstance(provider_keys, dict):
|
|
787
|
+
if not env_var_name and provider_keys and isinstance(provider_keys, dict):
|
|
735
788
|
env_var_name = provider_keys.get(provider)
|
|
736
789
|
|
|
737
790
|
# 2) Fallback: usar api-key global si no hay específica
|
|
@@ -2138,6 +2138,57 @@ ui:
|
|
|
2138
2138
|
obs_identity: "Identity"
|
|
2139
2139
|
obs_outcome: "Outcome"
|
|
2140
2140
|
obs_latency: "Latency"
|
|
2141
|
+
models:
|
|
2142
|
+
form_provider_hint: "A model you run yourself — locally, a self-hosted endpoint, your own gateway — is openai_compatible."
|
|
2143
|
+
form_model_key: "Model key"
|
|
2144
|
+
form_model_key_hint: "Exactly as the provider expects it."
|
|
2145
|
+
form_provider: "Provider"
|
|
2146
|
+
form_display_name: "Name people see here"
|
|
2147
|
+
empty_state_self_serve: "No models yet. Add the first one to make it available here."
|
|
2148
|
+
action_add: "Add model"
|
|
2149
|
+
action_remove: "Remove"
|
|
2150
|
+
confirm_remove: "Remove {model_key} from this workspace? People here stop being able to pick it."
|
|
2151
|
+
add_title: "Add a model"
|
|
2152
|
+
add_hint: "The key has to match exactly what the provider expects. This install invoices nobody, so there is no price to set."
|
|
2153
|
+
add_success: "Model added and available."
|
|
2154
|
+
remove_success: "Model removed."
|
|
2155
|
+
key_required: "The model key is required."
|
|
2156
|
+
title: "Models"
|
|
2157
|
+
subtitle: "Choose which AI models this workspace can use, and whose API key pays for them."
|
|
2158
|
+
empty_state: "No models are available yet. Your IAToolkit contact publishes them."
|
|
2159
|
+
col_model: "Model"
|
|
2160
|
+
col_cost: "Cost"
|
|
2161
|
+
col_key: "API key"
|
|
2162
|
+
col_enabled: "Enabled"
|
|
2163
|
+
cost_metered: "Metered"
|
|
2164
|
+
cost_not_billable: "No charge"
|
|
2165
|
+
cost_own_key: "Billed by your provider"
|
|
2166
|
+
key_platform: "Included"
|
|
2167
|
+
label_default: "Default"
|
|
2168
|
+
label_enabled: "Enabled"
|
|
2169
|
+
label_disabled: "Not enabled"
|
|
2170
|
+
action_configure: "Configure"
|
|
2171
|
+
action_enable: "Enable"
|
|
2172
|
+
modal_title: "Model settings"
|
|
2173
|
+
form_enabled: "Available in this workspace"
|
|
2174
|
+
form_enabled_hint: "People here can pick this model when they start a conversation."
|
|
2175
|
+
form_is_default: "Use as the default model"
|
|
2176
|
+
form_credential_owner: "Which API key runs it"
|
|
2177
|
+
form_owner_platform: "The key included with IAToolkit"
|
|
2178
|
+
form_owner_platform_hint: "Usage is measured and appears on your invoice."
|
|
2179
|
+
form_owner_company: "One of your own keys"
|
|
2180
|
+
form_owner_company_hint: "Your provider bills you directly, so this usage never reaches your IAToolkit invoice."
|
|
2181
|
+
form_secret_key_name: "Stored key to use"
|
|
2182
|
+
form_secret_hint: "Keys are added and rotated under Administration → Secrets, where they stay encrypted. This screen only points at one by name."
|
|
2183
|
+
not_billable_note: "This model costs nothing to run, so it never appears on an invoice whichever key it uses."
|
|
2184
|
+
secret_required: "Choose the stored key this model should use."
|
|
2185
|
+
load_error: "Could not load the models."
|
|
2186
|
+
save_error: "Could not save the model."
|
|
2187
|
+
save_success: "Model updated."
|
|
2188
|
+
reasoning_applies_to: "Applies to {model}"
|
|
2189
|
+
form_secret_value: "Your provider key"
|
|
2190
|
+
secret_hint_new: "Stored encrypted for this provider. Your provider bills you directly."
|
|
2191
|
+
secret_hint_stored: "A key is already stored for this provider. Paste one to replace it."
|
|
2141
2192
|
secrets:
|
|
2142
2193
|
title: "Secrets"
|
|
2143
2194
|
subtitle: "Manage company secrets used by integrations and services."
|
|
@@ -2195,10 +2246,6 @@ ui:
|
|
|
2195
2246
|
company_name: "Company name"
|
|
2196
2247
|
short_name: "Short name"
|
|
2197
2248
|
runtime_mode: "Runtime mode"
|
|
2198
|
-
model_card_title: "Default AI Model"
|
|
2199
|
-
model_card_desc: "Choose the default model used across the company configuration."
|
|
2200
|
-
default_model: "Default model"
|
|
2201
|
-
model_card_helper: "This model will be used as the default runtime selection."
|
|
2202
2249
|
default_reasoning: "Default reasoning"
|
|
2203
2250
|
default_reasoning_auto: "Automatic"
|
|
2204
2251
|
reasoning_card_helper: "Applies when the selected model and provider support this reasoning level. Prompts can still override it."
|
|
@@ -2213,7 +2260,6 @@ ui:
|
|
|
2213
2260
|
reasoning_effort_high: "High"
|
|
2214
2261
|
reasoning_effort_xhigh: "Very high"
|
|
2215
2262
|
branding_card_title: "Branding"
|
|
2216
|
-
branding_card_desc: "Adjust the main colors used by the company experience."
|
|
2217
2263
|
primary_color: "Primary color"
|
|
2218
2264
|
secondary_color: "Secondary color"
|
|
2219
2265
|
preview: "Preview"
|
|
@@ -2236,6 +2282,7 @@ ui:
|
|
|
2236
2282
|
chat_context_preview_subtitle: "Logical view of the active conversational context for this user."
|
|
2237
2283
|
chat_context_preview_block_label: "Sent Context"
|
|
2238
2284
|
|
|
2285
|
+
runtime_defaults_card_title: "Runtime defaults"
|
|
2239
2286
|
rag:
|
|
2240
2287
|
ingestion: "Ingestion"
|
|
2241
2288
|
ingestion_description: "Ingest documents into the knowledge base."
|
|
@@ -2144,6 +2144,57 @@ ui:
|
|
|
2144
2144
|
obs_identity: "Identidad"
|
|
2145
2145
|
obs_outcome: "Resultado"
|
|
2146
2146
|
obs_latency: "Latencia"
|
|
2147
|
+
models:
|
|
2148
|
+
form_provider_hint: "Un modelo que corres vos —local, un endpoint propio, tu gateway— es openai_compatible."
|
|
2149
|
+
form_model_key: "Clave del modelo"
|
|
2150
|
+
form_model_key_hint: "Exactamente como la espera el proveedor."
|
|
2151
|
+
form_provider: "Proveedor"
|
|
2152
|
+
form_display_name: "Nombre que ven las personas de acá"
|
|
2153
|
+
empty_state_self_serve: "Todavía no hay modelos. Agrega el primero para que quede disponible acá."
|
|
2154
|
+
action_add: "Agregar modelo"
|
|
2155
|
+
action_remove: "Quitar"
|
|
2156
|
+
confirm_remove: "¿Quitar {model_key} de este espacio de trabajo? Las personas de acá dejan de poder elegirlo."
|
|
2157
|
+
add_title: "Agregar un modelo"
|
|
2158
|
+
add_hint: "La clave tiene que coincidir exactamente con lo que espera el proveedor. Esta instalación no factura a nadie, así que no hay precio que definir."
|
|
2159
|
+
add_success: "Modelo agregado y disponible."
|
|
2160
|
+
remove_success: "Modelo quitado."
|
|
2161
|
+
key_required: "La clave del modelo es obligatoria."
|
|
2162
|
+
title: "Modelos"
|
|
2163
|
+
subtitle: "Elige qué modelos de IA puede usar este espacio de trabajo, y con qué API key se pagan."
|
|
2164
|
+
empty_state: "Todavía no hay modelos disponibles. Tu contacto en IAToolkit los publica."
|
|
2165
|
+
col_model: "Modelo"
|
|
2166
|
+
col_cost: "Costo"
|
|
2167
|
+
col_key: "API key"
|
|
2168
|
+
col_enabled: "Habilitado"
|
|
2169
|
+
cost_metered: "Con medición"
|
|
2170
|
+
cost_not_billable: "Sin costo"
|
|
2171
|
+
cost_own_key: "Lo factura tu proveedor"
|
|
2172
|
+
key_platform: "Incluida"
|
|
2173
|
+
label_default: "Por defecto"
|
|
2174
|
+
label_enabled: "Habilitado"
|
|
2175
|
+
label_disabled: "No habilitado"
|
|
2176
|
+
action_configure: "Configurar"
|
|
2177
|
+
action_enable: "Habilitar"
|
|
2178
|
+
modal_title: "Configuración del modelo"
|
|
2179
|
+
form_enabled: "Disponible en este espacio de trabajo"
|
|
2180
|
+
form_enabled_hint: "Las personas de aquí podrán elegir este modelo al iniciar una conversación."
|
|
2181
|
+
form_is_default: "Usar como modelo por defecto"
|
|
2182
|
+
form_credential_owner: "Con qué API key funciona"
|
|
2183
|
+
form_owner_platform: "La key incluida con IAToolkit"
|
|
2184
|
+
form_owner_platform_hint: "El consumo se mide y aparece en tu factura."
|
|
2185
|
+
form_owner_company: "Una key propia"
|
|
2186
|
+
form_owner_company_hint: "Tu proveedor te factura directo, así que este consumo nunca llega a tu factura de IAToolkit."
|
|
2187
|
+
form_secret_key_name: "Key almacenada a usar"
|
|
2188
|
+
form_secret_hint: "Las keys se agregan y rotan en Administración → Secretos, donde quedan encriptadas. Esta pantalla solo apunta a una por su nombre."
|
|
2189
|
+
not_billable_note: "Este modelo no tiene costo de ejecución, así que no aparece en ninguna factura sin importar con qué key funcione."
|
|
2190
|
+
secret_required: "Elige la key almacenada que debe usar este modelo."
|
|
2191
|
+
load_error: "No se pudieron cargar los modelos."
|
|
2192
|
+
save_error: "No se pudo guardar el modelo."
|
|
2193
|
+
save_success: "Modelo actualizado."
|
|
2194
|
+
reasoning_applies_to: "Aplica a {model}"
|
|
2195
|
+
form_secret_value: "Tu key del proveedor"
|
|
2196
|
+
secret_hint_new: "Se guarda cifrada para este proveedor. Tu proveedor te factura directamente."
|
|
2197
|
+
secret_hint_stored: "Ya hay una key guardada para este proveedor. Pegá otra para reemplazarla."
|
|
2147
2198
|
secrets:
|
|
2148
2199
|
title: "Secrets"
|
|
2149
2200
|
subtitle: "Administra los secrets de la empresa usados por integraciones y servicios."
|
|
@@ -2201,10 +2252,6 @@ ui:
|
|
|
2201
2252
|
company_name: "Nombre de la empresa"
|
|
2202
2253
|
short_name: "Nombre corto"
|
|
2203
2254
|
runtime_mode: "Modo runtime"
|
|
2204
|
-
model_card_title: "Modelo AI por defecto"
|
|
2205
|
-
model_card_desc: "Elige el modelo por defecto usado en la configuración de la empresa."
|
|
2206
|
-
default_model: "Modelo por defecto"
|
|
2207
|
-
model_card_helper: "Este modelo se usará como selección por defecto en runtime."
|
|
2208
2255
|
default_reasoning: "Razonamiento por defecto"
|
|
2209
2256
|
default_reasoning_auto: "Automático"
|
|
2210
2257
|
reasoning_card_helper: "Se aplica cuando el modelo y el provider seleccionados soportan este nivel de razonamiento. Los prompts igual pueden sobreescribirlo."
|
|
@@ -2219,7 +2266,6 @@ ui:
|
|
|
2219
2266
|
reasoning_effort_high: "Alto"
|
|
2220
2267
|
reasoning_effort_xhigh: "Muy alto"
|
|
2221
2268
|
branding_card_title: "Branding"
|
|
2222
|
-
branding_card_desc: "Ajusta los colores principales usados por la experiencia de la empresa."
|
|
2223
2269
|
primary_color: "Color primario"
|
|
2224
2270
|
secondary_color: "Color secundario"
|
|
2225
2271
|
preview: "Vista previa"
|
|
@@ -2242,6 +2288,7 @@ ui:
|
|
|
2242
2288
|
chat_context_preview_subtitle: "Vista lógica del contexto conversacional activo para este usuario."
|
|
2243
2289
|
chat_context_preview_block_label: "Contexto Enviado"
|
|
2244
2290
|
|
|
2291
|
+
runtime_defaults_card_title: "Valores por defecto en runtime"
|
|
2245
2292
|
rag:
|
|
2246
2293
|
ingestion: "Ingesta"
|
|
2247
2294
|
ingestion_description: "Ingestar documentos en la base de conocimiento."
|
|
@@ -208,7 +208,40 @@ class DatabaseManager(DatabaseProvider):
|
|
|
208
208
|
"""
|
|
209
209
|
Esta función se ejecuta cada vez que se establece una conexión.
|
|
210
210
|
dbapi_connection es la conexión psycopg2 real.
|
|
211
|
+
|
|
212
|
+
On a database that does not have the pgvector extension yet, this is
|
|
213
|
+
where a brand-new installation dies: ``register_vector`` raises "vector
|
|
214
|
+
type not found in the database" on the very first connection, before
|
|
215
|
+
``create_all`` has run and long before any CLI command can help. So the
|
|
216
|
+
extension is created here, once, and only after the lookup has already
|
|
217
|
+
failed — a database that has it pays nothing.
|
|
218
|
+
|
|
219
|
+
``CREATE EXTENSION`` needs a privileged role. When the connecting role
|
|
220
|
+
does not have it, the original error is raised with the statement to run
|
|
221
|
+
by hand, because there is nothing this process can do about it.
|
|
211
222
|
"""
|
|
223
|
+
try:
|
|
224
|
+
register_vector(dbapi_connection)
|
|
225
|
+
return
|
|
226
|
+
except Exception as exc:
|
|
227
|
+
logging.info("pgvector is not registered yet on this database: %s", exc)
|
|
228
|
+
|
|
229
|
+
try:
|
|
230
|
+
# The failed lookup left a transaction open, and psycopg2 refuses to
|
|
231
|
+
# switch autocommit inside one — so end it and commit explicitly
|
|
232
|
+
# instead of touching the connection's mode.
|
|
233
|
+
dbapi_connection.rollback()
|
|
234
|
+
with dbapi_connection.cursor() as cursor:
|
|
235
|
+
cursor.execute("CREATE EXTENSION IF NOT EXISTS vector")
|
|
236
|
+
dbapi_connection.commit()
|
|
237
|
+
logging.info("Created the pgvector extension on this database.")
|
|
238
|
+
except Exception as exc:
|
|
239
|
+
raise RuntimeError(
|
|
240
|
+
"This database does not have the pgvector extension and the "
|
|
241
|
+
f"connecting role could not create it ({exc}). Run this once as "
|
|
242
|
+
"a privileged role: CREATE EXTENSION IF NOT EXISTS vector;"
|
|
243
|
+
) from exc
|
|
244
|
+
|
|
212
245
|
register_vector(dbapi_connection)
|
|
213
246
|
|
|
214
247
|
def get_session(self):
|
|
@@ -149,6 +149,7 @@ class KnowledgeWikiRepo:
|
|
|
149
149
|
body_text: str | None = None,
|
|
150
150
|
status: KnowledgeWikiPageStatus = KnowledgeWikiPageStatus.PUBLISHED,
|
|
151
151
|
tags: list[str] | None = None,
|
|
152
|
+
access_tags: list[str] | None = None,
|
|
152
153
|
owner: str | None = None,
|
|
153
154
|
source_meta: dict | None = None,
|
|
154
155
|
last_synced_at: datetime | None = None,
|
|
@@ -166,6 +167,11 @@ class KnowledgeWikiRepo:
|
|
|
166
167
|
page.source_storage_key = source_storage_key
|
|
167
168
|
page.status = status
|
|
168
169
|
page.tags = tags or []
|
|
170
|
+
# None means "leave the stored labels alone": a wiki with no access
|
|
171
|
+
# manifest must not lose its labels because a page's markdown changed.
|
|
172
|
+
# An empty list is a real value and does clear them.
|
|
173
|
+
if access_tags is not None:
|
|
174
|
+
page.access_tags = list(access_tags)
|
|
169
175
|
page.owner = owner
|
|
170
176
|
page.source_meta = source_meta or {}
|
|
171
177
|
page.last_synced_at = last_synced_at
|
|
@@ -181,6 +187,7 @@ class KnowledgeWikiRepo:
|
|
|
181
187
|
source_storage_key=source_storage_key,
|
|
182
188
|
status=status,
|
|
183
189
|
tags=tags or [],
|
|
190
|
+
access_tags=list(access_tags or []),
|
|
184
191
|
owner=owner,
|
|
185
192
|
source_meta=source_meta or {},
|
|
186
193
|
last_synced_at=last_synced_at,
|