iatoolkit 2.56.0__tar.gz → 2.58.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.56.0/src/iatoolkit.egg-info → iatoolkit-2.58.0}/PKG-INFO +1 -1
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/__init__.py +1 -1
- iatoolkit-2.58.0/src/iatoolkit/base_company.py +48 -0
- iatoolkit-2.58.0/src/iatoolkit/common/company_paths.py +25 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/routes.py +13 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/util.py +2 -1
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/core.py +28 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +23 -12
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/filesystem_asset_repository.py +2 -1
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/llm_query_repo.py +8 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/models.py +10 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/history_manager_service.py +2 -1
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/llm_client_service.py +356 -137
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/query_service.py +11 -0
- iatoolkit-2.58.0/src/iatoolkit/static/images/favicon.ico +0 -0
- iatoolkit-2.58.0/src/iatoolkit/static/images/favicon.png +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/base.html +1 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit.egg-info/SOURCES.txt +3 -0
- iatoolkit-2.56.0/src/iatoolkit/base_company.py +0 -21
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/LICENSE +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/pyproject.toml +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/readme.md +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/setup.cfg +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/text_splitter.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/common/url_safety.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/llm_response.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/locales/en.yaml +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/locales/es.yaml +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/dispatcher_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/memory_lint_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/operator_identity_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/tool_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_header_navigation.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/styles/account.css +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/_chat_header.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/login_global.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Copyright (c) 2024 Fernando Libedinsky
|
|
2
|
+
# Product: IAToolkit
|
|
3
|
+
#
|
|
4
|
+
# IAToolkit is open source software.
|
|
5
|
+
|
|
6
|
+
# companies/base_company.py
|
|
7
|
+
from abc import ABC, abstractmethod
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Optional
|
|
10
|
+
|
|
11
|
+
from flask import Blueprint
|
|
12
|
+
|
|
13
|
+
class BaseCompany(ABC):
|
|
14
|
+
|
|
15
|
+
@abstractmethod
|
|
16
|
+
# execute the specific action configured in the intent table
|
|
17
|
+
def handle_request(self, tag: str, params: dict) -> dict:
|
|
18
|
+
raise NotImplementedError("La subclase debe implementar el método handle_request()")
|
|
19
|
+
|
|
20
|
+
def register_cli_commands(self, app):
|
|
21
|
+
# Optional extension point. Community/Enterprise can override as needed.
|
|
22
|
+
return None
|
|
23
|
+
|
|
24
|
+
def get_blueprint(self) -> Optional[Blueprint]:
|
|
25
|
+
"""
|
|
26
|
+
Optional extension point: the web routes, templates and static files this
|
|
27
|
+
company owns. The core registers the blueprint at boot for every company
|
|
28
|
+
that is loaded, so the host application never imports a company's views.
|
|
29
|
+
|
|
30
|
+
The blueprint must be named after the company short name: that name is
|
|
31
|
+
the namespace of its endpoints (``url_for('<company>.<endpoint>')``).
|
|
32
|
+
URLs are not prefixed by the core; the company chooses them.
|
|
33
|
+
"""
|
|
34
|
+
return None
|
|
35
|
+
|
|
36
|
+
@classmethod
|
|
37
|
+
def get_resource_root(cls) -> Optional[Path]:
|
|
38
|
+
"""
|
|
39
|
+
Directory that holds this company's files (config, prompts, schemas,
|
|
40
|
+
context, templates). ``None`` keeps the classic layout,
|
|
41
|
+
``companies/<company_short_name>`` under the working directory. A company
|
|
42
|
+
installed as a package returns its own directory, usually
|
|
43
|
+
``Path(__file__).resolve().parent``.
|
|
44
|
+
"""
|
|
45
|
+
return None
|
|
46
|
+
|
|
47
|
+
def unsupported_operation(self, tag):
|
|
48
|
+
raise NotImplementedError(f"La operación '{tag}' no está soportada por esta empresa.")
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Copyright (c) 2024 Fernando Libedinsky
|
|
2
|
+
# Product: IAToolkit
|
|
3
|
+
#
|
|
4
|
+
# IAToolkit is open source software.
|
|
5
|
+
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def get_company_root(company_short_name: str) -> Path:
|
|
10
|
+
"""
|
|
11
|
+
Directory that holds a company's files: config, prompts, schemas, context,
|
|
12
|
+
templates.
|
|
13
|
+
|
|
14
|
+
A company module installed as a package declares it through
|
|
15
|
+
``BaseCompany.get_resource_root()``. Every other company keeps the classic
|
|
16
|
+
layout, ``companies/<company_short_name>`` relative to the working directory,
|
|
17
|
+
which is why that is the fallback and not an error.
|
|
18
|
+
"""
|
|
19
|
+
from iatoolkit.company_registry import get_registered_companies
|
|
20
|
+
|
|
21
|
+
company_class = get_registered_companies().get((company_short_name or "").lower())
|
|
22
|
+
root = company_class.get_resource_root() if company_class else None
|
|
23
|
+
if root:
|
|
24
|
+
return Path(root)
|
|
25
|
+
return Path("companies") / company_short_name
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
from io import BytesIO
|
|
7
7
|
import mimetypes
|
|
8
|
+
import os
|
|
8
9
|
from flask import render_template, redirect, url_for, current_app, abort, send_file
|
|
9
10
|
from flask import jsonify
|
|
10
11
|
from iatoolkit.common.exceptions import IAToolkitException
|
|
@@ -59,6 +60,18 @@ def register_views(app):
|
|
|
59
60
|
# must stay reachable even if the company registry or DB is degraded.
|
|
60
61
|
app.add_url_rule('/', endpoint='liveness', view_func=lambda: ("ok", 200))
|
|
61
62
|
|
|
63
|
+
# Browsers and MCP clients (Claude shows it as the connector icon) ask the
|
|
64
|
+
# host for /favicon.ico regardless of the page.
|
|
65
|
+
app.add_url_rule(
|
|
66
|
+
'/favicon.ico',
|
|
67
|
+
endpoint='favicon',
|
|
68
|
+
view_func=lambda: send_file(
|
|
69
|
+
os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'static', 'images', 'favicon.ico'),
|
|
70
|
+
mimetype='image/vnd.microsoft.icon',
|
|
71
|
+
max_age=86400,
|
|
72
|
+
),
|
|
73
|
+
)
|
|
74
|
+
|
|
62
75
|
# assign root '/' to our new redirect logic
|
|
63
76
|
app.add_url_rule('/home', view_func=RootRedirectView.as_view('root_redirect'))
|
|
64
77
|
|
|
@@ -98,7 +98,8 @@ class Utility:
|
|
|
98
98
|
|
|
99
99
|
def get_company_template(self, company_short_name: str, template_name: str) -> str:
|
|
100
100
|
# 1. get the path to the company specific template
|
|
101
|
-
|
|
101
|
+
from iatoolkit.common.company_paths import get_company_root
|
|
102
|
+
template_path = os.path.join(os.getcwd(), str(get_company_root(company_short_name) / 'templates' / template_name))
|
|
102
103
|
if not os.path.exists(template_path):
|
|
103
104
|
return None
|
|
104
105
|
|
|
@@ -114,6 +114,9 @@ class IAToolkit:
|
|
|
114
114
|
# Step 7: load company configuration file
|
|
115
115
|
self._hydrate_company_configuration()
|
|
116
116
|
|
|
117
|
+
# Step 7b: web routes, templates and static files owned by each company
|
|
118
|
+
self._register_company_blueprints()
|
|
119
|
+
|
|
117
120
|
# Step 8: Finalize setup within the application context
|
|
118
121
|
self._setup_redis_sessions()
|
|
119
122
|
|
|
@@ -560,6 +563,31 @@ class IAToolkit:
|
|
|
560
563
|
logging.error(f"❌ Failed to register configuration for '{company_short_name}': {e}")
|
|
561
564
|
raise e
|
|
562
565
|
|
|
566
|
+
def _register_company_blueprints(self):
|
|
567
|
+
from iatoolkit.company_registry import get_company_registry
|
|
568
|
+
|
|
569
|
+
registered = []
|
|
570
|
+
for company_short_name, company_instance in get_company_registry().get_all_company_instances().items():
|
|
571
|
+
blueprint = company_instance.get_blueprint()
|
|
572
|
+
if blueprint is None:
|
|
573
|
+
continue
|
|
574
|
+
# The blueprint name is the namespace of the company's endpoints, so
|
|
575
|
+
# it must be the company itself: anything else could collide with
|
|
576
|
+
# another tenant or with the platform.
|
|
577
|
+
if blueprint.name != company_short_name:
|
|
578
|
+
raise RuntimeError(
|
|
579
|
+
f"Company '{company_short_name}' returned a blueprint named "
|
|
580
|
+
f"'{blueprint.name}'; it must be named '{company_short_name}'."
|
|
581
|
+
)
|
|
582
|
+
self.app.register_blueprint(blueprint)
|
|
583
|
+
registered.append(company_short_name)
|
|
584
|
+
|
|
585
|
+
if registered:
|
|
586
|
+
# FlaskInjector wraps the views that exist when it runs, and the first
|
|
587
|
+
# pass ran before any company was loaded.
|
|
588
|
+
FlaskInjector(app=self.app, injector=self._injector)
|
|
589
|
+
logging.info(f"✅ Company blueprints registered: {', '.join(registered)}")
|
|
590
|
+
|
|
563
591
|
def _setup_cli_commands(self):
|
|
564
592
|
from iatoolkit.cli_commands import register_core_commands
|
|
565
593
|
from iatoolkit.company_registry import get_company_registry
|
|
@@ -700,23 +700,34 @@ class GeminiAdapter:
|
|
|
700
700
|
return {}
|
|
701
701
|
|
|
702
702
|
def _extract_usage_metadata(self, gemini_response) -> Usage:
|
|
703
|
-
"""Extraer información de uso de tokens de manera segura
|
|
703
|
+
"""Extraer información de uso de tokens de manera segura.
|
|
704
|
+
|
|
705
|
+
Gemini reports the tokens it bills in four counters. `candidates_token_count`
|
|
706
|
+
excludes the model's reasoning (`thoughts_token_count`), which Google bills as
|
|
707
|
+
output, and `prompt_token_count` excludes the results of its built-in tools
|
|
708
|
+
(`tool_use_prompt_token_count`), billed as input. Reading only the first two
|
|
709
|
+
priced every thinking model's reasoning at zero.
|
|
710
|
+
"""
|
|
704
711
|
input_tokens = 0
|
|
705
712
|
output_tokens = 0
|
|
706
713
|
total_tokens = 0
|
|
707
714
|
|
|
715
|
+
def _count(metadata, name: str) -> int:
|
|
716
|
+
value = getattr(metadata, name, None)
|
|
717
|
+
return value if isinstance(value, int) and value > 0 else 0
|
|
718
|
+
|
|
708
719
|
try:
|
|
709
|
-
|
|
710
|
-
if
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
+
usage_metadata = getattr(gemini_response, 'usage_metadata', None)
|
|
721
|
+
if usage_metadata:
|
|
722
|
+
input_tokens = (
|
|
723
|
+
_count(usage_metadata, 'prompt_token_count')
|
|
724
|
+
+ _count(usage_metadata, 'tool_use_prompt_token_count')
|
|
725
|
+
)
|
|
726
|
+
output_tokens = (
|
|
727
|
+
_count(usage_metadata, 'candidates_token_count')
|
|
728
|
+
+ _count(usage_metadata, 'thoughts_token_count')
|
|
729
|
+
)
|
|
730
|
+
total_tokens = _count(usage_metadata, 'total_token_count')
|
|
720
731
|
|
|
721
732
|
except Exception as e:
|
|
722
733
|
logging.warning(f"No se pudo extraer usage_metadata de Gemini: {e}")
|
{iatoolkit-2.56.0 → iatoolkit-2.58.0}/src/iatoolkit/repositories/filesystem_asset_repository.py
RENAMED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
from iatoolkit.common.interfaces.asset_storage import AssetRepository, AssetType
|
|
2
|
+
from iatoolkit.common.company_paths import get_company_root
|
|
2
3
|
from pathlib import Path
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
class FileSystemAssetRepository(AssetRepository):
|
|
6
7
|
def _get_path(self, company_short_name: str, asset_type: AssetType, filename: str = "") -> Path:
|
|
7
|
-
return
|
|
8
|
+
return get_company_root(company_short_name) / asset_type.value / filename
|
|
8
9
|
|
|
9
10
|
def exists(self, company_short_name: str, asset_type: AssetType, filename: str) -> bool:
|
|
10
11
|
return self._get_path(company_short_name, asset_type, filename).is_file()
|
|
@@ -14,6 +14,7 @@ from iatoolkit.repositories.models import (
|
|
|
14
14
|
from injector import inject
|
|
15
15
|
from iatoolkit.repositories.database_manager import DatabaseManager
|
|
16
16
|
from sqlalchemy import or_, and_
|
|
17
|
+
from iatoolkit.repositories.models import CONTEXT_INIT_REQUEST_SOURCE
|
|
17
18
|
from typing import List
|
|
18
19
|
|
|
19
20
|
|
|
@@ -34,10 +35,17 @@ class LLMQueryRepo:
|
|
|
34
35
|
self.session.commit()
|
|
35
36
|
return query
|
|
36
37
|
|
|
38
|
+
@staticmethod
|
|
39
|
+
def not_context_init():
|
|
40
|
+
"""Filter for rows that are a conversation turn, not a context initialization."""
|
|
41
|
+
request_source = LLMQuery.stats["request_source"].as_string()
|
|
42
|
+
return or_(request_source.is_(None), request_source != CONTEXT_INIT_REQUEST_SOURCE)
|
|
43
|
+
|
|
37
44
|
# get user query history
|
|
38
45
|
def get_history(self, company: Company, user_identifier: str, limit: int = 100) -> list[LLMQuery]:
|
|
39
46
|
return self.session.query(LLMQuery).filter(
|
|
40
47
|
LLMQuery.user_identifier == user_identifier,
|
|
48
|
+
self.not_context_init(),
|
|
41
49
|
).filter_by(company_id=company.id).order_by(LLMQuery.created_at.desc()).limit(limit).all()
|
|
42
50
|
|
|
43
51
|
|
|
@@ -593,6 +593,12 @@ class MemoryPageSource(Base):
|
|
|
593
593
|
return {column.key: getattr(self, column.key) for column in class_mapper(self.__class__).columns}
|
|
594
594
|
|
|
595
595
|
|
|
596
|
+
#: request_source of the iat_queries row that records a context initialization:
|
|
597
|
+
#: the company context sent once to start a server-side conversation. Its tokens
|
|
598
|
+
#: are billed, but it is not a question, so conversation readers skip it.
|
|
599
|
+
CONTEXT_INIT_REQUEST_SOURCE = "context_init"
|
|
600
|
+
|
|
601
|
+
|
|
596
602
|
class LLMQuery(Base):
|
|
597
603
|
"""Logs a query made to the LLM, including input, output, and metadata."""
|
|
598
604
|
__tablename__ = 'iat_queries'
|
|
@@ -622,6 +628,10 @@ class LLMQuery(Base):
|
|
|
622
628
|
|
|
623
629
|
__table_args__ = (
|
|
624
630
|
Index('ix_iat_queries_company_prompt_created', 'company_id', 'prompt_name', 'created_at'),
|
|
631
|
+
# Executions that did not run as a task (synchronous agent calls). They are a
|
|
632
|
+
# tiny fraction of the table, which the Agents monitor would otherwise scan whole.
|
|
633
|
+
Index('ix_iat_queries_company_created_untasked', company_id, created_at.desc(),
|
|
634
|
+
postgresql_where=task_id.is_(None)),
|
|
625
635
|
)
|
|
626
636
|
|
|
627
637
|
company = relationship("Company", back_populates="llm_queries")
|
|
@@ -60,7 +60,8 @@ class HistoryManagerService:
|
|
|
60
60
|
response_id = self.llm_client.set_company_context(
|
|
61
61
|
company=company,
|
|
62
62
|
company_base_context=prepared_context,
|
|
63
|
-
model=model
|
|
63
|
+
model=model,
|
|
64
|
+
user_identifier=user_identifier,
|
|
64
65
|
)
|
|
65
66
|
self.session_context.save_last_response_id(company_short_name, user_identifier, response_id, model=model)
|
|
66
67
|
self.session_context.save_initial_response_id(company_short_name, user_identifier, response_id, model=model)
|