holmesgpt 0.14.3a0__tar.gz → 0.15.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.

Potentially problematic release.


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

Files changed (252) hide show
  1. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/PKG-INFO +3 -1
  2. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/__init__.py +1 -1
  3. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/clients/robusta_client.py +12 -10
  4. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/common/env_vars.py +14 -0
  5. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/config.py +51 -4
  6. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/conversations.py +3 -2
  7. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/llm.py +198 -72
  8. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/openai_formatting.py +13 -0
  9. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/tool_calling_llm.py +129 -95
  10. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/tools.py +21 -1
  11. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/tools_utils/token_counting.py +2 -1
  12. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/tools_utils/tool_context_window_limiter.py +13 -4
  13. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/interactive.py +17 -7
  14. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/_general_instructions.jinja2 +1 -2
  15. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/__init__.py +4 -0
  16. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/atlas_mongodb/mongodb_atlas.py +0 -1
  17. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/azure_sql_toolset.py +0 -1
  18. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/grafana_api.py +1 -1
  19. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/investigator/core_investigation.py +14 -13
  20. holmesgpt-0.15.0/holmes/plugins/toolsets/opensearch/opensearch_ppl_query_docs.jinja2 +1616 -0
  21. holmesgpt-0.15.0/holmes/plugins/toolsets/opensearch/opensearch_query_assist.py +78 -0
  22. holmesgpt-0.15.0/holmes/plugins/toolsets/opensearch/opensearch_query_assist_instructions.jinja2 +223 -0
  23. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/prometheus/prometheus.py +7 -4
  24. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/service_discovery.py +1 -1
  25. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/servicenow/servicenow.py +0 -1
  26. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/stream.py +30 -1
  27. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/pyproject.toml +3 -1
  28. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/LICENSE.txt +0 -0
  29. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/README.md +0 -0
  30. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/.git_archival.json +0 -0
  31. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/common/openshift.py +0 -0
  32. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/__init__.py +0 -0
  33. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/config.py +0 -0
  34. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/feedback.py +0 -0
  35. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/investigation.py +0 -0
  36. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/investigation_structured_output.py +0 -0
  37. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/issue.py +0 -0
  38. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/models.py +0 -0
  39. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/performance_timing.py +0 -0
  40. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/prompt.py +0 -0
  41. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/resource_instruction.py +0 -0
  42. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/runbooks.py +0 -0
  43. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/safeguards.py +0 -0
  44. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/supabase_dal.py +0 -0
  45. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/todo_tasks_formatter.py +0 -0
  46. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/tools_utils/__init__.py +0 -0
  47. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/tools_utils/tool_executor.py +0 -0
  48. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/tools_utils/toolset_utils.py +0 -0
  49. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/toolset_manager.py +0 -0
  50. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/tracing.py +0 -0
  51. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/transformers/__init__.py +0 -0
  52. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/transformers/base.py +0 -0
  53. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/transformers/llm_summarize.py +0 -0
  54. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/transformers/registry.py +0 -0
  55. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/transformers/transformer.py +0 -0
  56. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/core/truncation/dal_truncation_utils.py +0 -0
  57. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/main.py +0 -0
  58. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/__init__.py +0 -0
  59. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/destinations/__init__.py +0 -0
  60. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/destinations/slack/__init__.py +0 -0
  61. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/destinations/slack/plugin.py +0 -0
  62. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/interfaces.py +0 -0
  63. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/__init__.py +0 -0
  64. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/_ai_safety.jinja2 +0 -0
  65. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/_current_date_time.jinja2 +0 -0
  66. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/_default_log_prompt.jinja2 +0 -0
  67. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/_fetch_logs.jinja2 +0 -0
  68. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/_global_instructions.jinja2 +0 -0
  69. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/_permission_errors.jinja2 +0 -0
  70. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/_runbook_instructions.jinja2 +0 -0
  71. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/_toolsets_instructions.jinja2 +0 -0
  72. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/generic_ask.jinja2 +0 -0
  73. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/generic_ask_conversation.jinja2 +0 -0
  74. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/generic_ask_for_issue_conversation.jinja2 +0 -0
  75. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/generic_investigation.jinja2 +0 -0
  76. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/generic_post_processing.jinja2 +0 -0
  77. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/generic_ticket.jinja2 +0 -0
  78. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/investigation_output_format.jinja2 +0 -0
  79. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/investigation_procedure.jinja2 +0 -0
  80. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/kubernetes_workload_ask.jinja2 +0 -0
  81. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/prompts/kubernetes_workload_chat.jinja2 +0 -0
  82. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/runbooks/CLAUDE.md +0 -0
  83. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/runbooks/README.md +0 -0
  84. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/runbooks/__init__.py +0 -0
  85. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/runbooks/catalog.json +0 -0
  86. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/runbooks/jira.yaml +0 -0
  87. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/runbooks/kube-prometheus-stack.yaml +0 -0
  88. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/runbooks/networking/dns_troubleshooting_instructions.md +0 -0
  89. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/runbooks/upgrade/upgrade_troubleshooting_instructions.md +0 -0
  90. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/sources/github/__init__.py +0 -0
  91. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/sources/jira/__init__.py +0 -0
  92. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/sources/opsgenie/__init__.py +0 -0
  93. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/sources/pagerduty/__init__.py +0 -0
  94. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/sources/prometheus/__init__.py +0 -0
  95. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/sources/prometheus/models.py +0 -0
  96. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/sources/prometheus/plugin.py +0 -0
  97. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/aks-node-health.yaml +0 -0
  98. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/aks.yaml +0 -0
  99. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/argocd.yaml +0 -0
  100. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/atlas_mongodb/instructions.jinja2 +0 -0
  101. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/aws.yaml +0 -0
  102. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/__init__.py +0 -0
  103. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/apis/alert_monitoring_api.py +0 -0
  104. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/apis/azure_sql_api.py +0 -0
  105. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/apis/connection_failure_api.py +0 -0
  106. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/apis/connection_monitoring_api.py +0 -0
  107. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/apis/storage_analysis_api.py +0 -0
  108. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/azure_base_toolset.py +0 -0
  109. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/azure_sql_instructions.jinja2 +0 -0
  110. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/install.md +0 -0
  111. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/__init__.py +0 -0
  112. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/analyze_connection_failures.py +0 -0
  113. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/analyze_database_connections.py +0 -0
  114. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/analyze_database_health_status.py +0 -0
  115. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/analyze_database_performance.py +0 -0
  116. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/analyze_database_storage.py +0 -0
  117. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/get_active_alerts.py +0 -0
  118. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/get_slow_queries.py +0 -0
  119. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/get_top_cpu_queries.py +0 -0
  120. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/get_top_data_io_queries.py +0 -0
  121. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/tools/get_top_log_io_queries.py +0 -0
  122. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/azure_sql/utils.py +0 -0
  123. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/__init__.py +0 -0
  124. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/argocd/__init__.py +0 -0
  125. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/argocd/constants.py +0 -0
  126. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/aws/__init__.py +0 -0
  127. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/aws/constants.py +0 -0
  128. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/azure/__init__.py +0 -0
  129. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/azure/constants.py +0 -0
  130. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/bash_instructions.jinja2 +0 -0
  131. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/bash_toolset.py +0 -0
  132. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/common/bash.py +0 -0
  133. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/common/bash_command.py +0 -0
  134. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/common/config.py +0 -0
  135. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/common/stringify.py +0 -0
  136. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/common/validators.py +0 -0
  137. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/docker/__init__.py +0 -0
  138. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/docker/constants.py +0 -0
  139. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/helm/__init__.py +0 -0
  140. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/helm/constants.py +0 -0
  141. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/kubectl/__init__.py +0 -0
  142. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/kubectl/constants.py +0 -0
  143. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/kubectl/kubectl_describe.py +0 -0
  144. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/kubectl/kubectl_events.py +0 -0
  145. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/kubectl/kubectl_get.py +0 -0
  146. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/kubectl/kubectl_logs.py +0 -0
  147. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/kubectl/kubectl_run.py +0 -0
  148. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/kubectl/kubectl_top.py +0 -0
  149. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/parse_command.py +0 -0
  150. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/__init__.py +0 -0
  151. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/base64_util.py +0 -0
  152. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/cut.py +0 -0
  153. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/grep/__init__.py +0 -0
  154. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/head.py +0 -0
  155. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/jq.py +0 -0
  156. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/sed.py +0 -0
  157. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/sort.py +0 -0
  158. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/tail.py +0 -0
  159. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/tr.py +0 -0
  160. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/uniq.py +0 -0
  161. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/bash/utilities/wc.py +0 -0
  162. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/cilium.yaml +0 -0
  163. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/confluence.yaml +0 -0
  164. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/consts.py +0 -0
  165. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/coralogix/api.py +0 -0
  166. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/coralogix/toolset_coralogix_logs.py +0 -0
  167. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/coralogix/utils.py +0 -0
  168. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/datadog_api.py +0 -0
  169. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/datadog_general_instructions.jinja2 +0 -0
  170. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/datadog_logs_instructions.jinja2 +0 -0
  171. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/datadog_metrics_instructions.jinja2 +0 -0
  172. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/datadog_rds_instructions.jinja2 +0 -0
  173. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/datadog_traces_formatter.py +0 -0
  174. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/instructions_datadog_traces.jinja2 +0 -0
  175. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/toolset_datadog_general.py +0 -0
  176. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/toolset_datadog_logs.py +0 -0
  177. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/toolset_datadog_metrics.py +0 -0
  178. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/toolset_datadog_rds.py +0 -0
  179. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/datadog/toolset_datadog_traces.py +0 -0
  180. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/docker.yaml +0 -0
  181. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/git.py +0 -0
  182. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/__init__.py +0 -0
  183. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/base_grafana_toolset.py +0 -0
  184. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/common.py +0 -0
  185. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/grafana_tempo_api.py +0 -0
  186. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/loki_api.py +0 -0
  187. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/toolset_grafana.py +0 -0
  188. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/toolset_grafana_loki.py +0 -0
  189. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/toolset_grafana_tempo.jinja2 +0 -0
  190. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/toolset_grafana_tempo.py +0 -0
  191. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/grafana/trace_parser.py +0 -0
  192. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/helm.yaml +0 -0
  193. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/internet/internet.py +0 -0
  194. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/internet/notion.py +0 -0
  195. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/investigator/__init__.py +0 -0
  196. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/investigator/investigator_instructions.jinja2 +0 -0
  197. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/investigator/model.py +0 -0
  198. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/kafka.py +0 -0
  199. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/kubernetes.yaml +0 -0
  200. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/kubernetes_logs.py +0 -0
  201. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/kubernetes_logs.yaml +0 -0
  202. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/logging_utils/__init__.py +0 -0
  203. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/logging_utils/logging_api.py +0 -0
  204. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/logging_utils/types.py +0 -0
  205. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/mcp/toolset_mcp.py +0 -0
  206. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/newrelic/__init__.py +0 -0
  207. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/newrelic/new_relic_api.py +0 -0
  208. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/newrelic/newrelic.jinja2 +0 -0
  209. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/newrelic/newrelic.py +0 -0
  210. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/opensearch/__init__.py +0 -0
  211. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/opensearch/opensearch.py +0 -0
  212. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/opensearch/opensearch_logs.py +0 -0
  213. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/opensearch/opensearch_traces.py +0 -0
  214. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/opensearch/opensearch_traces_instructions.jinja2 +0 -0
  215. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/opensearch/opensearch_utils.py +0 -0
  216. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/prometheus/prometheus_instructions.jinja2 +0 -0
  217. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/prometheus/utils.py +0 -0
  218. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/rabbitmq/api.py +0 -0
  219. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/rabbitmq/rabbitmq_instructions.jinja2 +0 -0
  220. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/rabbitmq/toolset_rabbitmq.py +0 -0
  221. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/robusta/__init__.py +0 -0
  222. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/robusta/robusta.py +0 -0
  223. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/robusta/robusta_instructions.jinja2 +0 -0
  224. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/runbook/__init__.py +0 -0
  225. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/runbook/runbook_fetcher.py +0 -0
  226. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/servicenow/install.md +0 -0
  227. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/servicenow/instructions.jinja2 +0 -0
  228. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/slab.yaml +0 -0
  229. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/toolsets/utils.py +0 -0
  230. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/plugins/utils.py +0 -0
  231. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/__init__.py +0 -0
  232. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/cache.py +0 -0
  233. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/cert_utils.py +0 -0
  234. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/colors.py +0 -0
  235. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/config_utils.py +0 -0
  236. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/console/consts.py +0 -0
  237. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/console/logging.py +0 -0
  238. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/console/result.py +0 -0
  239. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/default_toolset_installation_guide.jinja2 +0 -0
  240. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/definitions.py +0 -0
  241. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/env.py +0 -0
  242. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/file_utils.py +0 -0
  243. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/global_instructions.py +0 -0
  244. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/holmes_status.py +0 -0
  245. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/holmes_sync_toolsets.py +0 -0
  246. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/keygen_utils.py +0 -0
  247. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/llms.py +0 -0
  248. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/markdown_utils.py +0 -0
  249. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/pydantic_utils.py +0 -0
  250. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/sentry_helper.py +0 -0
  251. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/utils/tags.py +0 -0
  252. {holmesgpt-0.14.3a0 → holmesgpt-0.15.0}/holmes/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: holmesgpt
3
- Version: 0.14.3a0
3
+ Version: 0.15.0
4
4
  Summary:
5
5
  Author: Natan Yellin
6
6
  Author-email: natan@robusta.dev
@@ -8,6 +8,7 @@ Requires-Python: >=3.10,<4.0
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
+ Requires-Dist: ag-ui-protocol (>=0.1.9,<0.2.0)
11
12
  Requires-Dist: azure-core (>=1.34.0,<2.0.0)
12
13
  Requires-Dist: azure-identity (>=1.23.0,<2.0.0)
13
14
  Requires-Dist: azure-mgmt-alertsmanagement (>=1.0.0,<2.0.0)
@@ -23,6 +24,7 @@ Requires-Dist: certifi (>=2024.7.4,<2025.0.0)
23
24
  Requires-Dist: colorlog (>=6.8.2,<7.0.0)
24
25
  Requires-Dist: confluent-kafka (>=2.6.1,<3.0.0)
25
26
  Requires-Dist: fastapi (>=0.116,<0.117)
27
+ Requires-Dist: google-cloud-aiplatform (>=1.38)
26
28
  Requires-Dist: httpx[socks] (<0.28)
27
29
  Requires-Dist: humanize (>=4.9.0,<5.0.0)
28
30
  Requires-Dist: jinja2 (>=3.1.2,<4.0.0)
@@ -1,5 +1,5 @@
1
1
  # This is patched by github actions during release
2
- __version__ = "0.14.3-alpha"
2
+ __version__ = "0.15.0"
3
3
 
4
4
  # Re-export version functions from version module for backward compatibility
5
5
  from .version import (
@@ -1,8 +1,8 @@
1
1
  import logging
2
- from typing import List, Optional, Dict, Any
2
+ from typing import Optional, Dict, Any
3
3
  import requests # type: ignore
4
4
  from functools import cache
5
- from pydantic import BaseModel, ConfigDict, Field
5
+ from pydantic import BaseModel, ConfigDict
6
6
  from holmes.common.env_vars import ROBUSTA_API_ENDPOINT
7
7
 
8
8
  HOLMES_GET_INFO_URL = f"{ROBUSTA_API_ENDPOINT}/api/holmes/get_info"
@@ -14,13 +14,15 @@ class HolmesInfo(BaseModel):
14
14
  latest_version: Optional[str] = None
15
15
 
16
16
 
17
- class RobustaModelsResponse(BaseModel):
17
+ class RobustaModel(BaseModel):
18
18
  model_config = ConfigDict(extra="ignore")
19
- models: List[str]
20
- models_args: Dict[str, Any] = Field(
21
- default_factory=dict, alias="models_holmes_args"
22
- )
23
- default_model: Optional[str] = None
19
+ model: str
20
+ holmes_args: Optional[dict[str, Any]] = None
21
+ is_default: bool = False
22
+
23
+
24
+ class RobustaModelsResponse(BaseModel):
25
+ models: Dict[str, RobustaModel]
24
26
 
25
27
 
26
28
  @cache
@@ -30,13 +32,13 @@ def fetch_robusta_models(
30
32
  try:
31
33
  session_request = {"session_token": token, "account_id": account_id}
32
34
  resp = requests.post(
33
- f"{ROBUSTA_API_ENDPOINT}/api/llm/models",
35
+ f"{ROBUSTA_API_ENDPOINT}/api/llm/models/v2",
34
36
  json=session_request,
35
37
  timeout=10,
36
38
  )
37
39
  resp.raise_for_status()
38
40
  response_json = resp.json()
39
- return RobustaModelsResponse(**response_json)
41
+ return RobustaModelsResponse(**{"models": response_json})
40
42
  except Exception:
41
43
  logging.exception("Failed to fetch robusta models")
42
44
  return None
@@ -2,6 +2,16 @@ import os
2
2
  import json
3
3
  from typing import Optional
4
4
 
5
+ # Recommended models for different providers
6
+ RECOMMENDED_OPENAI_MODEL = "gpt-4.1"
7
+ RECOMMENDED_ANTHROPIC_MODEL = "anthropic/claude-opus-4-1-20250805"
8
+
9
+ # Default model for HolmesGPT
10
+ DEFAULT_MODEL = RECOMMENDED_OPENAI_MODEL
11
+ FALLBACK_CONTEXT_WINDOW_SIZE = (
12
+ 200000 # Fallback context window size if it can't be determined from the model
13
+ )
14
+
5
15
 
6
16
  def load_bool(env_var, default: Optional[bool]) -> Optional[bool]:
7
17
  env_value = os.environ.get(env_var)
@@ -38,6 +48,7 @@ DEVELOPMENT_MODE = load_bool("DEVELOPMENT_MODE", False)
38
48
  SENTRY_DSN = os.environ.get("SENTRY_DSN", "")
39
49
  SENTRY_TRACES_SAMPLE_RATE = float(os.environ.get("SENTRY_TRACES_SAMPLE_RATE", "0.0"))
40
50
 
51
+ EXTRA_HEADERS = os.environ.get("EXTRA_HEADERS", "")
41
52
  THINKING = os.environ.get("THINKING", "")
42
53
  REASONING_EFFORT = os.environ.get("REASONING_EFFORT", "").strip().lower()
43
54
  TEMPERATURE = float(os.environ.get("TEMPERATURE", "0.00000001"))
@@ -82,6 +93,9 @@ TOOL_MAX_ALLOCATED_CONTEXT_WINDOW_PCT = float(
82
93
  os.environ.get("TOOL_MAX_ALLOCATED_CONTEXT_WINDOW_PCT", 15)
83
94
  )
84
95
 
96
+ # Absolute max tokens to allocate for a single tool response
97
+ TOOL_MAX_ALLOCATED_CONTEXT_WINDOW_TOKENS = 25000
98
+
85
99
  MAX_EVIDENCE_DATA_CHARACTERS_BEFORE_TRUNCATION = int(
86
100
  os.environ.get("MAX_EVIDENCE_DATA_CHARACTERS_BEFORE_TRUNCATION", 3000)
87
101
  )
@@ -45,6 +45,9 @@ class SupportedTicketSources(str, Enum):
45
45
 
46
46
  class Config(RobustaBaseConfig):
47
47
  model: Optional[str] = None
48
+ api_key: Optional[SecretStr] = (
49
+ None # if None, read from OPENAI_API_KEY or AZURE_OPENAI_ENDPOINT env var
50
+ )
48
51
  api_base: Optional[str] = None
49
52
  api_version: Optional[str] = None
50
53
  fast_model: Optional[str] = None
@@ -95,6 +98,7 @@ class Config(RobustaBaseConfig):
95
98
  mcp_servers: Optional[dict[str, dict[str, Any]]] = None
96
99
 
97
100
  _server_tool_executor: Optional[ToolExecutor] = None
101
+ _agui_tool_executor: Optional[ToolExecutor] = None
98
102
 
99
103
  # TODO: Separate those fields to facade class, this shouldn't be part of the config.
100
104
  _toolset_manager: Optional[ToolsetManager] = PrivateAttr(None)
@@ -242,6 +246,23 @@ class Config(RobustaBaseConfig):
242
246
  )
243
247
  return ToolExecutor(cli_toolsets)
244
248
 
249
+ def create_agui_tool_executor(self, dal: Optional["SupabaseDal"]) -> ToolExecutor:
250
+ """
251
+ Creates ToolExecutor for the AG-UI server endpoints
252
+ """
253
+
254
+ if self._agui_tool_executor:
255
+ return self._agui_tool_executor
256
+
257
+ # Use same toolset as CLI for AG-UI front-end.
258
+ agui_toolsets = self.toolset_manager.list_console_toolsets(
259
+ dal=dal, refresh_status=True
260
+ )
261
+
262
+ self._agui_tool_executor = ToolExecutor(agui_toolsets)
263
+
264
+ return self._agui_tool_executor
265
+
245
266
  def create_tool_executor(self, dal: Optional["SupabaseDal"]) -> ToolExecutor:
246
267
  """
247
268
  Creates ToolExecutor for the server endpoints
@@ -273,6 +294,19 @@ class Config(RobustaBaseConfig):
273
294
  tool_executor, self.max_steps, self._get_llm(tracer=tracer)
274
295
  )
275
296
 
297
+ def create_agui_toolcalling_llm(
298
+ self,
299
+ dal: Optional["SupabaseDal"] = None,
300
+ model: Optional[str] = None,
301
+ tracer=None,
302
+ ) -> "ToolCallingLLM":
303
+ tool_executor = self.create_agui_tool_executor(dal)
304
+ from holmes.core.tool_calling_llm import ToolCallingLLM
305
+
306
+ return ToolCallingLLM(
307
+ tool_executor, self.max_steps, self._get_llm(model, tracer)
308
+ )
309
+
276
310
  def create_toolcalling_llm(
277
311
  self,
278
312
  dal: Optional["SupabaseDal"] = None,
@@ -441,7 +475,8 @@ class Config(RobustaBaseConfig):
441
475
  # TODO: move this to the llm model registry
442
476
  def _get_llm(self, model_key: Optional[str] = None, tracer=None) -> "DefaultLLM":
443
477
  sentry_sdk.set_tag("requested_model", model_key)
444
- model_params = self.llm_model_registry.get_model_params(model_key)
478
+ model_entry = self.llm_model_registry.get_model_params(model_key)
479
+ model_params = model_entry.model_dump(exclude_none=True)
445
480
  api_base = self.api_base
446
481
  api_version = self.api_version
447
482
 
@@ -453,6 +488,8 @@ class Config(RobustaBaseConfig):
453
488
  api_key = f"{account_id} {token}"
454
489
  else:
455
490
  api_key = model_params.pop("api_key", None)
491
+ if api_key is not None:
492
+ api_key = api_key.get_secret_value()
456
493
 
457
494
  model = model_params.pop("model")
458
495
  # It's ok if the model does not have api base and api version, which are defaults to None.
@@ -463,10 +500,20 @@ class Config(RobustaBaseConfig):
463
500
  api_version = model_params.pop("api_version", api_version)
464
501
  model_name = model_params.pop("name", None) or model_key or model
465
502
  sentry_sdk.set_tag("model_name", model_name)
466
- logging.info(f"Creating LLM with model: {model_name}")
467
- return DefaultLLM(
468
- model, api_key, api_base, api_version, model_params, tracer, model_name
503
+ llm = DefaultLLM(
504
+ model=model,
505
+ api_key=api_key,
506
+ api_base=api_base,
507
+ api_version=api_version,
508
+ args=model_params,
509
+ tracer=tracer,
510
+ name=model_name,
511
+ is_robusta_model=is_robusta_model,
469
512
  ) # type: ignore
513
+ logging.info(
514
+ f"Using model: {model_name} ({llm.get_context_window_size():,} total tokens, {llm.get_maximum_output_token():,} output tokens)"
515
+ )
516
+ return llm
470
517
 
471
518
  def get_models_list(self) -> List[str]:
472
519
  if self.llm_model_registry and self.llm_model_registry.models:
@@ -26,7 +26,8 @@ def calculate_tool_size(
26
26
  return DEFAULT_TOOL_SIZE
27
27
 
28
28
  context_window = ai.llm.get_context_window_size()
29
- message_size_without_tools = ai.llm.count_tokens_for_message(messages_without_tools)
29
+ tokens = ai.llm.count_tokens(messages_without_tools)
30
+ message_size_without_tools = tokens.total_tokens
30
31
  maximum_output_token = ai.llm.get_maximum_output_token()
31
32
 
32
33
  tool_size = min(
@@ -372,13 +373,13 @@ def build_chat_messages(
372
373
  )
373
374
 
374
375
  ask = add_global_instructions_to_user_prompt(ask, global_instructions)
375
-
376
376
  conversation_history.append( # type: ignore
377
377
  {
378
378
  "role": "user",
379
379
  "content": ask,
380
380
  },
381
381
  )
382
+
382
383
  number_of_tools = len(
383
384
  [message for message in conversation_history if message.get("role") == "tool"] # type: ignore
384
385
  )