Platform for stateful agents: AI with advanced memory that can learn and self-improve over time.
This report presents the forensic synthetic code analysis of letta-ai/letta, a Python project with 23,787 GitHub stars. SynthScan v2.0 examined 263,162 lines of code across 1092 source files, recording 6792 pattern matches distributed across 24 syntactic categories. The overall adjusted score of 37.6 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 6792 distinct pattern matches across 24 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_modal_sandbox_v2.py | 18 | def test_execute_tool_dynamic_success(self): | CODE |
| LOW | tests/test_modal_sandbox_v2.py | 42 | def test_execute_tool_dynamic_with_error(self): | STRING |
| LOW | tests/test_modal_sandbox_v2.py | 92 | def test_execute_with_stdout_capture(self): | STRING |
| LOW | tests/test_modal_sandbox_v2.py | 124 | async def test_register_and_get_deployment(self): | CODE |
| LOW | tests/test_modal_sandbox_v2.py | 374 | def test_version_hash_calculation(self, mock_tool, mock_user, mock_sandbox_config): | CODE |
| LOW | tests/test_modal_sandbox_v2.py | 450 | async def test_run_with_mocked_modal(self, mock_tool, mock_user, mock_sandbox_config): | CODE |
| LOW | tests/test_modal_sandbox_v2.py | 537 | def test_detect_async_function(self, mock_user): | CODE |
| LOW⚡ | tests/test_context_window_calculator.py | 16 | def test_returns_none_for_missing_tag(self): | CODE |
| LOW⚡ | tests/test_context_window_calculator.py | 21 | def test_returns_none_for_missing_opening_tag(self): | CODE |
| LOW⚡ | tests/test_context_window_calculator.py | 26 | def test_returns_none_for_unclosed_tag(self): | CODE |
| LOW⚡ | tests/test_context_window_calculator.py | 31 | def test_handles_multiline_content(self): | CODE |
| LOW⚡ | tests/test_context_window_calculator.py | 36 | def test_handles_nested_content(self): | CODE |
| LOW⚡ | tests/test_context_window_calculator.py | 41 | def test_handles_empty_content(self): | CODE |
| LOW⚡ | tests/test_context_window_calculator.py | 46 | def test_extracts_first_occurrence_with_duplicate_tags(self): | CODE |
| LOW⚡ | tests/test_context_window_calculator.py | 56 | def test_extracts_standard_agent_sections(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 106 | def test_extracts_tool_usage_rules(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 181 | def test_returns_correct_dict_keys(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 194 | def test_no_base_instructions_tag_extracts_preamble(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 216 | def test_nested_memory_filesystem_not_extracted_as_top_level(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 244 | def test_top_level_memory_filesystem_outside_memory_blocks(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 266 | def test_letta_code_agent_real_format(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 320 | def test_git_enabled_agent_bare_file_blocks_captured_as_core_memory(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 354 | def test_git_enabled_agent_no_bare_blocks(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 367 | def test_extract_top_level_tag_dual_occurrence_nested_first(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 380 | def test_extract_system_prompt_pure_text_no_tags(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 388 | def test_git_backed_memory_without_memory_blocks_wrapper(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 478 | async def test_calculate_context_window_standard_agent(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 519 | async def test_calculate_context_window_skips_empty_sections(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 546 | async def test_calculate_context_window_all_sections(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 598 | async def test_calculate_context_window_git_enabled_agent(self): | CODE |
| LOW | tests/test_context_window_calculator.py | 88 | def test_extracts_git_enabled_agent_sections(self): | STRING |
| LOW | tests/test_context_window_calculator.py | 121 | def test_extracts_directories(self): | STRING |
| LOW | tests/test_context_window_calculator.py | 141 | def test_handles_react_agent_no_memory_blocks(self): | STRING |
| LOW | tests/test_context_window_calculator.py | 157 | def test_handles_all_sections_present(self): | STRING |
| LOW | tests/test_context_window_calculator.py | 176 | def test_handles_empty_string(self): | STRING |
| LOW | tests/test_context_window_calculator.py | 423 | def test_legacy_memory_blocks_wrapper(self): | STRING |
| LOW | tests/test_openai_ws_session.py | 56 | async def test_iteration_without_context_manager(self): | CODE |
| LOW | tests/test_openai_ws_session.py | 77 | async def test_aclose_is_idempotent(self): | CODE |
| LOW | tests/test_openai_ws_session.py | 84 | async def test_stream_after_close_raises(self): | CODE |
| LOW | tests/test_openai_ws_session.py | 100 | async def test_stream_responses_yields_events_and_stops_on_terminal(self): | CODE |
| LOW | tests/test_openai_ws_session.py | 162 | def test_letta_llm_stream_adapter_stores_flag(self): | CODE |
| LOW | tests/test_openai_ws_session.py | 178 | def test_default_flag_is_false(self): | CODE |
| LOW | tests/test_openai_ws_session.py | 193 | async def test_aclose_default_is_noop(self): | CODE |
| LOW⚡ | tests/integration_test_turbopuffer.py | 163 | def test_should_use_tpuf_with_settings(): | CODE |
| LOW⚡ | tests/integration_test_turbopuffer.py | 356 | async def test_native_only_operations(server, default_user, sarah_agent, disable_turbopuffer): | CODE |
| LOW⚡ | tests/integration_test_turbopuffer.py | 1899 | async def test_archive_namespace_tracking(server, default_user, enable_turbopuffer): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 190 | async def test_archive_creation_with_tpuf_enabled(server, default_user, enable_turbopuffer): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 200 | async def test_archive_creation_with_tpuf_disabled(server, default_user, disable_turbopuffer): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 211 | async def test_dual_write_and_query_with_real_tpuf(server, default_user, sarah_agent, enable_turbopuffer): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 287 | async def test_turbopuffer_metadata_attributes(default_user, enable_turbopuffer): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 390 | async def test_hybrid_search_with_real_tpuf(default_user, enable_turbopuffer): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 496 | async def test_tag_filtering_with_real_tpuf(default_user, enable_turbopuffer): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 623 | async def test_temporal_filtering_with_real_tpuf(default_user, enable_turbopuffer): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 761 | def test_should_use_tpuf_for_messages_settings(): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 803 | def test_message_text_extraction(server, default_user): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 946 | async def test_message_embedding_without_config(server, default_user, sarah_agent, enable_message_embedding): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 984 | async def test_generic_reciprocal_rank_fusion(): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 1085 | async def test_message_dual_write_with_real_tpuf(enable_message_embedding, default_user): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 1147 | async def test_message_vector_search_with_real_tpuf(enable_message_embedding, default_user): | CODE |
| LOW | tests/integration_test_turbopuffer.py | 1208 | async def test_message_hybrid_search_with_real_tpuf(enable_message_embedding, default_user): | CODE |
| 2916 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | conf.yaml | 56 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 58 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 63 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 65 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 71 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 73 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 106 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 108 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 112 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 114 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 117 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 119 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 126 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 128 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 133 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 135 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 143 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 145 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 153 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 155 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 160 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 162 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 166 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 168 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 172 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 174 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 178 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 180 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 183 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 185 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 200 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 202 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 209 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | conf.yaml | 211 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 12 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 14 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 27 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 29 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 92 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 94 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 231 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 233 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 334 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 336 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 370 | # ============================================================================= | COMMENT |
| MEDIUM | conf.yaml | 372 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/integration_test_client_side_tools.py | 47 | # ------------------------------ | COMMENT |
| MEDIUM⚡ | tests/integration_test_client_side_tools.py | 49 | # ------------------------------ | COMMENT |
| MEDIUM⚡ | tests/integration_test_client_side_tools.py | 58 | # ------------------------------ | COMMENT |
| MEDIUM⚡ | tests/integration_test_client_side_tools.py | 60 | # ------------------------------ | COMMENT |
| MEDIUM | tests/integration_test_client_side_tools.py | 16 | # ------------------------------ | COMMENT |
| MEDIUM | tests/integration_test_client_side_tools.py | 18 | # ------------------------------ | COMMENT |
| MEDIUM | tests/test_utils.py | 70 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_utils.py | 77 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/integration_test_send_message.py | 37 | # ------------------------------ | COMMENT |
| MEDIUM⚡ | tests/integration_test_send_message.py | 39 | # ------------------------------ | COMMENT |
| MEDIUM⚡ | tests/integration_test_send_message.py | 1089 | # ------------------------------ | COMMENT |
| MEDIUM⚡ | tests/integration_test_send_message.py | 1091 | # ------------------------------ | COMMENT |
| MEDIUM⚡ | tests/integration_test_send_message.py | 2579 | # ============================ | COMMENT |
| MEDIUM⚡ | tests/integration_test_send_message.py | 2581 | # ============================ | COMMENT |
| 444 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/locust_test.py | 21 | # Create a user and get the token | COMMENT |
| MEDIUM | tests/test_modal_sandbox_v2.py | 140 | # Create a mock actor | COMMENT |
| MEDIUM | tests/test_modal_sandbox_v2.py | 182 | # Create a mock actor | COMMENT |
| MEDIUM | tests/test_modal_sandbox_v2.py | 242 | # Create a mock actor | COMMENT |
| MEDIUM | tests/test_modal_sandbox_v2.py | 287 | # Create a mock actor | COMMENT |
| MEDIUM | tests/test_modal_sandbox_v2.py | 463 | # Create a mock that has a remote attribute | COMMENT |
| MEDIUM | tests/test_openai_ws_session.py | 200 | # Create a concrete subclass just for testing | COMMENT |
| MEDIUM⚡ | tests/integration_test_turbopuffer.py | 1901 | # Create an archive | COMMENT |
| MEDIUM | tests/integration_test_turbopuffer.py | 214 | # Create a TPUF-enabled archive | COMMENT |
| MEDIUM | tests/integration_test_turbopuffer.py | 634 | # Create a unique archive ID for this test | COMMENT |
| MEDIUM | tests/integration_test_turbopuffer.py | 2172 | # Create a conversation | COMMENT |
| MEDIUM | tests/integration_test_client_side_tools.py | 222 | # Create the server-side tool | STRING |
| MEDIUM⚡ | tests/test_utils.py | 708 | # Create a dict that when serialized will exceed limit | COMMENT |
| MEDIUM | tests/test_secret.py | 198 | # Create a Secret from encrypted value | COMMENT |
| MEDIUM⚡ | tests/integration_test_tool_execution_sandbox.py | 251 | # Create the SandboxConfigManager | COMMENT |
| MEDIUM⚡ | tests/integration_test_tool_execution_sandbox.py | 261 | # Create the sandbox configuration | COMMENT |
| MEDIUM⚡ | tests/integration_test_tool_execution_sandbox.py | 409 | # Create a tool that uses the injected client and agent_id to actually clear a memory block | COMMENT |
| MEDIUM | tests/integration_test_tool_execution_sandbox.py | 456 | # Create the tool | STRING |
| MEDIUM | tests/integration_test_tool_execution_sandbox.py | 479 | # Create the tool in the system | STRING |
| MEDIUM | tests/integration_test_tool_execution_sandbox.py | 482 | # Create an agent with a memory block | STRING |
| MEDIUM | tests/integration_test_tool_execution_sandbox.py | 500 | # Create the sandbox for the tool | STRING |
| MEDIUM⚡ | tests/integration_test_async_tool_sandbox.py | 321 | # Create the SandboxConfigManager | COMMENT |
| MEDIUM⚡ | tests/integration_test_async_tool_sandbox.py | 331 | # Create the sandbox configuration | COMMENT |
| MEDIUM | tests/integration_test_async_tool_sandbox.py | 1246 | # Create the tool with proper schema | STRING |
| MEDIUM | tests/integration_test_async_tool_sandbox.py | 1282 | # Create the sandbox and verify client injection is detected | STRING |
| MEDIUM | tests/integration_test_async_tool_sandbox.py | 1343 | # Create the sandbox and verify client injection is detected | STRING |
| MEDIUM | tests/integration_test_send_message.py | 2385 | # # Create a streaming request | COMMENT |
| MEDIUM | tests/integration_test_override_model.py | 373 | # Create a conversation | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 111 | # Create a realistic-looking tool return with repeated data | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1387 | # # Create a new run for the repaired agent | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1391 | # # Create a new agent loop with the repaired agent state | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1451 | # # Create an input message to trigger the agent | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1457 | # # Create a proper run record in the database | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1466 | # # Create the agent loop using LettaAgentV3 | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1485 | # # Create a mock response with the required structure | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1634 | # # Create an input message to trigger the agent | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1640 | # # Create a proper run record in the database | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1649 | # # Create the agent loop using LettaAgentV3 | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1666 | # # Create a mock response with the required structure | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 333 | # Create a small conversation with ~5 messages | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 396 | # Create a large tool return | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 589 | # # Create an extremely large tool return (100k chars) | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 694 | # Create a conversation with enough messages to trigger summarization | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 792 | # Create a conversation with enough messages to summarize | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 868 | # Create a conversation with enough messages to summarize | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 1048 | # Create the V3 agent loop | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 1127 | # Create a real summarizer config using the default factory | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 1229 | # Create a real summarizer config using the default factory | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 1343 | # # Create a run for the agent using RunManager | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 1347 | # # Create the agent loop using LettaAgentV3 | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 1789 | # Create a summarizer config with "all" mode | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 1862 | # Create a summarizer config with "self" mode | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 2232 | # Create a conversation with enough messages to summarize | COMMENT |
| MEDIUM | tests/test_sonnet_nonnative_reasoning_buffering.py | 153 | # Create the stream | COMMENT |
| MEDIUM⚡ | …/integration_test_typescript_tool_execution_sandbox.py | 292 | # Create a TypeScript tool that has 'agent_state' in its parameters | COMMENT |
| MEDIUM | …/integration_test_typescript_tool_execution_sandbox.py | 435 | # Create a tool that checks if the client variable exists | COMMENT |
| MEDIUM | …/integration_test_typescript_tool_execution_sandbox.py | 480 | # Create a tool that uses the 'lodash' npm package | COMMENT |
| MEDIUM | tests/test_agent_serialization_v2.py | 337 | # Create a mock MCP tool | COMMENT |
| MEDIUM | tests/test_internal_agents_count.py | 46 | # Create a simple AgentState-like object for tracking | COMMENT |
| MEDIUM | tests/test_letta_agent_batch.py | 432 | # Create the mock for results | COMMENT |
| 376 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_multi_agent.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/conftest.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/integration_test_tool_execution_sandbox.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/integration_test_async_tool_sandbox.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | …/integration_test_typescript_tool_execution_sandbox.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/test_embeddings.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/test_agent_serialization_v2.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/test_letta_agent_batch.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/integration_test_token_counters.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/integration_test_modal.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/test_managers.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/test_agent_serialization.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/test_server_providers.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/managers/test_provider_manager.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | .github/scripts/model-sweep/conftest.py | 0 | fixture to create and return the default organization. | STRING |
| HIGH | tests/test_multi_agent.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/conftest.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/integration_test_tool_execution_sandbox.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/integration_test_async_tool_sandbox.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | …/integration_test_typescript_tool_execution_sandbox.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/test_embeddings.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/test_agent_serialization_v2.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/test_letta_agent_batch.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/integration_test_token_counters.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/integration_test_modal.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/test_managers.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/test_agent_serialization.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/test_server_providers.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/managers/test_provider_manager.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | .github/scripts/model-sweep/conftest.py | 0 | fixture to create and return the default user within the default organization. | STRING |
| HIGH | tests/conftest.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/integration_test_cancellation.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/integration_test_async_tool_sandbox.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/integration_test_send_message.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/integration_test_override_model.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/integration_test_multi_agent.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/test_long_running_agents.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/integration_test_sleeptime_agent.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/integration_test_send_message_v2.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/integration_test_mcp.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/sdk/conftest.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/sdk/mcp_servers_test.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/test_agent_serialization.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/integration_test_builtin_tools.py | 0 | provides the url for the letta server. if letta_server_url is not set, starts the server in a background thread and poll | STRING |
| HIGH | tests/conftest.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/integration_test_async_tool_sandbox.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/integration_test_send_message.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/integration_test_override_model.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/integration_test_system_prompt_prefix_caching.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/integration_test_multi_agent.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/test_long_running_agents.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/integration_test_sleeptime_agent.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/integration_test_builtin_tools.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/integration_test_mcp.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/sdk/conftest.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/sdk/mcp_servers_test.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | .github/scripts/model-sweep/conftest.py | 0 | creates and returns a synchronous letta rest client for testing. | STRING |
| HIGH | tests/conftest.py | 0 | fetches the current weather for a given location. parameters: location (str): the location to get the weather for. retur | STRING |
| HIGH | tests/integration_test_chat_completions.py | 0 | fetches the current weather for a given location. parameters: location (str): the location to get the weather for. retur | STRING |
| HIGH | tests/test_letta_agent_batch.py | 0 | fetches the current weather for a given location. parameters: location (str): the location to get the weather for. retur | STRING |
| 128 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test_watchdog_hang.py | 88 | except Exception as e: | CODE |
| LOW⚡ | tests/integration_test_turbopuffer.py | 154 | except Exception: | CODE |
| LOW⚡ | tests/integration_test_turbopuffer.py | 346 | except Exception as e: | CODE |
| LOW⚡ | tests/integration_test_turbopuffer.py | 350 | except Exception: | CODE |
| LOW⚡ | tests/integration_test_turbopuffer.py | 1894 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 48 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 490 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 618 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 757 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 1141 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 1202 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 1265 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 1337 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 2398 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 2480 | except Exception: | CODE |
| LOW | tests/integration_test_turbopuffer.py | 2536 | except Exception: | CODE |
| LOW | tests/test_crypto_utils.py | 92 | except Exception as e: | CODE |
| LOW | tests/conftest.py | 79 | except Exception: | CODE |
| LOW | tests/conftest.py | 85 | except Exception: | CODE |
| LOW | tests/integration_test_tool_execution_sandbox.py | 452 | except Exception as e: | CODE |
| LOW | tests/integration_test_cancellation.py | 124 | except Exception: | CODE |
| LOW | tests/integration_test_async_tool_sandbox.py | 360 | except Exception as e: | CODE |
| LOW | tests/integration_test_async_tool_sandbox.py | 1242 | except Exception as e: | CODE |
| LOW | tests/integration_test_send_message.py | 373 | except Exception: | CODE |
| LOW | tests/integration_test_send_message.py | 511 | except Exception: | CODE |
| LOW | tests/integration_test_send_message.py | 667 | except Exception: | CODE |
| LOW | tests/integration_test_send_message.py | 703 | except Exception: | CODE |
| LOW | tests/integration_test_send_message.py | 859 | except Exception: | CODE |
| LOW | tests/integration_test_send_message.py | 1200 | except Exception as e: | CODE |
| LOW | tests/integration_test_send_message.py | 2026 | except Exception as e: | CODE |
| LOW | tests/integration_test_send_message.py | 2202 | except Exception as e: | CODE |
| LOW | tests/mcp_test.py | 216 | except Exception as e: | CODE |
| LOW | tests/mcp_test.py | 257 | except Exception as e: | CODE |
| LOW | tests/mcp_test.py | 277 | except Exception as e: | CODE |
| LOW | tests/integration_test_override_model.py | 117 | except Exception as e: | CODE |
| LOW⚡ | tests/integration_test_override_model.py | 141 | except Exception as e: | CODE |
| LOW | tests/test_sonnet_nonnative_reasoning_buffering.py | 87 | except Exception: | CODE |
| LOW | tests/test_sonnet_nonnative_reasoning_buffering.py | 213 | except Exception as e: | CODE |
| LOW | tests/integration_test_system_prompt_prefix_caching.py | 33 | except Exception: | CODE |
| LOW | tests/test_provider_trace_agents.py | 94 | except Exception: | CODE |
| LOW | tests/test_provider_trace_agents.py | 160 | except Exception: | CODE |
| LOW | tests/test_internal_agents_count.py | 59 | except Exception: | CODE |
| LOW⚡ | tests/integration_test_usage_tracking.py | 126 | except Exception as e: | CODE |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 381 | except Exception: | CODE |
| LOW | tests/integration_test_human_in_the_loop.py | 368 | except Exception: | CODE |
| LOW | tests/integration_test_human_in_the_loop.py | 508 | except Exception as e: | CODE |
| LOW | tests/integration_test_human_in_the_loop.py | 770 | except Exception as e: | CODE |
| LOW | tests/integration_test_human_in_the_loop.py | 1035 | except Exception as e: | CODE |
| LOW⚡ | tests/test_temporal_metrics_local.py | 115 | except Exception: | CODE |
| LOW | tests/integration_test_send_message_v2.py | 138 | except Exception: | CODE |
| LOW | tests/integration_test_send_message_v2.py | 209 | except Exception: | CODE |
| LOW | tests/integration_test_send_message_v2.py | 262 | except Exception: | CODE |
| LOW | tests/integration_test_chat_completions.py | 183 | except Exception as e: | CODE |
| LOW | tests/integration_test_modal.py | 428 | except Exception as e: | CODE |
| LOW | tests/test_managers.py | 11220 | except Exception: | CODE |
| LOW | tests/test_sources.py | 1599 | except Exception as e: | CODE |
| LOW | tests/test_tool_schema_parsing.py | 121 | except Exception as e: | CODE |
| LOW | tests/test_tool_schema_parsing.py | 194 | except Exception as e: | CODE |
| LOW | tests/test_tool_schema_parsing.py | 315 | except Exception as e: | CODE |
| LOW | tests/test_tool_schema_parsing.py | 676 | except Exception as e: | CODE |
| 745 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/conftest.py | 242 | Fetches the current weather for a given location. Args: location (str): The location to ge | STRING |
| HIGH | tests/test_letta_agent_batch.py | 56 | Fetches the current weather for a given location. Args: location: The location to get the | STRING |
| HIGH | tests/integration_test_chat_completions.py | 71 | Fetches the current weather for a given location. Args: location (str): The location to ge | STRING |
| HIGH | tests/performance_tests/test_agent_mass_update.py | 97 | Fetches the current weather for a given location. Parameters: location (str): The location | STRING |
| HIGH | .github/scripts/model-sweep/conftest.py | 68 | Fetches the current weather for a given location. Parameters: location (str): The location | STRING |
| HIGH | letta/local_llm/grammars/gbnf_grammar_generator.py | 518 | Generate GBNF Grammar from Pydantic Models. This method takes a list of Pydantic models and uses them to gener | STRING |
| HIGH | letta/server/rest_api/streaming_response.py | 161 | Wraps a stream generator to provide real-time run cancellation checking. This wrapper periodically checks for | STRING |
| HIGH | letta/schemas/message.py | 943 | Parse tool response JSON and extract message and status. Args: response_text: Raw JSON response tex | STRING |
| HIGH | letta/schemas/providers/chatgpt_oauth.py | 197 | Perform OAuth token refresh with OpenAI's token endpoint. Args: creds: Current credentials containi | STRING |
| HIGH | letta/functions/functions.py | 328 | Dynamically imports a function from a specified module. Args: module_name (str): The name of the modul | STRING |
| HIGH | letta/functions/functions.py | 354 | Dynamically loads a specific function from a module and generates its JSON schema. Args: module_name ( | STRING |
| HIGH | letta/functions/typescript_parser.py | 10 | Derives the OpenAI JSON schema for a given TypeScript function source code. This parser extracts the function signa | STRING |
| HIGH | letta/functions/async_composio_toolset.py | 44 | Execute an action asynchronously using the Composio API Args: action (str): The name of th | STRING |
| HIGH | letta/functions/schema_generator.py | 527 | Extracts the 'Examples:' section from a Google-style docstring. Args: docstring (Optional[str]): The full d | STRING |
| HIGH | letta/functions/ast_parsers.py | 56 | Resolve a type annotation string into a Python type. Previously, primitive support for int, float, str, dict, l | STRING |
| HIGH | letta/functions/ast_parsers.py | 91 | Parse the source code to extract annotations for a given function name. Args: source_code (str): The P | STRING |
| HIGH | letta/functions/function_sets/files.py | 11 | Open one or more files and load their contents into files section in core memory. Maximum of 5 files can be opened simul | STRING |
| HIGH | letta/functions/function_sets/builtin.py | 43 | Search the web using Exa's AI-powered search engine and retrieve relevant content. Examples: web_search("T | STRING |
| HIGH | letta/functions/function_sets/base.py | 23 | Memory management tool with various sub-commands for memory block operations. Args: command (str): The | STRING |
| HIGH | letta/functions/function_sets/base.py | 95 | Search prior conversation history using hybrid search (text + semantic similarity). Args: query (Optio | STRING |
| HIGH | letta/functions/function_sets/base.py | 165 | Add information to long-term archival memory for later retrieval. Use this tool to store facts, knowledge, or | STRING |
| HIGH | letta/functions/function_sets/base.py | 203 | Search archival memory using semantic similarity to find relevant information. This tool searches your long-te | STRING |
| HIGH | letta/functions/function_sets/base.py | 312 | The memory_replace command allows you to replace a specific string in a memory block with a new string. This is use | STRING |
| HIGH | letta/functions/function_sets/base.py | 392 | The memory_insert command allows you to insert text at a specific location in a memory block. Args: la | STRING |
| HIGH | letta/orm/sqlite_functions.py | 75 | Validates and transforms embeddings to ensure correct dimensionality. Args: embedding: Input embedding | STRING |
| HIGH | letta/orm/sqlalchemy_base.py | 441 | The primary accessor for an ORM record. Async version of read method. Args: db_session: the database | STRING |
| HIGH | letta/orm/sqlalchemy_base.py | 844 | Get the count of rows that match the provided filters. Args: db_session: SQLAlchemy session | STRING |
| HIGH | letta/llm_api/llm_client.py | 19 | Create an LLM client based on the model endpoint type. Args: provider: The model endpoint | STRING |
| HIGH | letta/llm_api/chatgpt_oauth_client.py | 106 | Get the ChatGPT OAuth provider and credentials with automatic refresh if needed. Args: llm_config: | STRING |
| HIGH | letta/llm_api/anthropic_client.py | 382 | Sends a batch request to the Anthropic API using the provided agent messages and tools mappings. Args: | STRING |
| HIGH | letta/helpers/tpuf_client.py | 803 | Generic query execution for Turbopuffer. Args: namespace_name: Turbopuffer namespace to query | STRING |
| HIGH | letta/helpers/message_helper.py | 16 | Async helper to fetch image from URL without blocking the event loop. Retries once on timeout to handle transie | STRING |
| HIGH | letta/helpers/crypto_utils.py | 105 | Encrypt a string using AES-256-GCM (synchronous version). WARNING: This performs CPU-intensive PBKDF2 | STRING |
| HIGH | letta/helpers/crypto_utils.py | 154 | Encrypt a string using AES-256-GCM (async version). Runs the CPU-intensive PBKDF2 key derivation in a | STRING |
| HIGH | letta/helpers/crypto_utils.py | 203 | Decrypt a string that was encrypted using AES-256-GCM (synchronous version). WARNING: This performs CP | STRING |
| HIGH | letta/helpers/crypto_utils.py | 254 | Decrypt a string that was encrypted using AES-256-GCM (async version). Runs the CPU-intensive PBKDF2 k | STRING |
| HIGH | letta/services/provider_manager.py | 970 | Get an LLMConfig from a model handle. Args: handle: The model handle to look up actor: | STRING |
| HIGH | letta/services/provider_manager.py | 1097 | Get an EmbeddingConfig from a model handle. Args: handle: The model handle to look up a | STRING |
| HIGH | letta/services/agent_generate_completion_manager.py | 77 | Generate a completion directly from the LLM provider using the agent's configuration. This method make | STRING |
| HIGH | letta/services/tool_manager.py | 472 | Bulk create or update multiple tools in a single database transaction. Uses optimized PostgreSQL bulk | STRING |
| HIGH | letta/services/tool_manager.py | 1397 | Search tools using Turbopuffer semantic search. Args: actor: User performing the search | STRING |
| HIGH | letta/services/block_manager.py | 800 | Bulk-update the `value` field for multiple blocks in one transaction. Args: updates: mappi | STRING |
| HIGH | letta/services/archive_manager.py | 293 | Create a passage in an archive. Args: archive_id: ID of the archive to add the passage to | STRING |
| HIGH | letta/services/archive_manager.py | 383 | Create multiple passages in an archive. Args: archive_id: ID of the archive to add the passages to | STRING |
| HIGH | letta/services/job_manager.py | 329 | Get messages associated with a job using cursor-based pagination. This is a wrapper around get_job_mess | STRING |
| HIGH | letta/services/job_manager.py | 387 | Get steps associated with a job using cursor-based pagination. This is a wrapper around get_job_message | STRING |
| HIGH | letta/services/job_manager.py | 434 | Verify that a job exists and the user has the required access. Args: session: The database | STRING |
| HIGH | letta/services/job_manager.py | 553 | Get all steps associated with a job. Args: job_id: The ID of the job to get steps for | STRING |
| HIGH | letta/services/agent_serialization_manager.py | 383 | Export agents and their related entities to AgentFileSchema format. Args: agent_ids: List | STRING |
| HIGH | letta/services/agent_serialization_manager.py | 509 | Import AgentFileSchema into the database. Args: schema: The agent file schema to import | STRING |
| HIGH | letta/services/agent_manager.py | 1975 | Lists all sources attached to an agent with pagination. Args: agent_id: ID of the agent to | STRING |
| HIGH | letta/services/agent_manager.py | 2758 | Attaches a tool to an agent. Args: agent_id: ID of the agent to attach the tool to. | STRING |
| HIGH | letta/services/agent_manager.py | 2901 | Attaches missing core file tools to an agent. Args: agent_state: The current agent state w | STRING |
| HIGH | letta/services/agent_manager.py | 2962 | Detach all core file tools from an agent. Args: agent_state: The current agent state with | STRING |
| HIGH | letta/services/message_manager.py | 910 | Most performant query to list messages by directly querying the Message table. This function filters b | STRING |
| HIGH | letta/services/message_manager.py | 1276 | Search messages across entire organization using Turbopuffer. Args: actor: User performing | STRING |
| HIGH | letta/services/step_manager.py | 286 | Update the transaction ID for a step. Args: actor: The user making the request step_id: | STRING |
| HIGH | letta/services/step_manager.py | 340 | Update the stop reason for a step. Args: actor: The user making the request step_id: Th | STRING |
| HIGH | letta/services/step_manager.py | 378 | Update a step with error information. Args: actor: The user making the request step_id: | STRING |
| HIGH | letta/services/step_manager.py | 426 | Update a step with success status and final usage statistics. Args: actor: The user making the requ | STRING |
| 22 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_modal_sandbox_v2.py | 450 | CODE | |
| LOW | tests/conftest.py | 24 | CODE | |
| LOW | tests/conftest.py | 70 | CODE | |
| LOW | tests/integration_test_cancellation.py | 91 | CODE | |
| LOW | tests/integration_test_async_tool_sandbox.py | 68 | CODE | |
| LOW | tests/integration_test_send_message.py | 215 | CODE | |
| LOW | tests/integration_test_send_message.py | 786 | CODE | |
| LOW | tests/integration_test_send_message.py | 895 | CODE | |
| LOW | tests/integration_test_send_message.py | 983 | CODE | |
| LOW | tests/integration_test_send_message.py | 1009 | CODE | |
| LOW | tests/integration_test_send_message.py | 984 | CODE | |
| LOW | tests/mcp_test.py | 240 | CODE | |
| LOW | tests/mcp_test.py | 260 | CODE | |
| LOW | tests/mcp_test.py | 280 | CODE | |
| LOW | tests/integration_test_override_model.py | 43 | CODE | |
| LOW | tests/test_sonnet_nonnative_reasoning_buffering.py | 134 | CODE | |
| LOW | tests/integration_test_agent_tool_graph.py | 501 | CODE | |
| LOW | tests/test_letta_agent_batch.py | 362 | CODE | |
| LOW | tests/test_letta_agent_batch.py | 448 | CODE | |
| LOW | tests/test_letta_agent_batch.py | 615 | CODE | |
| LOW | tests/test_letta_agent_batch.py | 781 | CODE | |
| LOW | tests/integration_test_multi_agent.py | 18 | CODE | |
| LOW | tests/integration_test_multi_agent.py | 135 | CODE | |
| LOW | tests/integration_test_multi_agent.py | 210 | CODE | |
| LOW | tests/integration_test_multi_agent.py | 325 | CODE | |
| LOW | tests/test_sdk_client.py | 1069 | CODE | |
| LOW | tests/test_sdk_client.py | 1154 | CODE | |
| LOW | tests/test_sdk_client.py | 1899 | CODE | |
| LOW | tests/test_sdk_client.py | 2164 | CODE | |
| LOW | tests/test_long_running_agents.py | 18 | CODE | |
| LOW | tests/integration_test_human_in_the_loop.py | 1175 | CODE | |
| LOW | tests/test_file_processor.py | 226 | CODE | |
| LOW | tests/integration_test_sleeptime_agent.py | 16 | CODE | |
| LOW | tests/integration_test_send_message_v2.py | 283 | CODE | |
| LOW | tests/integration_test_send_message_v2.py | 528 | CODE | |
| LOW | tests/test_managers.py | 5081 | CODE | |
| LOW | tests/test_tool_schema_parsing.py | 202 | CODE | |
| LOW | tests/test_agent_serialization.py | 39 | CODE | |
| LOW | tests/test_agent_serialization.py | 268 | CODE | |
| LOW | tests/test_agent_serialization.py | 486 | CODE | |
| LOW | tests/integration_test_modal_sandbox_v2.py | 632 | CODE | |
| LOW | tests/integration_test_builtin_tools.py | 24 | CODE | |
| LOW | tests/integration_test_builtin_tools.py | 161 | CODE | |
| LOW | tests/integration_test_clickhouse_llm_traces.py | 180 | CODE | |
| LOW | tests/integration_test_mcp.py | 27 | CODE | |
| LOW | tests/test_prompt_caching.py | 605 | CODE | |
| LOW | tests/test_prompt_caching.py | 697 | CODE | |
| LOW | tests/test_prompt_caching.py | 974 | CODE | |
| LOW | tests/performance_tests/test_agent_mass_creation.py | 253 | CODE | |
| LOW | tests/managers/test_cancellation.py | 1143 | CODE | |
| LOW | tests/managers/test_agent_manager.py | 1876 | CODE | |
| LOW | tests/managers/test_agent_manager.py | 1990 | CODE | |
| LOW | tests/managers/test_mcp_manager.py | 238 | CODE | |
| LOW | tests/managers/test_tool_manager.py | 1207 | CODE | |
| LOW | tests/sdk/conftest.py | 13 | CODE | |
| LOW | tests/sdk/conftest.py | 64 | CODE | |
| LOW | tests/sdk/conftest.py | 111 | CODE | |
| LOW | tests/sdk/conftest.py | 151 | CODE | |
| LOW | tests/sdk/mcp_servers_test.py | 31 | CODE | |
| LOW | tests/sdk/search_test.py | 294 | CODE | |
| 389 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/integration_test_turbopuffer.py | 411 | # Create simple embeddings for testing (normally you'd use a real embedding model) | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1319 | # and memory blocks are very large, potentially consuming most of the context window. | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1323 | # # Override context window to be small so we trigger summarization | COMMENT |
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1394 | # # Now the agent should be able to respond without context window errors | COMMENT |
| MEDIUM | tests/integration_test_summarizer.py | 1060 | # this model's context window so that we always trigger the | COMMENT |
| MEDIUM | tests/test_providers.py | 160 | # All MiniMax models have 200K context window | COMMENT |
| MEDIUM⚡ | tests/test_providers.py | 297 | # Test both sync and async context window methods | COMMENT |
| MEDIUM⚡ | tests/integration_test_system_prompt_prefix_caching.py | 58 | # Step 1: Get initial context window, system prompt, and human block value | COMMENT |
| MEDIUM⚡ | tests/integration_test_system_prompt_prefix_caching.py | 156 | # Step 1: Get initial context window | COMMENT |
| MEDIUM⚡ | tests/integration_test_system_prompt_prefix_caching.py | 183 | # Step 5: Get context window and verify core memory was recompiled | COMMENT |
| MEDIUM⚡ | tests/test_sdk_client.py | 660 | # List groups (most agents won't have groups unless in a multi-agent setup) | COMMENT |
| MEDIUM⚡ | tests/test_managers.py | 901 | # Non-production environment should include all multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/test_managers.py | 918 | # Production environment should exclude local-only multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/test_managers.py | 922 | # But should include standard multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/test_managers.py | 927 | # Non-production environment should include all multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/test_managers.py | 936 | # Upsert only multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/test_managers.py | 941 | # Should only have non-local multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/test_managers.py | 946 | # Should have all multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/test_managers.py | 5136 | # Adjust expected names for multi-agent tools in production | COMMENT |
| MEDIUM | tests/test_managers.py | 1046 | # Get context window and check for basic appearances | COMMENT |
| MEDIUM | tests/test_managers.py | 1169 | # test with small context window model (8k) | COMMENT |
| MEDIUM | tests/test_managers.py | 1189 | # test with medium context window model (32k) | COMMENT |
| MEDIUM | tests/test_managers.py | 1209 | # test with large context window model (128k) | COMMENT |
| MEDIUM | tests/test_sources.py | 282 | # Get agent state to retrieve file config defaults (dynamic based on model context window) | COMMENT |
| MEDIUM | tests/test_sources.py | 352 | # Get agent state to retrieve file config defaults (dynamic based on model context window) | COMMENT |
| MEDIUM⚡ | tests/integration_test_conversations_sdk.py | 537 | # We use an extremely long message to trigger a context window error | COMMENT |
| MEDIUM⚡ | tests/integration_test_conversations_sdk.py | 538 | very_long_message = "Hello " * 100000 # Very long message to exceed context window | CODE |
| MEDIUM⚡ | tests/integration_test_conversations_sdk.py | 548 | pass # Expected to fail due to context window exceeded | CODE |
| MEDIUM | tests/manual_test_multi_agent_broadcast_large.py | 58 | # Create "manager" agent with multi-agent broadcast tool | COMMENT |
| MEDIUM | tests/test_client.py | 754 | # get the sleeptime agent from the multi-agent group | COMMENT |
| MEDIUM | tests/test_server_providers.py | 497 | assert model_check.max_context_window == 64000 # Org model's context window | CODE |
| MEDIUM | tests/test_server_providers.py | 1683 | assert model.max_context_window == 16384 # Org model's context window | CODE |
| MEDIUM⚡ | tests/managers/test_agent_manager.py | 473 | # Non-production environment should include all multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/managers/test_agent_manager.py | 490 | # Production environment should exclude local-only multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/managers/test_agent_manager.py | 494 | # But should include standard multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/managers/test_agent_manager.py | 499 | # Non-production environment should include all multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/managers/test_agent_manager.py | 508 | # Upsert only multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/managers/test_agent_manager.py | 513 | # Should only have non-local multi-agent tools | COMMENT |
| MEDIUM⚡ | tests/managers/test_agent_manager.py | 518 | # Should have all multi-agent tools | COMMENT |
| MEDIUM | tests/managers/test_agent_manager.py | 610 | # Get context window and check for basic appearances | COMMENT |
| MEDIUM | tests/managers/test_agent_manager.py | 1056 | # test with small context window model (8k) | COMMENT |
| MEDIUM | tests/managers/test_agent_manager.py | 1077 | # test with medium context window model (32k) | COMMENT |
| MEDIUM | tests/managers/test_agent_manager.py | 1098 | # test with large context window model (128k) | COMMENT |
| MEDIUM⚡ | tests/managers/test_tool_manager.py | 1262 | # Adjust expected names for multi-agent tools in production | COMMENT |
| MEDIUM | tests/managers/test_provider_manager.py | 385 | # Test context window limit override would be done at server level | COMMENT |
| MEDIUM | .github/scripts/model-sweep/model_sweep.py | 737 | # pydantic prevents us for overriding the context window paramter in the passed LLMConfig | COMMENT |
| MEDIUM | …b/scripts/model-sweep/generate_model_sweep_markdown.py | 327 | # Get context window and last scanned time | COMMENT |
| MEDIUM | letta/constants.py | 58 | # String in the error message for when the context window is too large | COMMENT |
| MEDIUM | letta/constants.py | 77 | # context window size | COMMENT |
| MEDIUM | letta/constants.py | 442 | # Tool return truncation limit for LLM context window management | COMMENT |
| MEDIUM | letta/utils.py | 1365 | # If no context window info, use conservative defaults | COMMENT |
| MEDIUM | letta/utils.py | 1368 | # Define defaults based on context window ranges | COMMENT |
| MEDIUM | letta/agent.py | 432 | # check if we are going over the context window: this allows for articifial constraints | COMMENT |
| MEDIUM | letta/agent.py | 637 | # overflow the agent context window | COMMENT |
| MEDIUM | letta/agent.py | 1279 | # context window breakdown (in messages) | COMMENT |
| MEDIUM | letta/agent.py | 1288 | # context window breakdown (in tokens) | COMMENT |
| MEDIUM | letta/agent.py | 1411 | # context window breakdown (in messages) | COMMENT |
| MEDIUM | letta/agent.py | 1420 | # context window breakdown (in tokens) | COMMENT |
| MEDIUM | letta/agent.py | 1569 | # context window breakdown (in messages) | COMMENT |
| MEDIUM | letta/agent.py | 1578 | # context window breakdown (in tokens) | COMMENT |
| 53 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/integration_test_turbopuffer.py | 150 | # Check if our message ID is in the results | COMMENT |
| LOW | tests/integration_test_turbopuffer.py | 64 | # Set environment to DEV for testing | COMMENT |
| LOW | tests/conftest.py | 187 | # Set environment to DEV for testing | COMMENT |
| LOW | tests/integration_test_send_message.py | 378 | # Check if next message is LettaStopReason to detect this case | COMMENT |
| LOW | tests/integration_test_send_message.py | 831 | # Check if there are tool calls in the response | COMMENT |
| LOW | tests/integration_test_send_message.py | 905 | # Check if chunks are raw SSE strings (from background streaming) | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1567 | # # Check if content has system_alert type with the summary message (object form) | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1745 | # # Check if content has system_alert type with the summary message (object form) | COMMENT |
| LOW | tests/test_sonnet_nonnative_reasoning_buffering.py | 200 | # Check if this is inner thoughts | COMMENT |
| LOW | tests/test_sonnet_nonnative_reasoning_buffering.py | 251 | # Check if we detected large bursts | COMMENT |
| LOW | tests/test_sdk_client.py | 631 | # Check if modify method exists | COMMENT |
| LOW⚡ | tests/test_temporal_metrics_local.py | 109 | # Check if DogStatsD is listening | COMMENT |
| LOW | tests/integration_test_send_message_v2.py | 752 | # Check if tool calls are grouped in a single message (parallel) or separate messages (sequential) | COMMENT |
| LOW | tests/integration_test_send_message_v2.py | 777 | # Check if we have true parallel tool calling | COMMENT |
| LOW | tests/integration_test_send_message_v2.py | 780 | # Check if the single message contains multiple tool calls | COMMENT |
| LOW | tests/test_tool_schema_parsing.py | 150 | # Check if we expect the conversion to fail | COMMENT |
| LOW | tests/integration_test_multi_modal_tool_returns.py | 398 | # Check if this is a tool return message that might contain our image | COMMENT |
| LOW | tests/test_server_providers.py | 2383 | # Check if provider already exists | COMMENT |
| LOW | tests/test_server_providers.py | 2633 | # Set last_synced to indicate models are already synced | COMMENT |
| LOW | tests/test_prompt_caching.py | 827 | # Check if ANY of the follow-up messages had a cache hit | COMMENT |
| LOW | tests/test_prompt_caching.py | 961 | # Check if ANY of the follow-up messages had a cache hit | COMMENT |
| LOW | tests/managers/test_cancellation.py | 1280 | # Check if message has tool_returns (new format) or tool_return (old format) | COMMENT |
| LOW | tests/managers/test_agent_manager.py | 2008 | # Check if expected type is in the union | COMMENT |
| LOW | otel/start-otel-collector.sh | 92 | # Check if update is needed | COMMENT |
| LOW | sandbox/node_server.py | 66 | # Check if there was an error | COMMENT |
| LOW | .github/scripts/model-sweep/conftest.py | 166 | # Check if already running | COMMENT |
| LOW | …d06594144ef3_add_and_migrate_encrypted_columns_for_.py | 37 | # Check if encryption key is available | COMMENT |
| LOW | …rsions/8149a781ac1b_backfill_encrypted_columns_for_.py | 27 | # Check if encryption key is available | COMMENT |
| LOW | …c/versions/74e860718e0d_add_archival_memory_sharing.py | 57 | # Check if archives table already exists | COMMENT |
| LOW | …/versions/eff256d296cb_mcp_encrypted_data_migration.py | 30 | # Check if encryption key is available | COMMENT |
| LOW | letta/streaming_utils.py | 287 | # Check if this same chunk also contains the terminating quote (and optional delimiter) | COMMENT |
| LOW | letta/utils.py | 1167 | # Check if coro is an async generator instead of a coroutine | COMMENT |
| LOW | letta/agent.py | 553 | # Check if inner thoughts is in the function call arguments (possible apparently if you are using Azure) | COMMENT |
| LOW | letta/agent.py | 1217 | # Check if there's a summary message in the message queue | COMMENT |
| LOW | letta/agent.py | 1350 | # Check if there's a summary message in the message queue | COMMENT |
| LOW | letta/agent.py | 1488 | # Check if there's a summary message in the message queue | COMMENT |
| LOW | letta/local_llm/function_parser.py | 46 | # Check if it's a user message or system message | COMMENT |
| LOW | letta/local_llm/utils.py | 50 | # Check if the file exists | COMMENT |
| LOW⚡ | letta/local_llm/settings/settings.py | 29 | # Check if settings_dir folder exists (if not, create it) | COMMENT |
| LOW | letta/local_llm/grammars/gbnf_grammar_generator.py | 473 | # Check if the field is optional (not required) | COMMENT |
| LOW | letta/local_llm/grammars/gbnf_grammar_generator.py | 85 | if not parts: # Check if the list is empty | CODE |
| LOW | letta/agents/letta_agent_v3.py | 289 | # Check if we should use SGLang native adapter for multi-turn RL training. | COMMENT |
| LOW | letta/agents/letta_agent_v3.py | 358 | # Check if step was cancelled - break out of the step loop | COMMENT |
| LOW | letta/agents/letta_agent_v3.py | 424 | # Set context_tokens to expose actual context window usage (vs accumulated prompt_tokens) | COMMENT |
| LOW | letta/agents/letta_agent_v3.py | 502 | # Check if we should use SGLang native adapter for multi-turn RL training | COMMENT |
| LOW | letta/agents/letta_agent_v3.py | 615 | # Check if step was cancelled - break out of the step loop | COMMENT |
| LOW | letta/agents/letta_agent_v3.py | 696 | # Set context_tokens to expose actual context window usage (vs accumulated prompt_tokens) | COMMENT |
| LOW | letta/agents/letta_agent_v3.py | 1184 | # Check if there's a fallback route for the current model | COMMENT |
| LOW | letta/agents/letta_agent_v3.py | 1625 | # Check if there are required-before-exit tools that haven't been called | COMMENT |
| LOW | letta/agents/letta_agent_v3.py | 1999 | # Check if the LLM hit max_tokens (finish_reason == "length") | COMMENT |
| LOW⚡ | letta/server/server.py | 1812 | # Check if the server name is already in the config | COMMENT |
| LOW⚡ | letta/server/server.py | 1883 | # Check if the server name is already in the config | COMMENT |
| LOW | letta/server/startup.sh | 23 | # Check if we're configured for external Redis | COMMENT |
| LOW | letta/server/startup.sh | 38 | # Check if we're configured for external Postgres | COMMENT |
| LOW | letta/server/ws_api/server.py | 110 | # Check if a port argument is provided | COMMENT |
| LOW | letta/server/ws_api/interface.py | 37 | if self.clients: # Check if there are any clients connected | CODE |
| LOW | letta/server/rest_api/streaming_response.py | 132 | # Check if there's anything left | COMMENT |
| LOW⚡ | letta/server/rest_api/proxy_helpers.py | 319 | # Set max_tokens to budget_tokens + reasonable buffer for response | COMMENT |
| LOW | letta/server/rest_api/proxy_helpers.py | 28 | # Check if entire message is a policy spec (starts with tag) | COMMENT |
| LOW | letta/server/rest_api/proxy_helpers.py | 33 | # Check if policy spec is appended (with prefix) | COMMENT |
| 145 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_openai_ws_session.py | 5 | CODE | |
| LOW | tests/integration_test_tool_execution_sandbox.py | 13 | CODE | |
| LOW | tests/integration_test_async_tool_sandbox.py | 18 | CODE | |
| LOW | tests/integration_test_async_tool_sandbox.py | 383 | CODE | |
| LOW | tests/integration_test_send_message.py | 32 | CODE | |
| LOW | tests/integration_test_modal.py | 14 | CODE | |
| LOW | …sions/b888f21b151f_add_vector_db_provider_to_source.py | 26 | CODE | |
| LOW | …sions/b888f21b151f_add_vector_db_provider_to_source.py | 26 | CODE | |
| LOW | letta/__init__.py | 25 | CODE | |
| LOW | letta/__init__.py | 26 | CODE | |
| LOW | letta/__init__.py | 27 | CODE | |
| LOW | letta/__init__.py | 28 | CODE | |
| LOW | letta/__init__.py | 29 | CODE | |
| LOW | letta/__init__.py | 30 | CODE | |
| LOW | letta/__init__.py | 31 | CODE | |
| LOW | letta/__init__.py | 31 | CODE | |
| LOW | letta/__init__.py | 31 | CODE | |
| LOW | letta/__init__.py | 32 | CODE | |
| LOW | letta/__init__.py | 33 | CODE | |
| LOW | letta/__init__.py | 34 | CODE | |
| LOW | letta/__init__.py | 34 | CODE | |
| LOW | letta/__init__.py | 34 | CODE | |
| LOW | letta/__init__.py | 34 | CODE | |
| LOW | letta/__init__.py | 34 | CODE | |
| LOW | letta/__init__.py | 41 | CODE | |
| LOW | letta/__init__.py | 42 | CODE | |
| LOW | letta/__init__.py | 43 | CODE | |
| LOW | letta/__init__.py | 44 | CODE | |
| LOW | letta/__init__.py | 45 | CODE | |
| LOW | letta/__init__.py | 46 | CODE | |
| LOW | letta/__init__.py | 47 | CODE | |
| LOW | letta/__init__.py | 19 | CODE | |
| LOW | letta/errors.py | 7 | CODE | |
| LOW | letta/errors.py | 8 | CODE | |
| LOW | letta/serialize_schemas/__init__.py | 1 | CODE | |
| LOW | letta/agents/base_agent.py | 18 | CODE | |
| LOW | letta/agents/agent_loop.py | 12 | CODE | |
| LOW | letta/agents/letta_agent.py | 9 | CODE | |
| LOW | letta/agents/letta_agent.py | 51 | CODE | |
| LOW | letta/agents/base_agent_v2.py | 14 | CODE | |
| LOW | letta/agents/base_agent_v2.py | 14 | CODE | |
| LOW | letta/agents/base_agent_v2.py | 15 | CODE | |
| LOW | letta/agents/voice_sleeptime_agent.py | 4 | CODE | |
| LOW | letta/agents/letta_agent_v3.py | 73 | CODE | |
| LOW | letta/server/rest_api/dependencies.py | 13 | CODE | |
| LOW | letta/server/rest_api/routers/v1/tags.py | 8 | CODE | |
| LOW | letta/server/rest_api/routers/v1/internal_agents.py | 5 | CODE | |
| LOW | letta/server/rest_api/routers/v1/users.py | 11 | CODE | |
| LOW | letta/server/rest_api/routers/v1/git_http.py | 20 | CODE | |
| LOW | letta/server/rest_api/routers/v1/internal_runs.py | 10 | CODE | |
| LOW | letta/server/rest_api/routers/v1/archives.py | 12 | CODE | |
| LOW | letta/server/rest_api/routers/v1/identities.py | 20 | CODE | |
| LOW | letta/server/rest_api/routers/v1/agents.py | 52 | CODE | |
| LOW | letta/server/rest_api/routers/v1/voice.py | 9 | CODE | |
| LOW | letta/server/rest_api/routers/v1/jobs.py | 9 | CODE | |
| LOW | letta/server/rest_api/routers/v1/providers.py | 12 | CODE | |
| LOW | letta/server/rest_api/routers/v1/organizations.py | 9 | CODE | |
| LOW | letta/server/rest_api/routers/v1/llms.py | 10 | CODE | |
| LOW | letta/server/rest_api/routers/v1/internal_templates.py | 10 | CODE | |
| LOW | letta/server/rest_api/routers/v1/runs.py | 24 | CODE | |
| 260 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integration_test_client_side_tools.py | 92 | # Step 1: User asks for the secret code - agent should call the tool | COMMENT |
| LOW | tests/integration_test_client_side_tools.py | 109 | # Step 2: Provide the tool return (simulating client-side execution) | COMMENT |
| LOW | tests/integration_test_client_side_tools.py | 152 | # Step 3: Ask the agent what the secret code was (testing memory/context) | COMMENT |
| LOW | tests/integration_test_client_side_tools.py | 173 | # Step 4: Validate the full conversation history makes sense | COMMENT |
| LOW | tests/integration_test_client_side_tools.py | 242 | # Step 1: Call the tool WITH client_tools specified - should pause for approval | STRING |
| LOW | tests/integration_test_client_side_tools.py | 261 | # Step 2: Provide client-side tool return | STRING |
| LOW | tests/integration_test_client_side_tools.py | 286 | # Step 3: Verify the client value was used, not the server value | STRING |
| LOW | tests/integration_test_client_side_tools.py | 306 | # Step 4: Test that WITHOUT client_tools, server tool executes directly | STRING |
| LOW | tests/integration_test_client_side_tools.py | 354 | # Step 1: Trigger the client-side tool call | STRING |
| LOW | tests/integration_test_client_side_tools.py | 366 | # Step 2: Provide an error response | STRING |
| LOW⚡ | tests/test_mcp_encryption.py | 251 | # Step 1: Create OAuth session (without tokens initially) | COMMENT |
| LOW | tests/test_mcp_encryption.py | 264 | # Step 2: Update session with tokens (simulating OAuth callback) | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 58 | # Step 1: Get initial context window, system prompt, and human block value | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 109 | # Step 5: Verify system prompt still hasn't changed | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 114 | # Step 6: Manually update a block via the API | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 156 | # Step 1: Get initial context window | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 161 | # Step 2: Get the human block | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 170 | # Step 3: Update block via agent-specific endpoint (triggers recompilation) | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 179 | # Step 4: Verify the block was updated | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 183 | # Step 5: Get context window and verify core memory was recompiled | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 192 | # Step 6: System prompt template should NOT change (only memory content changes) | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 205 | # Step 1: Get initial system prompt | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 209 | # Step 2: Manually update a block via the API | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 224 | # Step 3: Reset messages (this should trigger system prompt rebuild) | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 227 | # Step 4: Verify system prompt HAS changed and includes the new memory | COMMENT |
| LOW | tests/integration_test_system_prompt_prefix_caching.py | 72 | # Step 2: Tell the agent to update its memory using the memory tool | COMMENT |
| LOW | tests/integration_test_system_prompt_prefix_caching.py | 84 | # Step 3: Verify block was modified but system prompt hasn't changed | COMMENT |
| LOW | tests/integration_test_system_prompt_prefix_caching.py | 97 | # Step 4: Send another message to the agent | COMMENT |
| LOW | tests/integration_test_system_prompt_prefix_caching.py | 129 | # Step 7: Send another message and verify system prompt still hasn't changed | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 367 | # Step 0: create an agent with no tags | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 380 | # Step 1: Add multiple tags to the agent | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 386 | # Step 2: Retrieve tags for the agent and verify they match the added tags | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 392 | # Step 3: Retrieve agents by each tag to ensure the agent is associated correctly | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 397 | # Step 4: Delete a specific tag from the agent and verify its removal | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 406 | # Step 5: Delete all remaining tags from the agent | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1351 | # Step 1: Send message that triggers approval request | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1358 | # Step 2: Start approval stream and wait for first chunk (sentinel approach) | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1395 | # Step 4: Accumulate remaining chunks (already collected above) | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1397 | # Step 5: Verify we got chunks AND a cancelled stop reason | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1405 | # Step 6: Verify run status is cancelled | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1412 | # Step 7: Verify that approval response message is persisted | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1418 | # Step 8: Attempt retry with same response | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1438 | # Step 9: Accumulate chunks | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1441 | # Step 10: Verify we got chunks AND an end_turn stop reason | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1449 | # Step 11: Verify keep-alive message was sent | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1471 | # Step 1: Send message that triggers approval request | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1478 | # Step 2: Start approval stream and wait for first chunk (sentinel approach) | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1515 | # Step 4: Verify we got cancelled | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1520 | # Step 6: Verify tool return message is persisted | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1525 | # Step 7: Call compact with mode='all' to evict all messages from context | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1531 | # Step 8: Verify only system and summary messages remain in context (should be 2) | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1538 | # Step 9: Retry the original approval response - should succeed via idempotency check | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1558 | # Step 10: Accumulate chunks | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1561 | # Step 11: Verify we got chunks AND an end_turn stop reason (not an error) | COMMENT |
| LOW | tests/integration_test_human_in_the_loop.py | 1379 | # Step 3: Wait for first chunk before triggering cancellation | COMMENT |
| LOW | tests/integration_test_human_in_the_loop.py | 1499 | # Step 3: Wait for first chunk before triggering cancellation | COMMENT |
| LOW⚡ | tests/test_managers.py | 6569 | # Step 1: Create block | COMMENT |
| LOW⚡ | tests/test_managers.py | 6575 | # Step 2: Update to v2, checkpoint => seq=2 | COMMENT |
| LOW⚡ | tests/test_managers.py | 6581 | # Step 3: Update to v3, checkpoint => seq=3 | COMMENT |
| LOW⚡ | tests/test_managers.py | 6732 | # Step 1: create initial block => seq=1 | COMMENT |
| 68 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integration_test_client_side_tools.py | 92 | # Step 1: User asks for the secret code - agent should call the tool | COMMENT |
| LOW | tests/integration_test_client_side_tools.py | 109 | # Step 2: Provide the tool return (simulating client-side execution) | COMMENT |
| LOW | tests/integration_test_client_side_tools.py | 152 | # Step 3: Ask the agent what the secret code was (testing memory/context) | COMMENT |
| LOW | tests/integration_test_client_side_tools.py | 173 | # Step 4: Validate the full conversation history makes sense | COMMENT |
| LOW | tests/integration_test_client_side_tools.py | 242 | # Step 1: Call the tool WITH client_tools specified - should pause for approval | STRING |
| LOW | tests/integration_test_client_side_tools.py | 261 | # Step 2: Provide client-side tool return | STRING |
| LOW | tests/integration_test_client_side_tools.py | 286 | # Step 3: Verify the client value was used, not the server value | STRING |
| LOW | tests/integration_test_client_side_tools.py | 306 | # Step 4: Test that WITHOUT client_tools, server tool executes directly | STRING |
| LOW | tests/integration_test_client_side_tools.py | 354 | # Step 1: Trigger the client-side tool call | STRING |
| LOW | tests/integration_test_client_side_tools.py | 366 | # Step 2: Provide an error response | STRING |
| LOW⚡ | tests/test_mcp_encryption.py | 251 | # Step 1: Create OAuth session (without tokens initially) | COMMENT |
| LOW | tests/test_mcp_encryption.py | 264 | # Step 2: Update session with tokens (simulating OAuth callback) | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 58 | # Step 1: Get initial context window, system prompt, and human block value | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 109 | # Step 5: Verify system prompt still hasn't changed | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 114 | # Step 6: Manually update a block via the API | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 156 | # Step 1: Get initial context window | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 161 | # Step 2: Get the human block | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 170 | # Step 3: Update block via agent-specific endpoint (triggers recompilation) | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 179 | # Step 4: Verify the block was updated | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 183 | # Step 5: Get context window and verify core memory was recompiled | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 192 | # Step 6: System prompt template should NOT change (only memory content changes) | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 205 | # Step 1: Get initial system prompt | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 209 | # Step 2: Manually update a block via the API | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 224 | # Step 3: Reset messages (this should trigger system prompt rebuild) | COMMENT |
| LOW⚡ | tests/integration_test_system_prompt_prefix_caching.py | 227 | # Step 4: Verify system prompt HAS changed and includes the new memory | COMMENT |
| LOW | tests/integration_test_system_prompt_prefix_caching.py | 72 | # Step 2: Tell the agent to update its memory using the memory tool | COMMENT |
| LOW | tests/integration_test_system_prompt_prefix_caching.py | 84 | # Step 3: Verify block was modified but system prompt hasn't changed | COMMENT |
| LOW | tests/integration_test_system_prompt_prefix_caching.py | 97 | # Step 4: Send another message to the agent | COMMENT |
| LOW | tests/integration_test_system_prompt_prefix_caching.py | 129 | # Step 7: Send another message and verify system prompt still hasn't changed | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 367 | # Step 0: create an agent with no tags | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 380 | # Step 1: Add multiple tags to the agent | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 386 | # Step 2: Retrieve tags for the agent and verify they match the added tags | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 392 | # Step 3: Retrieve agents by each tag to ensure the agent is associated correctly | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 397 | # Step 4: Delete a specific tag from the agent and verify its removal | COMMENT |
| LOW⚡ | tests/test_sdk_client.py | 406 | # Step 5: Delete all remaining tags from the agent | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1351 | # Step 1: Send message that triggers approval request | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1358 | # Step 2: Start approval stream and wait for first chunk (sentinel approach) | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1395 | # Step 4: Accumulate remaining chunks (already collected above) | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1397 | # Step 5: Verify we got chunks AND a cancelled stop reason | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1405 | # Step 6: Verify run status is cancelled | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1412 | # Step 7: Verify that approval response message is persisted | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1418 | # Step 8: Attempt retry with same response | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1438 | # Step 9: Accumulate chunks | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1441 | # Step 10: Verify we got chunks AND an end_turn stop reason | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1449 | # Step 11: Verify keep-alive message was sent | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1471 | # Step 1: Send message that triggers approval request | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1478 | # Step 2: Start approval stream and wait for first chunk (sentinel approach) | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1515 | # Step 4: Verify we got cancelled | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1520 | # Step 6: Verify tool return message is persisted | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1525 | # Step 7: Call compact with mode='all' to evict all messages from context | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1531 | # Step 8: Verify only system and summary messages remain in context (should be 2) | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1538 | # Step 9: Retry the original approval response - should succeed via idempotency check | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1558 | # Step 10: Accumulate chunks | COMMENT |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 1561 | # Step 11: Verify we got chunks AND an end_turn stop reason (not an error) | COMMENT |
| LOW | tests/integration_test_human_in_the_loop.py | 1379 | # Step 3: Wait for first chunk before triggering cancellation | COMMENT |
| LOW | tests/integration_test_human_in_the_loop.py | 1499 | # Step 3: Wait for first chunk before triggering cancellation | COMMENT |
| LOW⚡ | tests/test_managers.py | 6569 | # Step 1: Create block | COMMENT |
| LOW⚡ | tests/test_managers.py | 6575 | # Step 2: Update to v2, checkpoint => seq=2 | COMMENT |
| LOW⚡ | tests/test_managers.py | 6581 | # Step 3: Update to v3, checkpoint => seq=3 | COMMENT |
| LOW⚡ | tests/test_managers.py | 6732 | # Step 1: create initial block => seq=1 | COMMENT |
| 68 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/integration_test_summarizer.py | 1307 | ### in order to leverage caching (for self compaction) | COMMENT |
| MEDIUM⚡ | tests/test_agent_serialization_v2.py | 772 | """Test file export functionality with comprehensive validation""" | STRING |
| MEDIUM⚡ | tests/integration_test_usage_tracking.py | 449 | # Use Anthropic Sonnet 4.5 for this test as it has the most comprehensive caching | COMMENT |
| MEDIUM⚡ | tests/test_managers.py | 1279 | # Create an agent using the comprehensive fixture. | COMMENT |
| MEDIUM⚡ | tests/test_managers.py | 1297 | # Create an agent using the comprehensive fixture. | COMMENT |
| MEDIUM | tests/test_managers.py | 3612 | """Test comprehensive tag functionality for passages.""" | STRING |
| MEDIUM | tests/managers/conftest.py | 364 | """Create a comprehensive test agent with all features.""" | STRING |
| MEDIUM | tests/managers/test_passage_manager.py | 815 | """Test comprehensive tag functionality for passages.""" | STRING |
| MEDIUM⚡ | tests/managers/test_agent_manager.py | 1210 | # Create an agent using the comprehensive fixture. | COMMENT |
| MEDIUM⚡ | tests/managers/test_agent_manager.py | 1228 | # Create an agent using the comprehensive fixture. | COMMENT |
| MEDIUM | …empty_archival/agent_state/2024-01-11_12_44_32_PM.json | 1 | {"model": "gpt-4", "system": "You are Letta, the latest version of Limnal Corporation's digital companion, developed in | CODE |
| MEDIUM | …empty_archival/agent_state/2024-01-11_12_44_33_PM.json | 1 | {"model": "gpt-4", "system": "You are Letta, the latest version of Limnal Corporation's digital companion, developed in | CODE |
| MEDIUM | …nt_test_attach/agent_state/2024-01-11_12_42_19_PM.json | 1 | {"model": "gpt-4", "system": "You are Letta, the latest version of Limnal Corporation's digital companion, developed in | CODE |
| MEDIUM | …nt_test_attach/agent_state/2024-01-11_12_42_17_PM.json | 1 | {"model": "gpt-4", "system": "You are Letta, the latest version of Limnal Corporation's digital companion, developed in | CODE |
| MEDIUM | …nts/agent_test/agent_state/2024-01-11_12_43_59_PM.json | 1 | {"model": "gpt-4", "system": "You are Letta, the latest version of Limnal Corporation's digital companion, developed in | CODE |
| MEDIUM | …nts/agent_test/agent_state/2024-01-11_12_43_57_PM.json | 1 | {"model": "gpt-4", "system": "You are Letta, the latest version of Limnal Corporation's digital companion, developed in | CODE |
| MEDIUM | letta/streaming_utils.py | 268 | # Not in message yet: accumulate until we see '<json_key>': (robust to split fragments) | COMMENT |
| MEDIUM⚡ | letta/agent.py | 1740 | # If it exists in the input message, elevate it to the 'message' level | COMMENT |
| LOW | letta/agent.py | 950 | # Fallback if for some reason context_window is missing, just set to the default | COMMENT |
| LOW | letta/agent.py | 1134 | # Fallback if for some reason context_window is missing, just set to the default | COMMENT |
| MEDIUM | letta/agent.py | 314 | """Get response from LLM API with robust retry mechanism.""" | STRING |
| LOW | letta/serialize_schemas/marshmallow_agent.py | 117 | # no user messages, just return system message | COMMENT |
| LOW | letta/serialize_schemas/marshmallow_agent.py | 152 | # no user messages, just return system message | COMMENT |
| MEDIUM | letta/agents/letta_agent_v3.py | 1238 | # NOTE: we no longer refresh the system prompt before compaction so we can leverage cach | COMMENT |
| MEDIUM | letta/agents/letta_agent_v3.py | 1461 | # NOTE: we no longer refresh the system prompt before compaction so we can leverage cache for self m | COMMENT |
| MEDIUM | letta/server/rest_api/interface.py | 307 | # To make streamed arguments robust, we add a JSON-aware incremental | COMMENT |
| LOW | letta/server/rest_api/interface.py | 1120 | # Example where we just pass through the raw stream from the underlying OpenAI SSE stream | COMMENT |
| LOW | letta/server/rest_api/auth_token.py | 15 | # user is admin so we just return the default uuid | COMMENT |
| LOW | letta/server/rest_api/routers/v1/tools.py | 557 | # TODO: don't do this in the future (just return MCPServer) | COMMENT |
| LOW | letta/server/rest_api/routers/v1/tools.py | 612 | # TODO: don't do this in the future (just return MCPServer) | COMMENT |
| LOW | letta/schemas/sandbox_config.py | 45 | # If `data` is not a dict (e.g., it's another Pydantic model), just return it | COMMENT |
| LOW | letta/schemas/sandbox_config.py | 73 | # If `data` is not a dict (e.g., it's another Pydantic model), just return it | COMMENT |
| LOW | letta/schemas/message.py | 641 | # TODO remove the cast and just return the native type | COMMENT |
| LOW | letta/schemas/message.py | 728 | # If assistant mode is off, just create one ToolCallMessage with all tool calls | COMMENT |
| LOW⚡ | letta/schemas/providers/anthropic.py | 138 | # just use a cheap model to count some tokens - as of 5/7/2025 this is faster than fetching the list of mode | COMMENT |
| LOW | letta/schemas/providers/base.py | 96 | # Simplified asyncio handling - just use asyncio.run() | COMMENT |
| LOW | letta/schemas/providers/base.py | 120 | # Simplified asyncio handling - just use asyncio.run() | COMMENT |
| LOW | letta/functions/typescript_parser.py | 180 | # Handle union types (simplified - just use string) | COMMENT |
| LOW | letta/functions/mcp_client/types.py | 94 | # If the result still contains unreplaced templates, just return original value | COMMENT |
| MEDIUM | letta/orm/sqlalchemy_base.py | 278 | # TODO (cliandy): can make this more robust down the line | COMMENT |
| MEDIUM | letta/llm_api/openai_client.py | 574 | # don't raise error since this isn't robust against edge cases | COMMENT |
| LOW | letta/llm_api/openai_client.py | 646 | # For text or json_object, just pass the type | COMMENT |
| MEDIUM⚡ | letta/services/mcp_manager.py | 1130 | # TODO: @jnjpng make this check more robust and remove direct os.getenv | COMMENT |
| MEDIUM⚡ | letta/services/mcp_server_manager.py | 1326 | # TODO: @jnjpng make this check more robust and remove direct os.getenv | COMMENT |
| MEDIUM | letta/services/tool_sandbox/modal_sandbox_v2.py | 418 | # Start with a more robust base image with development tools | COMMENT |
| LOW | letta/interfaces/anthropic_streaming_interface.py | 150 | # This interface doesn't track cache tokens, so we just use the raw values | COMMENT |
| LOW | letta/interfaces/anthropic_streaming_interface.py | 702 | # This interface doesn't track cache tokens, so we just use the raw values | COMMENT |
| MEDIUM | letta/interfaces/openai_streaming_interface.py | 476 | # Minimal, robust extraction: only emit the value of "message". | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conf.yaml | 1 | # Letta Configuration File | COMMENT |
| LOW | conf.yaml | 161 | # Letta Client (LETTA_DEFAULT_*) | COMMENT |
| LOW | conf.yaml | 281 | # api_key: "" | COMMENT |
| LOW | conf.yaml | 301 | COMMENT | |
| LOW | conf.yaml | 321 | # sglang: | COMMENT |
| LOW | conf.yaml | 341 | # sandbox_template_id: "" | COMMENT |
| LOW | conf.yaml | 361 | COMMENT | |
| LOW | conf.yaml | 381 | # health_metrics_enabled: false | COMMENT |
| LOW | conf.yaml | 401 | # | COMMENT |
| LOW | alembic.ini | 1 | # A generic, single database configuration. | COMMENT |
| LOW | alembic.ini | 21 | # Any required deps can installed by adding `alembic[tz]` to the pip requirements | COMMENT |
| LOW | alembic.ini | 41 | # The path separator used here should be the separator specified by "version_path_separator" below. | COMMENT |
| LOW | alembic.ini | 61 | # output_encoding = utf-8 | COMMENT |
| LOW | tests/locust_test.py | 81 | # response = requests.post(f"{self.base_url}/api/agents/{agent_id}/messages", json=request.model_dump(), head | COMMENT |
| LOW | tests/locust_test.py | 101 | # try: | COMMENT |
| LOW | tests/test_crypto_utils.py | 421 | This simulates the real-world scenario of existing encrypted values | COMMENT |
| LOW | tests/integration_test_async_tool_sandbox.py | 41 | COMMENT | |
| LOW | tests/integration_test_send_message.py | 1901 | assert_greeting_with_assistant_message_response(messages_from_db, model_handle, model_settings, from_db=True) | COMMENT |
| LOW | tests/integration_test_send_message.py | 1921 | # client.agents.update(agent_id=agent_state.id, model=model_handle, model_settings=model_settings) | COMMENT |
| LOW | tests/integration_test_send_message.py | 2281 | # # ids=[c.model for c in TESTED_LLM_CONFIGS], | COMMENT |
| LOW | tests/integration_test_send_message.py | 2301 | # # Verify the job was created | COMMENT |
| LOW | tests/integration_test_send_message.py | 2321 | # def test_job_cancellation_endpoint_validation( | COMMENT |
| LOW | tests/integration_test_send_message.py | 2341 | # disable_e2b_api_key: Any, | COMMENT |
| LOW | tests/integration_test_send_message.py | 2361 | # # Try to cancel the completed job - should fail | COMMENT |
| LOW | tests/integration_test_send_message.py | 2381 | # This verifies that jobs continue even if the client "disconnects" (simulated by not consuming the stream). | COMMENT |
| LOW | tests/integration_test_send_message.py | 2401 | # ) | COMMENT |
| LOW | tests/integration_test_send_message.py | 2561 | COMMENT | |
| LOW | tests/integration_test_summarizer.py | 41 | COMMENT | |
| LOW | tests/integration_test_summarizer.py | 581 | # TESTED_LLM_CONFIGS, | COMMENT |
| LOW | tests/integration_test_summarizer.py | 601 | # content=[ | COMMENT |
| LOW | tests/integration_test_summarizer.py | 621 | # ], | COMMENT |
| LOW | tests/integration_test_summarizer.py | 641 | # # Find tool return messages in the result and verify truncation occurred | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1301 | ) | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1321 | # """ | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1341 | # agent_state = await server.agent_manager.create_agent_async(agent_create, actor=actor) | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1361 | # ) | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1381 | # # Reload agent state after repairs | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1401 | # # Verify we got a valid response after repair | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1421 | # from unittest.mock import patch | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1441 | # messages.append( | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1461 | # id=test_run_id, | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1481 | # from unittest.mock import MagicMock | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1501 | # response=mock_response, | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1521 | # stream_tokens=True, | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1541 | # # Verify a summary message exists with the correct format | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1561 | # if "prior messages" in text_to_check and "hidden" in text_to_check and "summary of the previous" in | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1581 | # # Verify we attempted multiple invocations (the failing one + retry after summarization) | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1601 | # Note: This test only runs with OpenAI since it uses OpenAI-specific error handling. | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1621 | # content=[TextContent(type="text", text=f"User message {i}: This is test message number {i}.")], | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1641 | # run_manager = RunManager() | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1661 | # if call_count == 1: | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1681 | # message="This model's maximum context length is 8000 tokens. However, your messages resulted in 12000 t | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1701 | # run_id=test_run_id, | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1721 | # # "prior messages ... have been hidden" and "summary of the previous" | COMMENT |
| LOW | tests/integration_test_summarizer.py | 1741 | # summary_message_text = parsed.get("message") | COMMENT |
| LOW | tests/test_providers.py | 261 | assert len(embedding_models) == 0 # embedding models currently not supported by SGLang | COMMENT |
| LOW | tests/integration_test_agent_tool_graph.py | 861 | # Check order | COMMENT |
| LOW | tests/integration_test_agent_tool_graph.py | 881 | # -- flip_coin | COMMENT |
| LOW | tests/integration_test_agent_tool_graph.py | 901 | # child_output_mapping={ | COMMENT |
| LOW | tests/integration_test_agent_tool_graph.py | 921 | # found_secret_word = False | COMMENT |
| 101 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …/integration_test_typescript_tool_execution_sandbox.py | 595 | assert "let client: any = null;" in script | CODE |
| HIGH | …/integration_test_typescript_tool_execution_sandbox.py | 615 | result, agent_state = parse_typescript_result('{"results": 42, "agent_state": null}') | CODE |
| HIGH | tests/managers/test_message_manager.py | 1087 | arguments='{"message": {"status": "success", "data": {"count": 42, "items": ["a", "b"]}, "meta": null}}' | CODE |
| HIGH | letta/streaming_utils.py | 106 | # numbers, null, or a nested object/array) streamed in next, the stream | COMMENT |
| HIGH | letta/local_llm/json_parser.py | 63 | - if (function call is not send_message && prev message['role'] == user): insert heartbeat | STRING |
| HIGH | letta/server/rest_api/routers/v1/groups.py | 168 | include_return_message_types: Optional[List[MessageType]] = Query(None, description="Message types to include in res | CODE |
| HIGH | letta/server/rest_api/routers/v1/agents.py | 1601 | include_return_message_types: Optional[List[MessageType]] = Query(None, description="Message types to include in res | CODE |
| HIGH | letta/server/rest_api/routers/v1/messages.py | 46 | None, description="Message types to include in response. When null, all message types are returned." | CODE |
| HIGH | letta/server/rest_api/routers/v1/conversations.py | 214 | include_return_message_types: Optional[List[MessageType]] = Query(None, description="Message types to include in res | CODE |
| HIGH | letta/schemas/providers.py | 283 | # "param": null, | COMMENT |
| HIGH | letta/schemas/providers/openai.py | 184 | # "param": null, | COMMENT |
| HIGH | letta/functions/schema_validator.py | 173 | # They represent union types (e.g., string | null) | COMMENT |
| HIGH | letta/functions/helpers.py | 288 | # If we have exactly one type and null, make it Optional | COMMENT |
| HIGH | letta/llm_api/helpers.py | 39 | # If it's simple primitives only (string, null, integer, boolean, etc), flatten to type array | COMMENT |
| HIGH | letta/services/mcp_server_manager.py | 9 | from sqlalchemy import delete, desc, null, select | CODE |
| HIGH | letta/services/tool_sandbox/typescript_generator.py | 140 | "let client: any = null;", | CODE |
| HIGH | letta/services/tool_sandbox/typescript_generator.py | 209 | lines.append("const _output = { results: _result, agent_state: null };") | CODE |
| HIGH | letta/services/provider_trace_backends/clickhouse.py | 96 | # OpenAI Responses API returns {"error": null} on success | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_agent_serialization_v2.py | 184 | CODE | |
| LOW | tests/sdk/conftest.py | 256 | CODE | |
| LOW | letta/database_utils.py | 43 | CODE | |
| LOW | letta/agent.py | 300 | CODE | |
| LOW | letta/agent.py | 857 | CODE | |
| LOW | letta/local_llm/chat_completion_proxy.py | 33 | CODE | |
| LOW | letta/local_llm/grammars/gbnf_grammar_generator.py | 1014 | CODE | |
| LOW | letta/local_llm/grammars/gbnf_grammar_generator.py | 1050 | CODE | |
| LOW | …m/llm_chat_completion_wrappers/configurable_wrapper.py | 11 | CODE | |
| LOW | letta/local_llm/llm_chat_completion_wrappers/chatml.py | 32 | CODE | |
| LOW | letta/local_llm/llm_chat_completion_wrappers/llama3.py | 31 | CODE | |
| LOW | letta/agents/letta_agent.py | 83 | CODE | |
| LOW | letta/agents/letta_agent.py | 1714 | CODE | |
| LOW | letta/agents/base_agent_v2.py | 51 | CODE | |
| LOW | letta/agents/base_agent_v2.py | 76 | CODE | |
| LOW | letta/agents/letta_agent_v2.py | 191 | CODE | |
| LOW | letta/agents/letta_agent_v2.py | 300 | CODE | |
| LOW | letta/agents/letta_agent_v2.py | 1062 | CODE | |
| LOW | letta/agents/letta_agent_v3.py | 222 | CODE | |
| LOW | letta/agents/letta_agent_v3.py | 444 | CODE | |
| LOW | letta/agents/letta_agent_v3.py | 895 | CODE | |
| LOW | letta/agents/letta_agent_v3.py | 1595 | CODE | |
| LOW | letta/agents/letta_agent_v3.py | 2077 | CODE | |
| LOW | letta/server/server.py | 894 | CODE | |
| LOW | letta/server/server.py | 936 | CODE | |
| LOW | letta/server/server.py | 986 | CODE | |
| LOW | letta/server/rest_api/utils.py | 382 | CODE | |
| LOW | letta/server/rest_api/dependencies.py | 38 | CODE | |
| LOW | letta/server/rest_api/routers/v1/steps.py | 22 | CODE | |
| LOW | letta/server/rest_api/routers/v1/tags.py | 15 | CODE | |
| LOW | letta/server/rest_api/routers/v1/tools.py | 63 | CODE | |
| LOW | letta/server/rest_api/routers/v1/tools.py | 171 | CODE | |
| LOW | letta/server/rest_api/routers/v1/tools.py | 476 | CODE | |
| LOW | letta/server/rest_api/routers/v1/internal_runs.py | 30 | CODE | |
| LOW | letta/server/rest_api/routers/v1/archives.py | 91 | CODE | |
| LOW | letta/server/rest_api/routers/v1/groups.py | 18 | CODE | |
| LOW | letta/server/rest_api/routers/v1/groups.py | 150 | CODE | |
| LOW | letta/server/rest_api/routers/v1/identities.py | 26 | CODE | |
| LOW | letta/server/rest_api/routers/v1/identities.py | 158 | CODE | |
| LOW | letta/server/rest_api/routers/v1/agents.py | 125 | CODE | |
| LOW | letta/server/rest_api/routers/v1/agents.py | 218 | CODE | |
| LOW | letta/server/rest_api/routers/v1/agents.py | 296 | CODE | |
| LOW | letta/server/rest_api/routers/v1/agents.py | 415 | CODE | |
| LOW | letta/server/rest_api/routers/v1/agents.py | 465 | CODE | |
| LOW | letta/server/rest_api/routers/v1/agents.py | 1142 | CODE | |
| LOW | letta/server/rest_api/routers/v1/agents.py | 1510 | CODE | |
| LOW | letta/server/rest_api/routers/v1/agents.py | 1579 | CODE | |
| LOW | letta/server/rest_api/routers/v1/agents.py | 2348 | CODE | |
| LOW | letta/server/rest_api/routers/v1/mcp_servers.py | 212 | CODE | |
| LOW | letta/server/rest_api/routers/v1/jobs.py | 17 | CODE | |
| LOW | letta/server/rest_api/routers/v1/providers.py | 18 | CODE | |
| LOW | letta/server/rest_api/routers/v1/messages.py | 31 | CODE | |
| LOW | letta/server/rest_api/routers/v1/messages.py | 211 | CODE | |
| LOW | letta/server/rest_api/routers/v1/internal_blocks.py | 27 | CODE | |
| LOW | letta/server/rest_api/routers/v1/internal_blocks.py | 125 | CODE | |
| LOW | letta/server/rest_api/routers/v1/folders.py | 119 | CODE | |
| LOW | letta/server/rest_api/routers/v1/folders.py | 441 | CODE | |
| LOW | letta/server/rest_api/routers/v1/blocks.py | 28 | CODE | |
| LOW | letta/server/rest_api/routers/v1/blocks.py | 112 | CODE | |
| LOW | letta/server/rest_api/routers/v1/blocks.py | 192 | CODE | |
| 66 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/integration_test_send_message.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/mcp_test.py | 36 | async def set_tokens(self, tokens: OAuthToken) -> None: | CODE |
| LOW | tests/mcp_test.py | 42 | async def set_client_info(self, client_info: OAuthClientInformationFull) -> None: | CODE |
| LOW | tests/integration_test_override_model.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tests/integration_test_usage_tracking.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tests/integration_test_human_in_the_loop.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tests/integration_test_send_message_v2.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/integration_test_conversations_sdk.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | tests/test_prompt_caching.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/helpers/endpoints_helper.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | letta/log_context.py | 7 | def set_log_context(key: str, value: Any) -> None: | CODE |
| LOW | letta/log_context.py | 24 | def update_log_context(**kwargs: Any) -> None: | CODE |
| LOW | letta/types/__init__.py | 7 | __all__ = ["JsonDict", "JsonValue"] | CODE |
| LOW⚡ | letta/agents/letta_agent.py | 894 | async def _update_agent_last_run_metrics(self, completion_time: datetime, duration_ms: float) -> None: | CODE |
| LOW⚡ | letta/agents/letta_agent_v2.py | 1464 | async def _update_agent_last_run_metrics(self, completion_time: datetime, duration_ms: float) -> None: | CODE |
| LOW | letta/agents/letta_agent_batch.py | 386 | async def _update_request_statuses_async(self, updates: List[RequestStatusUpdateInfo]) -> None: | CODE |
| LOW | letta/server/rest_api/routers/v1/git_http.py | 54 | def set_server_instance(server) -> None: | CODE |
| LOW | letta/server/rest_api/middleware/__init__.py | 5 | __all__ = ["CheckPasswordMiddleware", "LoggingMiddleware", "RequestIdMiddleware"] | CODE |
| LOW | letta/otel/db_pool_monitoring.py | 37 | def _setup_pool_listeners(self, pool: Pool, engine_name: str, pool_mode: str) -> None: | CODE |
| LOW | letta/otel/sqlalchemy_instrumentation_integration.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | letta/schemas/tool_rule.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | letta/schemas/mcp.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | letta/schemas/mcp.py | 94 | def set_token_secret(self, secret: Secret) -> None: | CODE |
| LOW⚡ | letta/schemas/mcp.py | 98 | def set_custom_headers_secret(self, secret: Secret) -> None: | CODE |
| LOW⚡ | letta/schemas/mcp_server.py | 207 | def set_access_token_secret(self, secret: Secret) -> None: | CODE |
| LOW⚡ | letta/schemas/mcp_server.py | 211 | def set_refresh_token_secret(self, secret: Secret) -> None: | CODE |
| LOW⚡ | letta/schemas/mcp_server.py | 215 | def set_client_secret_secret(self, secret: Secret) -> None: | CODE |
| LOW⚡ | letta/schemas/mcp_server.py | 219 | def set_authorization_code_secret(self, secret: Secret) -> None: | CODE |
| LOW⚡ | letta/schemas/providers/chatgpt_oauth.py | 264 | async def _update_stored_credentials(self, creds: ChatGPTOAuthCredentials, actor: Optional["User"] = None) -> None: | CODE |
| LOW | letta/schemas/providers/__init__.py | 27 | __all__ = [ | CODE |
| LOW | letta/prompts/system_prompts/__init__.py | 29 | __all__ = ["SYSTEM_PROMPTS"] | CODE |
| LOW⚡ | letta/orm/base.py | 20 | def set_updated_at(self, timestamp: Optional[datetime] = None) -> None: | CODE |
| LOW⚡ | letta/orm/base.py | 30 | def _set_created_and_updated_by_fields(self, actor_id: str) -> None: | CODE |
| LOW | letta/monitoring/__init__.py | 5 | __all__ = [ | CODE |
| LOW | letta/llm_api/openai_ws_session.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | letta/llm_api/baseten_client.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | letta/helpers/tpuf_client.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | letta/services/provider_manager.py | 244 | async def update_provider_last_synced_async(self, provider_id: str, actor: Optional[PydanticUser] = None) -> None: | CODE |
| LOW | letta/services/webhook_service.py | 6 | logger = logging.getLogger(__name__) | CODE |
| LOW | letta/services/sandbox_credentials_service.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | letta/services/credit_verification_service.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | letta/services/lettuce/__init__.py | 6 | __all__ = ["LettuceClient"] | CODE |
| LOW | letta/services/llm_router/__init__.py | 15 | __all__ = [ | CODE |
| LOW | letta/services/memory_repo/__init__.py | 12 | __all__ = [ | CODE |
| LOW | letta/services/memory_repo/storage/__init__.py | 6 | __all__ = [ | CODE |
| LOW | letta/services/mcp/oauth_utils.py | 56 | async def set_tokens(self, tokens: OAuthToken) -> None: | CODE |
| LOW | letta/services/mcp/oauth_utils.py | 83 | async def set_client_info(self, client_info: OAuthClientInformationFull) -> None: | CODE |
| LOW⚡ | letta/services/mcp/oauth_utils.py | 139 | async def update_session_status(self, status: OAuthSessionStatus) -> None: | CODE |
| LOW⚡ | letta/services/mcp/oauth_utils.py | 179 | async def set_authorization_url(self, url: str) -> None: | CODE |
| LOW | letta/services/provider_trace_backends/__init__.py | 15 | __all__ = [ | CODE |
| LOW | …erfaces/openai_chat_completions_streaming_interface.py | 74 | def _update_tool_call_info(self, tool_call: Any) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | letta/orm/sqlalchemy_base.py | 270 | query = query.join(cls.identities).filter(cls.identities.property.mapper.class_.identifier_key.in_(identifie | CODE |
| CRITICAL | letta/jobs/llm_batch_job_polling.py | 55 | response = await server.anthropic_async_client.beta.messages.batches.retrieve(batch_id_str) | CODE |
| CRITICAL | letta/jobs/llm_batch_job_polling.py | 80 | results = await server.anthropic_async_client.beta.messages.batches.results(batch_resp_id) | CODE |
| CRITICAL | letta/services/block_manager.py | 404 | BlockModel.identities.property.mapper.class_.identifier_key.in_(identifier_keys) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | letta/services/tool_sandbox/local_sandbox.py | 149 | print(f"Auto-generated code for debugging:\n\n{code}") | CODE |
| HIGH | letta/services/tool_executor/tool_execution_sandbox.py | 49 | # This is the variable name in the auto-generated code that contains the function results | COMMENT |
| HIGH⚡ | letta/services/tool_executor/tool_execution_sandbox.py | 167 | logger.error(f"Logging out tool {self.tool_name} auto-generated code for debugging: \n\n{code}") | CODE |
| HIGH | letta/services/tool_executor/tool_execution_sandbox.py | 233 | logger.debug(f"Tool {self.tool_name} auto-generated code for debugging: \n\n{code}") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_modal_sandbox_v2.py | 338 | def test_function(x: int, y: int) -> int: | CODE |
| LOW | tests/test_modal_sandbox_v2.py | 395 | mock_tool.source_code = "def test_function(x, y): return x * y" | CODE |
| LOW | tests/test_modal_sandbox_v2.py | 408 | mock_tool.source_code = "def test_function(x, y): return x + y" # Reset | CODE |
| LOW | tests/test_utils.py | 92 | def my_function(a: int, b: float, c: str, d: list, e: dict, f: CustomClass = None): | CODE |
| LOW | tests/conftest.py | 111 | def test_function(e2b_sandbox_mode, ...): | STRING |
| LOW | tests/conftest.py | 177 | def test_function(turbopuffer_mode, ...): | STRING |
| LOW | tests/test_sdk_client.py | 1722 | # def main_function(x: int, y: int) -> int: | COMMENT |
| LOW | tests/test_sdk_client.py | 1752 | # def process_data(data: str, count: int) -> str: | COMMENT |
| LOW | tests/test_sdk_client.py | 1639 | def main_function(x: int, y: int) -> int: | STRING |
| LOW⚡ | tests/managers/test_tool_manager.py | 1805 | def test_function(arg1: str) -> str: | CODE |
| LOW | tests/managers/test_tool_manager.py | 1834 | def test_function(arg1: str, arg2: int) -> str: | CODE |
| LOW | tests/managers/test_tool_manager.py | 1870 | def test_function(arg1: str, arg2: int = 5) -> str: | CODE |
| LOW | tests/managers/test_tool_manager.py | 1903 | def test_function(old_arg: str) -> str: | CODE |
| LOW | tests/managers/test_tool_manager.py | 1938 | def test_function(): | CODE |
| LOW | tests/managers/test_tool_manager.py | 1957 | def test_function(arg1: str) -> str: | CODE |
| LOW | tests/managers/test_tool_manager.py | 1986 | def test_function() -> str: | CODE |
| LOW | tests/managers/test_tool_manager.py | 2019 | def test_function() -> str: | CODE |
| LOW | tests/managers/test_tool_manager.py | 2034 | def test_function(new_arg: str) -> str: | CODE |
| LOW | tests/managers/test_tool_manager.py | 2067 | source_code="def test_function(): pass", | CODE |
| LOW | letta/validators.py | 136 | def my_function(agent_id: str, folder_id: str): | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | letta/server/rest_api/routers/v1/zai.py | 114 | # TODO: Add caching layer to avoid duplicate memory searches | COMMENT |
| LOW⚡ | letta/server/rest_api/routers/v1/anthropic.py | 118 | # TODO: Add caching layer to avoid duplicate memory searches | COMMENT |
| LOW | letta/schemas/model.py | 227 | # TODO: implement support for this | COMMENT |
| LOW | letta/schemas/model.py | 244 | # TODO: implement support for these | COMMENT |
| LOW | letta/schemas/model.py | 316 | # TODO: implement support for these | COMMENT |
| LOW | letta/services/block_manager.py | 833 | # TODO: implement for async | COMMENT |
| LOW | letta/services/helpers/agent_manager_helper.py | 588 | # TODO: add tests to check if this works for ascending order but nulls are stil last? | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/managers/test_cancellation.py | 1504 | CODE | |
| MEDIUM | tests/managers/test_cancellation.py | 1576 | CODE | |
| MEDIUM | tests/managers/test_cancellation.py | 1629 | CODE | |
| MEDIUM | tests/managers/test_cancellation.py | 1681 | CODE | |
| MEDIUM | tests/managers/test_cancellation.py | 1733 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | letta/local_llm/llm_chat_completion_wrappers/chatml.py | 24 | # Don't forget to use send_message, otherwise the user won't see your message""" | COMMENT |
| LOW | letta/local_llm/llm_chat_completion_wrappers/llama3.py | 23 | # Don't forget to use send_message, otherwise the user won't see your message""" | COMMENT |
| LOW⚡ | letta/server/server.py | 1847 | # Write out the file, and make sure to in include the top-level mcpConfig (wrapped to avoid blocking event loop) | COMMENT |
| LOW⚡ | letta/server/server.py | 1891 | # Write out the file, and make sure to in include the top-level mcpConfig (wrapped to avoid blocking event loop) | COMMENT |
| LOW | letta/llm_api/anthropic_client.py | 973 | # make sure to check for overflow errors, regardless of error type | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/integration_test_typescript_tool_execution_sandbox.py | 425 | assert result.func_return == "John Doe" | CODE |
| LOW | tests/sdk/mcp_servers_test.py | 1072 | "content": 'Use the create_person tool to create a person named "John Doe", age 30, ' | CODE |
| LOW | tests/sdk/mcp_servers_test.py | 1073 | 'email "john@example.com", with address at "123 Main St", city "New York", zip "10001".', | CODE |
| LOW | tests/sdk/mcp_servers_test.py | 1089 | assert "John Doe" in person_return.tool_return, "Expected person name in response" | CODE |
| LOW | tests/data/api_server.go | 360 | userService.CreateUser("John Doe", "john@example.com") | CODE |
| LOW | tests/data/test.md | 78 | 1. Lorem ipsum dolor sit amet | CODE |
| LOW | tests/data/test.md | 78 | 1. Lorem ipsum dolor sit amet | CODE |
| LOW | scripts/migrate_tools.py | 10 | fake_user = User(id="user-00000000-0000-4000-8000-000000000000", name="fake", organization_id=org.id) | CODE |
| LOW | scripts/migrate_tools.py | 12 | ToolManager().upsert_base_tools(actor=fake_user) | CODE |