iatoolkit 2.45.1__tar.gz → 2.45.3__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.45.1/src/iatoolkit.egg-info → iatoolkit-2.45.3}/PKG-INFO +1 -1
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/__init__.py +1 -1
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/llm_providers/openai_compatible_chat_adapter.py +5 -0
- iatoolkit-2.45.3/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +155 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/llm_response.py +4 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/llm_client_service.py +97 -3
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/operator_identity_service.py +18 -8
- {iatoolkit-2.45.1 → iatoolkit-2.45.3/src/iatoolkit.egg-info}/PKG-INFO +1 -1
- iatoolkit-2.45.1/src/iatoolkit/infra/llm_providers/openrouter_adapter.py +0 -65
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/LICENSE +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/LICENSE_COMMUNITY.md +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/pyproject.toml +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/readme.md +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/requirements.txt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/setup.cfg +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/base_company.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/cli_commands.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/bridge_validation.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/exceptions.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/asset_storage.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/database_provider.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/memory_lint_trigger.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/secret_provider.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/signup_policy_resolver.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/web_search_provider.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/model_registry.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/routes.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/secret_resolver.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/session_manager.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/util.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/company_registry.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/llm_capabilities.yaml +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/channel_business_identity.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/channel_conversation_continuity.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/channel_response_style.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/core_identity.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/email_output.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/file_download_output.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/format_styles.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/html_structures.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/links_documents.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/memory_usage.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/output_basics.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/presentation_formatting.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/query_main.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_aggregation_scope.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_casting.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_core.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_jsonb.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_rules.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/tool_html_passthrough.prompt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts_pack.yaml +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_tools_pack.yaml +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/core.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/brevo_mail_app.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/call_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/connectors/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/google_auth_client.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/google_chat_app.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/inference_embeddings_client.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/inference_handler.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/jina_embeddings_client.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/llm_gateway_resolver.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/llm_providers/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/llm_providers/anthropic_adapter.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/llm_providers/deepseek_adapter.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/llm_providers/gemini_adapter.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/llm_providers/openai_adapter.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/llm_proxy.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/redis_session_manager.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/locales/en.yaml +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/locales/es.yaml +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/api_key_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/bridge_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/database_manager.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/document_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/env_secret_provider.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/filesystem_asset_repository.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/knowledge_wiki_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/mcp_token_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/memory_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/models.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/profile_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/prompt_resource_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/sql_dataset_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/sql_source_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/repositories/vs_repo.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/runtime_logging.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/api_key_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/attachment_policy_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/auth_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/benchmark_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/branding_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/company_context_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/configuration_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/context_builder_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/dispatcher_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/embedding_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/excel_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/file_processor_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/history_manager_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/http_tool_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/i18n_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/inference_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/jwt_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/knowledge_base_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/language_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/license_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/mail_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/markdown_wiki_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/mcp_token_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/memory_compiler_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/memory_lint_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/memory_lookup_policy_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/memory_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/memory_wiki_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/noop_memory_compilation_trigger.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/noop_memory_lint_trigger.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/contracts.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/image_normalizer.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/parsing_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/pdf_ocr_detection.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/provider_factory.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/provider_resolver.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/providers/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/providers/basic_provider.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/providers/docling_provider.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/parsers/validator.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/pdf_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/profile_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/prompt_resource_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/prompt_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/query_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/signup_policy_resolver.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/sql_dataset_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/sql_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/sql_source_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/storage_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/structured_output_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/system_prompt_catalog.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/system_tools.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/telemetry_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/tenant_wiki_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/tool_output_contract.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/tool_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/user_feedback_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/user_session_context_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/visual_kb_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/visual_tool_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/warmup_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/web_search/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/web_search/provider_factory.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/web_search/providers/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/web_search/providers/brave_provider.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/services/web_search_service.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/images/fernando.jpeg +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/images/iatoolkit_core.png +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/images/iatoolkit_logo.png +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_feedback_button.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_filepond.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_help_content.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_history_button.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_logout_button.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_main.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_memory_button.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_model_selector.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_onboarding_button.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_prompt_manager.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/js/chat_reload_button.js +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/styles/chat_modal.css +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/styles/chat_public.css +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/styles/documents.css +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/styles/landing_page.css +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/styles/llm_output.css +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/static/styles/onboarding.css +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/_company_header.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/_login_widget.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/account.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/base.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/change_password.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/chat.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/chat_memory_modal.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/chat_modals.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/error.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/forgot_password.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/home_hosted_default.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/memory/wiki_schema.md +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/onboarding_shell.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/pdf/base.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/pdf/letter.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/pdf/report.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/pdf/simple.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/templates/signup.html +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/__init__.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/account_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/api_key_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/base_login_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/categories_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/change_password_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/chat_context_preview_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/chat_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/configuration_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/connectors_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/embedding_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/forgot_password_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/help_content_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/history_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/home_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/init_context_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/llmquery_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/load_document_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/login_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/logout_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/memory_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/profile_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/prompt_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/prompt_context_preview_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/prompt_resource_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/rag_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/root_redirect_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/signup_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/static_page_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/tool_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/user_feedback_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/users_api_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/views/verify_user_view.py +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit.egg-info/requires.txt +0 -0
- {iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit.egg-info/top_level.txt +0 -0
|
@@ -744,6 +744,7 @@ class OpenAICompatibleChatAdapter:
|
|
|
744
744
|
reasoning_content=reasoning_content,
|
|
745
745
|
reasoning_details=reasoning_details,
|
|
746
746
|
content_parts=content_parts,
|
|
747
|
+
provider_metadata=self._extract_provider_metadata(response),
|
|
747
748
|
)
|
|
748
749
|
|
|
749
750
|
# Backward-compatible alias retained while the old DeepSeek-specific name
|
|
@@ -831,3 +832,7 @@ class OpenAICompatibleChatAdapter:
|
|
|
831
832
|
if type(value).__module__.startswith("unittest.mock"):
|
|
832
833
|
return ""
|
|
833
834
|
return str(value or "").strip()
|
|
835
|
+
|
|
836
|
+
def _extract_provider_metadata(self, response: Any) -> Dict[str, Any]:
|
|
837
|
+
_ = response
|
|
838
|
+
return {}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Copyright (c) 2024 Fernando Libedinsky
|
|
2
|
+
# Product: IAToolkit
|
|
3
|
+
#
|
|
4
|
+
# IAToolkit is open source software.
|
|
5
|
+
|
|
6
|
+
from typing import Any, Dict
|
|
7
|
+
|
|
8
|
+
from iatoolkit.infra.llm_providers.openai_compatible_chat_adapter import OpenAICompatibleChatAdapter
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class OpenRouterAdapter(OpenAICompatibleChatAdapter):
|
|
12
|
+
"""OpenRouter-specific adapter built on top of the shared chat.completions core."""
|
|
13
|
+
|
|
14
|
+
supports_multimodal = True
|
|
15
|
+
supports_reasoning = False
|
|
16
|
+
supports_reasoning_content_messages = True
|
|
17
|
+
supports_reasoning_details_messages = True
|
|
18
|
+
reasoning_content_message_field = "reasoning"
|
|
19
|
+
supports_metadata = True
|
|
20
|
+
supports_parallel_tool_calls = True
|
|
21
|
+
|
|
22
|
+
def __init__(self, openrouter_client):
|
|
23
|
+
super().__init__(openai_compatible_client=openrouter_client, provider_label="OpenRouter")
|
|
24
|
+
|
|
25
|
+
def _extend_call_kwargs(self, call_kwargs: Dict[str, Any], kwargs: Dict[str, Any]) -> None:
|
|
26
|
+
text = kwargs.get("text") or {}
|
|
27
|
+
verbosity = text.get("verbosity") if isinstance(text, dict) else None
|
|
28
|
+
if verbosity:
|
|
29
|
+
call_kwargs["verbosity"] = verbosity
|
|
30
|
+
|
|
31
|
+
passthrough_keys = (
|
|
32
|
+
"service_tier",
|
|
33
|
+
"temperature",
|
|
34
|
+
"top_p",
|
|
35
|
+
"max_tokens",
|
|
36
|
+
"max_completion_tokens",
|
|
37
|
+
"seed",
|
|
38
|
+
"stop",
|
|
39
|
+
"stream",
|
|
40
|
+
"stream_options",
|
|
41
|
+
"modalities",
|
|
42
|
+
"user",
|
|
43
|
+
)
|
|
44
|
+
for key in passthrough_keys:
|
|
45
|
+
if kwargs.get(key) is not None:
|
|
46
|
+
call_kwargs[key] = kwargs.get(key)
|
|
47
|
+
|
|
48
|
+
extra_body = dict(call_kwargs.get("extra_body") or {})
|
|
49
|
+
|
|
50
|
+
reasoning_payload = self._build_reasoning_payload(kwargs.get("reasoning"), kwargs)
|
|
51
|
+
if reasoning_payload:
|
|
52
|
+
extra_body["reasoning"] = reasoning_payload
|
|
53
|
+
|
|
54
|
+
vendor_specific_keys = (
|
|
55
|
+
"models",
|
|
56
|
+
"provider",
|
|
57
|
+
"plugins",
|
|
58
|
+
"session_id",
|
|
59
|
+
)
|
|
60
|
+
for key in vendor_specific_keys:
|
|
61
|
+
if kwargs.get(key) is not None:
|
|
62
|
+
extra_body[key] = kwargs.get(key)
|
|
63
|
+
|
|
64
|
+
if extra_body:
|
|
65
|
+
call_kwargs["extra_body"] = extra_body
|
|
66
|
+
|
|
67
|
+
def _extract_provider_metadata(self, response: Any) -> Dict[str, Any]:
|
|
68
|
+
raw_metadata = self._get_message_value(response, "openrouter_metadata")
|
|
69
|
+
metadata = self._normalize_metadata_object(raw_metadata)
|
|
70
|
+
|
|
71
|
+
provider_name = self._extract_provider_name(metadata)
|
|
72
|
+
if not provider_name:
|
|
73
|
+
provider_name = self._coerce_optional_text(
|
|
74
|
+
self._get_message_value(response, "provider_name")
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
provider_metadata: Dict[str, Any] = {"provider": "openrouter"}
|
|
78
|
+
if provider_name:
|
|
79
|
+
provider_metadata["provider_name"] = provider_name
|
|
80
|
+
if metadata:
|
|
81
|
+
provider_metadata["openrouter"] = metadata
|
|
82
|
+
|
|
83
|
+
return provider_metadata
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def _extract_provider_name(cls, metadata: Dict[str, Any]) -> str:
|
|
87
|
+
for key in ("provider_name", "provider", "upstream_provider", "selected_provider"):
|
|
88
|
+
value = metadata.get(key)
|
|
89
|
+
if isinstance(value, dict):
|
|
90
|
+
nested = cls._extract_provider_name(value)
|
|
91
|
+
if nested:
|
|
92
|
+
return nested
|
|
93
|
+
normalized = cls._coerce_optional_text(value)
|
|
94
|
+
if normalized:
|
|
95
|
+
return normalized
|
|
96
|
+
|
|
97
|
+
for value in metadata.values():
|
|
98
|
+
if isinstance(value, dict):
|
|
99
|
+
nested = cls._extract_provider_name(value)
|
|
100
|
+
if nested:
|
|
101
|
+
return nested
|
|
102
|
+
|
|
103
|
+
return ""
|
|
104
|
+
|
|
105
|
+
@classmethod
|
|
106
|
+
def _normalize_metadata_object(cls, value: Any) -> Dict[str, Any]:
|
|
107
|
+
if value is None or type(value).__module__.startswith("unittest.mock"):
|
|
108
|
+
return {}
|
|
109
|
+
|
|
110
|
+
if isinstance(value, dict):
|
|
111
|
+
return cls._sanitize_metadata_dict(value)
|
|
112
|
+
|
|
113
|
+
model_dump = getattr(value, "model_dump", None)
|
|
114
|
+
if callable(model_dump):
|
|
115
|
+
try:
|
|
116
|
+
dumped = model_dump()
|
|
117
|
+
if isinstance(dumped, dict):
|
|
118
|
+
return cls._sanitize_metadata_dict(dumped)
|
|
119
|
+
except Exception:
|
|
120
|
+
return {}
|
|
121
|
+
|
|
122
|
+
raw_dict = getattr(value, "__dict__", None)
|
|
123
|
+
if isinstance(raw_dict, dict):
|
|
124
|
+
return cls._sanitize_metadata_dict({
|
|
125
|
+
key: item
|
|
126
|
+
for key, item in raw_dict.items()
|
|
127
|
+
if not key.startswith("_") and not callable(item)
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
return {}
|
|
131
|
+
|
|
132
|
+
@classmethod
|
|
133
|
+
def _sanitize_metadata_dict(cls, metadata: Dict[str, Any]) -> Dict[str, Any]:
|
|
134
|
+
sanitized: Dict[str, Any] = {}
|
|
135
|
+
for key, value in dict(metadata or {}).items():
|
|
136
|
+
normalized_key = cls._coerce_optional_text(key)
|
|
137
|
+
if not normalized_key:
|
|
138
|
+
continue
|
|
139
|
+
|
|
140
|
+
if isinstance(value, dict):
|
|
141
|
+
sanitized_value = cls._sanitize_metadata_dict(value)
|
|
142
|
+
elif isinstance(value, list):
|
|
143
|
+
sanitized_value = [
|
|
144
|
+
cls._sanitize_metadata_dict(item) if isinstance(item, dict) else item
|
|
145
|
+
for item in value
|
|
146
|
+
if not type(item).__module__.startswith("unittest.mock")
|
|
147
|
+
]
|
|
148
|
+
elif type(value).__module__.startswith("unittest.mock"):
|
|
149
|
+
continue
|
|
150
|
+
else:
|
|
151
|
+
sanitized_value = value
|
|
152
|
+
|
|
153
|
+
sanitized[normalized_key] = sanitized_value
|
|
154
|
+
|
|
155
|
+
return sanitized
|
|
@@ -38,6 +38,7 @@ class LLMResponse:
|
|
|
38
38
|
# ordered list of content blocks (text and image mixed)
|
|
39
39
|
# Example: [{"type": "text", "text": "..."}, {"type": "image", "source": {"type": "base64", "data": "..."}}]
|
|
40
40
|
content_parts: List[Dict] = None
|
|
41
|
+
provider_metadata: Dict[str, Any] = None
|
|
41
42
|
|
|
42
43
|
def __post_init__(self):
|
|
43
44
|
"""Asegura que output sea una lista"""
|
|
@@ -56,3 +57,6 @@ class LLMResponse:
|
|
|
56
57
|
"type": "text",
|
|
57
58
|
"text": self.output_text
|
|
58
59
|
})
|
|
60
|
+
|
|
61
|
+
if self.provider_metadata is None:
|
|
62
|
+
self.provider_metadata = {}
|
|
@@ -404,7 +404,7 @@ class llmClient:
|
|
|
404
404
|
if key == "request_source":
|
|
405
405
|
continue
|
|
406
406
|
if value is not None:
|
|
407
|
-
combined_stats[key] = value
|
|
407
|
+
combined_stats[key] = self._compact_execution_metadata_for_stats(key, value)
|
|
408
408
|
|
|
409
409
|
# decode the LLM response
|
|
410
410
|
decoded_response = self.decode_response(response)
|
|
@@ -1255,17 +1255,111 @@ class llmClient:
|
|
|
1255
1255
|
"output_tokens": response.usage.output_tokens,
|
|
1256
1256
|
"total_tokens": response.usage.total_tokens
|
|
1257
1257
|
}
|
|
1258
|
+
provider_stats = self._build_provider_stats(getattr(response, "provider_metadata", None))
|
|
1259
|
+
if provider_stats:
|
|
1260
|
+
stats_dict.update(provider_stats)
|
|
1258
1261
|
return stats_dict
|
|
1259
1262
|
|
|
1260
|
-
|
|
1263
|
+
@staticmethod
|
|
1264
|
+
def _build_provider_stats(provider_metadata: dict | None) -> dict:
|
|
1265
|
+
if not isinstance(provider_metadata, dict) or not provider_metadata:
|
|
1266
|
+
return {}
|
|
1267
|
+
|
|
1268
|
+
provider = str(provider_metadata.get("provider") or "").strip()
|
|
1269
|
+
routed_provider = str(provider_metadata.get("provider_name") or "").strip()
|
|
1270
|
+
|
|
1271
|
+
stats: dict = {}
|
|
1272
|
+
if provider:
|
|
1273
|
+
stats["provider"] = provider
|
|
1274
|
+
if routed_provider:
|
|
1275
|
+
stats["routed_provider"] = routed_provider
|
|
1276
|
+
|
|
1277
|
+
openrouter_metadata = provider_metadata.get("openrouter")
|
|
1278
|
+
if isinstance(openrouter_metadata, dict) and openrouter_metadata:
|
|
1279
|
+
stats["openrouter"] = openrouter_metadata
|
|
1280
|
+
|
|
1281
|
+
provider_call = {}
|
|
1282
|
+
if provider:
|
|
1283
|
+
provider_call["provider"] = provider
|
|
1284
|
+
if routed_provider:
|
|
1285
|
+
provider_call["routed_provider"] = routed_provider
|
|
1286
|
+
if provider_call:
|
|
1287
|
+
stats["provider_calls"] = [provider_call]
|
|
1288
|
+
|
|
1289
|
+
return stats
|
|
1290
|
+
|
|
1291
|
+
@staticmethod
|
|
1292
|
+
def add_stats(stats1: dict, stats2: dict) -> dict:
|
|
1293
|
+
stats1 = dict(stats1 or {})
|
|
1294
|
+
stats2 = dict(stats2 or {})
|
|
1261
1295
|
stats_dict = {
|
|
1262
|
-
|
|
1296
|
+
**stats1,
|
|
1297
|
+
**stats2,
|
|
1298
|
+
"model": stats2.get('model') or stats1.get('model', ''),
|
|
1263
1299
|
"input_tokens": (stats1.get('input_tokens') or 0) + (stats2.get('input_tokens') or 0),
|
|
1264
1300
|
"output_tokens": (stats1.get('output_tokens') or 0) + (stats2.get('output_tokens') or 0),
|
|
1265
1301
|
"total_tokens": (stats1.get('total_tokens') or 0) + (stats2.get('total_tokens') or 0),
|
|
1266
1302
|
}
|
|
1303
|
+
provider_calls = []
|
|
1304
|
+
for stats in (stats1, stats2):
|
|
1305
|
+
for provider_call in stats.get("provider_calls") or []:
|
|
1306
|
+
if isinstance(provider_call, dict) and provider_call not in provider_calls:
|
|
1307
|
+
provider_calls.append(provider_call)
|
|
1308
|
+
if provider_calls:
|
|
1309
|
+
stats_dict["provider_calls"] = provider_calls
|
|
1267
1310
|
return stats_dict
|
|
1268
1311
|
|
|
1312
|
+
@classmethod
|
|
1313
|
+
def _compact_execution_metadata_for_stats(cls, key: str, value):
|
|
1314
|
+
if key == "tool_router":
|
|
1315
|
+
return cls._compact_tool_router_stats(value)
|
|
1316
|
+
return value
|
|
1317
|
+
|
|
1318
|
+
@staticmethod
|
|
1319
|
+
def _compact_tool_router_stats(metrics):
|
|
1320
|
+
if not isinstance(metrics, dict):
|
|
1321
|
+
return metrics
|
|
1322
|
+
|
|
1323
|
+
compact = {}
|
|
1324
|
+
scalar_keys = (
|
|
1325
|
+
"candidate_count",
|
|
1326
|
+
"selected_count",
|
|
1327
|
+
"selection_mode",
|
|
1328
|
+
"fallback_reason",
|
|
1329
|
+
"selector_latency_ms",
|
|
1330
|
+
"router_skipped",
|
|
1331
|
+
"hard_disable_tools",
|
|
1332
|
+
)
|
|
1333
|
+
for key in scalar_keys:
|
|
1334
|
+
if key in metrics:
|
|
1335
|
+
compact[key] = metrics.get(key)
|
|
1336
|
+
|
|
1337
|
+
list_count_keys = {
|
|
1338
|
+
"configured_tool_names": "configured_count",
|
|
1339
|
+
"matched_tool_names": "matched_count",
|
|
1340
|
+
"missing_tool_names": "missing_count",
|
|
1341
|
+
"forced_tool_names": "forced_count",
|
|
1342
|
+
"selected_system_prompt_keys": "selected_system_prompt_count",
|
|
1343
|
+
}
|
|
1344
|
+
for source_key, target_key in list_count_keys.items():
|
|
1345
|
+
value = metrics.get(source_key)
|
|
1346
|
+
if isinstance(value, list):
|
|
1347
|
+
compact[target_key] = len(value)
|
|
1348
|
+
|
|
1349
|
+
hook_metadata = metrics.get("hook_metadata")
|
|
1350
|
+
if isinstance(hook_metadata, dict):
|
|
1351
|
+
for key in ("top_k", "top_n", "min_confidence", "shadow_mode"):
|
|
1352
|
+
if key in hook_metadata:
|
|
1353
|
+
compact[key] = hook_metadata.get(key)
|
|
1354
|
+
selected_tool_names = hook_metadata.get("selected_tool_names")
|
|
1355
|
+
if isinstance(selected_tool_names, list):
|
|
1356
|
+
compact["hook_selected_count"] = len(selected_tool_names)
|
|
1357
|
+
ranked_tools_preview = hook_metadata.get("ranked_tools_preview")
|
|
1358
|
+
if isinstance(ranked_tools_preview, list):
|
|
1359
|
+
compact["ranked_preview_count"] = len(ranked_tools_preview)
|
|
1360
|
+
|
|
1361
|
+
return compact
|
|
1362
|
+
|
|
1269
1363
|
|
|
1270
1364
|
def _create_sql_retry_prompt(self, function_name: str, sql_query: str, db_error: str) -> str:
|
|
1271
1365
|
return f"""
|
|
@@ -39,6 +39,17 @@ class OperatorIdentityService:
|
|
|
39
39
|
SETTING_NAMES = ("IAT_OPERATOR_COMPANY", "IAT_BILLING_COMPANY_SHORT_NAME")
|
|
40
40
|
SETTING_NAME = SETTING_NAMES[0]
|
|
41
41
|
|
|
42
|
+
#: Held on the class, not the instance. Callers that have a repository at hand
|
|
43
|
+
#: build their own instance rather than asking the injector, so an instance
|
|
44
|
+
#: cache resolved — and logged, and queried the database — once per request
|
|
45
|
+
#: instead of once per process.
|
|
46
|
+
_resolved: str | None = None
|
|
47
|
+
|
|
48
|
+
@classmethod
|
|
49
|
+
def reset_cache(cls) -> None:
|
|
50
|
+
"""Forget the resolved name. For tests: it cannot change at runtime."""
|
|
51
|
+
OperatorIdentityService._resolved = None
|
|
52
|
+
|
|
42
53
|
@classmethod
|
|
43
54
|
def stated_name(cls) -> str:
|
|
44
55
|
"""What this deployment calls its operator, without checking it exists.
|
|
@@ -57,7 +68,6 @@ class OperatorIdentityService:
|
|
|
57
68
|
@inject
|
|
58
69
|
def __init__(self, profile_repo: ProfileRepo):
|
|
59
70
|
self.profile_repo = profile_repo
|
|
60
|
-
self._resolved: str | None = None
|
|
61
71
|
|
|
62
72
|
def company_short_name(self) -> str:
|
|
63
73
|
"""The operator company, resolved once per process.
|
|
@@ -65,24 +75,24 @@ class OperatorIdentityService:
|
|
|
65
75
|
Cached because the answer cannot change without a deployment, and this is
|
|
66
76
|
read on paths that run per request and per invoice.
|
|
67
77
|
"""
|
|
68
|
-
if
|
|
69
|
-
return
|
|
78
|
+
if OperatorIdentityService._resolved:
|
|
79
|
+
return OperatorIdentityService._resolved
|
|
70
80
|
|
|
71
81
|
for setting in self.SETTING_NAMES:
|
|
72
82
|
configured = (os.getenv(setting) or "").strip().lower()
|
|
73
83
|
if configured:
|
|
74
|
-
|
|
84
|
+
OperatorIdentityService._resolved = configured
|
|
75
85
|
logging.info("Operator company: '%s' (from %s).", configured, setting)
|
|
76
|
-
return
|
|
86
|
+
return configured
|
|
77
87
|
|
|
78
88
|
if self._company_exists(self.LEGACY_COMPANY_SHORT_NAME):
|
|
79
|
-
|
|
89
|
+
OperatorIdentityService._resolved = self.LEGACY_COMPANY_SHORT_NAME
|
|
80
90
|
logging.info(
|
|
81
91
|
"Operator company: '%s' (default). Set %s to name it explicitly.",
|
|
82
|
-
|
|
92
|
+
OperatorIdentityService._resolved,
|
|
83
93
|
self.SETTING_NAME,
|
|
84
94
|
)
|
|
85
|
-
return
|
|
95
|
+
return OperatorIdentityService._resolved
|
|
86
96
|
|
|
87
97
|
# Deliberately loud. The alternative is what used to happen: a name from
|
|
88
98
|
# another deployment travels down to the payment configuration and the
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2024 Fernando Libedinsky
|
|
2
|
-
# Product: IAToolkit
|
|
3
|
-
#
|
|
4
|
-
# IAToolkit is open source software.
|
|
5
|
-
|
|
6
|
-
from typing import Any, Dict
|
|
7
|
-
|
|
8
|
-
from iatoolkit.infra.llm_providers.openai_compatible_chat_adapter import OpenAICompatibleChatAdapter
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class OpenRouterAdapter(OpenAICompatibleChatAdapter):
|
|
12
|
-
"""OpenRouter-specific adapter built on top of the shared chat.completions core."""
|
|
13
|
-
|
|
14
|
-
supports_multimodal = True
|
|
15
|
-
supports_reasoning = False
|
|
16
|
-
supports_reasoning_content_messages = True
|
|
17
|
-
supports_reasoning_details_messages = True
|
|
18
|
-
reasoning_content_message_field = "reasoning"
|
|
19
|
-
supports_metadata = True
|
|
20
|
-
supports_parallel_tool_calls = True
|
|
21
|
-
|
|
22
|
-
def __init__(self, openrouter_client):
|
|
23
|
-
super().__init__(openai_compatible_client=openrouter_client, provider_label="OpenRouter")
|
|
24
|
-
|
|
25
|
-
def _extend_call_kwargs(self, call_kwargs: Dict[str, Any], kwargs: Dict[str, Any]) -> None:
|
|
26
|
-
text = kwargs.get("text") or {}
|
|
27
|
-
verbosity = text.get("verbosity") if isinstance(text, dict) else None
|
|
28
|
-
if verbosity:
|
|
29
|
-
call_kwargs["verbosity"] = verbosity
|
|
30
|
-
|
|
31
|
-
passthrough_keys = (
|
|
32
|
-
"service_tier",
|
|
33
|
-
"temperature",
|
|
34
|
-
"top_p",
|
|
35
|
-
"max_tokens",
|
|
36
|
-
"max_completion_tokens",
|
|
37
|
-
"seed",
|
|
38
|
-
"stop",
|
|
39
|
-
"stream",
|
|
40
|
-
"stream_options",
|
|
41
|
-
"modalities",
|
|
42
|
-
"user",
|
|
43
|
-
)
|
|
44
|
-
for key in passthrough_keys:
|
|
45
|
-
if kwargs.get(key) is not None:
|
|
46
|
-
call_kwargs[key] = kwargs.get(key)
|
|
47
|
-
|
|
48
|
-
extra_body = dict(call_kwargs.get("extra_body") or {})
|
|
49
|
-
|
|
50
|
-
reasoning_payload = self._build_reasoning_payload(kwargs.get("reasoning"), kwargs)
|
|
51
|
-
if reasoning_payload:
|
|
52
|
-
extra_body["reasoning"] = reasoning_payload
|
|
53
|
-
|
|
54
|
-
vendor_specific_keys = (
|
|
55
|
-
"models",
|
|
56
|
-
"provider",
|
|
57
|
-
"plugins",
|
|
58
|
-
"session_id",
|
|
59
|
-
)
|
|
60
|
-
for key in vendor_specific_keys:
|
|
61
|
-
if kwargs.get(key) is not None:
|
|
62
|
-
extra_body[key] = kwargs.get(key)
|
|
63
|
-
|
|
64
|
-
if extra_body:
|
|
65
|
-
call_kwargs["extra_body"] = extra_body
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/memory_compilation_trigger.py
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/memory_lint_trigger.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/signup_policy_resolver.py
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/common/interfaces/web_search_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/chat_state_rules.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/chat_user_profile.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/core_identity.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/email_output.prompt
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/format_styles.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/html_structures.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/links_documents.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/memory_usage.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/multimodal_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/output_basics.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_casting.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_mysql_casting.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_mysql_json.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_redshift_basics.prompt
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/config/system_prompts/sql_redshift_types.prompt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/connectors/file_connector_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/connectors/google_drive_connector.py
RENAMED
|
File without changes
|
{iatoolkit-2.45.1 → iatoolkit-2.45.3}/src/iatoolkit/infra/connectors/local_file_connector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|