Build reliable customer-facing AI agents with Parlant: an interaction control harness optimized for controlled, consistent, and predictable LLM interactions.
This report presents the forensic synthetic code analysis of emcie-co/parlant, a Python project with 18,175 GitHub stars. SynthScan v2.0 examined 186,089 lines of code across 449 source files, recording 2632 pattern matches distributed across 21 syntactic categories. The overall adjusted score of 15.8 places this repository in the Moderate 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 2632 distinct pattern matches across 21 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/tool_utilities.py | 74 | def get_available_product_by_type(product_type: ProductType = ProductType.DRINKS) -> ToolResult: | CODE |
| LOW | tests/tool_utilities.py | 138 | def available_products_by_category(category: ProductCategory) -> ToolResult: | CODE |
| LOW | tests/tool_utilities.py | 147 | def available_products_by_categories(categories: list[ProductCategory]) -> ToolResult: | CODE |
| LOW | tests/tool_utilities.py | 241 | def calculate_expected_salary( | CODE |
| LOW | tests/tool_utilities.py | 252 | async def get_electronic_products_by_type( | CODE |
| LOW | tests/tool_utilities.py | 297 | async def search_electronic_products( | CODE |
| LOW | tests/tool_utilities.py | 553 | def _mock_lookup_credit_limit(username: str) -> Optional[float]: | CODE |
| LOW | tests/test_utilities.py | 290 | async def set_context_variable_value( | STRING |
| LOW | tests/test_utilities.py | 404 | async def get_when_async_done_or_timeout( | STRING |
| LOW | tests/test_utilities.py | 458 | def _ensure_cache_file_exists(self) -> None: | STRING |
| LOW | tests/test_utilities.py | 476 | def serialize_generation_info(generation: GenerationInfo) -> _GenerationInfoDocument: | STRING |
| LOW | tests/test_utilities.py | 501 | def deserialize_generation_info( | STRING |
| LOW | tests/test_utilities.py | 567 | async def create_schematic_generation_result_collection( | STRING |
| LOW | tests/test_utilities.py | 608 | async def two_required_query_params( | STRING |
| LOW | tests/test_utilities.py | 636 | async def one_required_query_param_one_required_body_param( | STRING |
| LOW | tests/core/test_cancellation_suppression_latch.py | 25 | async def test_latch_behavior_with_no_cancellation() -> None: | CODE |
| LOW | tests/core/test_cancellation_suppression_latch.py | 46 | async def test_latch_behavior_with_cancellation_after_suppression() -> None: | CODE |
| LOW | tests/core/test_cancellation_suppression_latch.py | 78 | async def test_latch_behavior_with_cancellation_before_suppression() -> None: | CODE |
| LOW | tests/core/test_id_generator.py | 18 | async def test_that_id_generator_generates_different_ids_for_objects_with_similar_small_content() -> ( | CODE |
| LOW | tests/core/test_id_generator.py | 34 | async def test_that_id_generator_generates_different_ids_for_objects_with_similar_big_content() -> ( | CODE |
| LOW | tests/core/stable/test_capability_vector_store.py | 26 | async def test_that_updating_a_capability_replaces_its_vector_documents( | CODE |
| LOW | tests/core/stable/test_capability_vector_store.py | 66 | async def test_that_deleting_a_capability_removes_its_vector_documents( | CODE |
| LOW | tests/core/stable/test_journey_guideline_projection.py | 10 | async def test_that_projection_yields_followup_for_existing_guideline(container: Container) -> None: | CODE |
| LOW | tests/core/stable/test_relationships.py | 55 | async def test_that_direct_guideline_relationships_can_be_listed( | CODE |
| LOW | tests/core/stable/test_relationships.py | 93 | async def test_that_indirect_guideline_relationships_can_be_listed( | CODE |
| LOW | tests/core/stable/test_relationships.py | 127 | async def test_that_db_data_is_loaded_correctly( | CODE |
| LOW | tests/core/stable/test_relationships.py | 165 | async def test_that_relationships_are_returned_for_source_without_indirect_relationships( | CODE |
| LOW | tests/core/stable/test_relationships.py | 206 | async def test_that_connections_are_returned_for_source_with_indirect_connections( | CODE |
| LOW | tests/core/stable/test_relationships.py | 248 | async def test_that_relationships_are_returned_for_target_without_indirect_connections( | CODE |
| LOW | tests/core/stable/test_relationships.py | 289 | async def test_that_relationships_are_returned_for_target_with_indirect_connections( | CODE |
| LOW | tests/core/stable/test_relationships.py | 331 | async def test_that_all_relationships_can_be_listed( | CODE |
| LOW | tests/core/stable/test_relationships.py | 360 | async def test_that_relationships_can_be_listed_by_kind_without_entity_filters( | CODE |
| LOW | tests/core/stable/test_relationships.py | 401 | async def test_that_relationships_can_be_listed_by_source_id_without_kind_filter( | CODE |
| LOW | tests/core/stable/test_relationships.py | 427 | async def test_that_relationships_can_be_listed_by_target_id_without_kind_filter( | CODE |
| LOW | tests/core/stable/test_relationships.py | 453 | async def test_that_relationships_can_be_listed_with_both_source_and_target_filters( | CODE |
| LOW | tests/core/stable/test_relationships.py | 483 | async def test_that_creating_a_direct_circular_dependency_raises_an_error( | CODE |
| LOW | tests/core/stable/test_relationships.py | 504 | async def test_that_creating_an_indirect_circular_dependency_raises_an_error( | CODE |
| LOW | tests/core/stable/test_relationships.py | 532 | async def test_that_creating_a_self_dependency_is_allowed( | CODE |
| LOW | tests/core/stable/test_relationships.py | 545 | async def test_that_creating_a_cycle_across_dependency_and_dependency_any_raises_an_error( | CODE |
| LOW | tests/core/stable/test_application.py | 102 | async def test_that_a_new_customer_session_can_be_created( | CODE |
| LOW | tests/core/stable/test_application.py | 118 | async def test_that_a_new_customer_session_with_a_proactive_agent_contains_a_message( | CODE |
| LOW | tests/core/stable/test_application.py | 140 | async def test_that_when_a_client_event_is_posted_then_new_server_events_are_emitted( | CODE |
| LOW | tests/core/stable/test_application.py | 168 | async def test_that_a_session_update_is_detected_as_soon_as_a_client_event_is_posted( | CODE |
| LOW | tests/core/stable/test_application.py | 192 | async def test_that_when_a_customer_quickly_posts_more_than_one_message_then_only_one_message_is_emitted_as_a_reply_to_t | CODE |
| LOW | tests/core/stable/test_application.py | 226 | def hand_off_to_human_operator() -> ToolResult: | CODE |
| LOW | tests/core/stable/test_application.py | 230 | async def test_that_a_response_is_not_generated_automatically_after_a_tool_switches_the_session_to_manual_mode( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 37 | async def test_that_list_guidelines_with_mutual_agent_tag_are_returned( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 76 | async def test_that_list_guidelines_global_guideline_is_returned( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 94 | async def test_that_guideline_with_not_hierarchy_tag_is_not_returned( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 127 | async def test_that_guideline_matches_are_not_filtered_by_enabled_journeys( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 169 | async def test_that_guideline_tagged_with_disabled_journey_is_filtered_out_when_matched( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 209 | async def test_that_find_canned_responses_for_agent_returns_global_canned_responses( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 230 | async def test_that_find_canned_responses_for_agent_returns_none_for_non_matching_tag( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 253 | async def test_that_find_canned_responses_for_agent_and_journey_returns_journey_canned_responses( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 282 | async def test_that_find_glossary_terms_for_agent_returns_all_when_no_tags( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 307 | async def test_that_find_glossary_terms_for_agent_returns_none_for_non_matching_tag( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 329 | async def test_that_find_capabilities_for_agent_returns_unique_capabilities( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 362 | async def test_find_relevant_journeys_for_agent_returns_most_relevant( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 400 | async def test_list_guidelines_dependent_directly_on_journey( | CODE |
| LOW | tests/core/stable/test_entity_cq.py | 438 | async def test_list_guidelines_dependent_indirectly_on_journey( | CODE |
| 1460 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/parlant/core/engines/alpha/message_generator.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …arlant/core/engines/alpha/canned_response_generator.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …viously_applied_actionable_customer_dependent_batch.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …lpha/guideline_matching/generic/observational_batch.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …pha/guideline_matching/generic/disambiguation_batch.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …/guideline_matching/generic/response_analysis_batch.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …ideline_matching/generic/guideline_actionable_batch.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …neric/guideline_previously_applied_actionable_batch.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …ne_matching/generic/guideline_low_criticality_batch.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …atching/generic/journey/journey_next_step_selection.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …ne_matching/generic/journey/journey_backtrack_check.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …ng/generic/journey/journey_backtrack_node_selection.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …ant/core/services/indexing/relative_action_proposer.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …ervices/indexing/journey_reachable_nodes_evaluation.py | 0 | - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json", exclude_unset=true), indent=2)} | STRING |
| HIGH | …/engines/alpha/tool_calling/overlapping_tools_batch.py | 0 | - **context**: {shot.description} - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json" | STRING |
| HIGH | …t/core/engines/alpha/tool_calling/single_tool_batch.py | 0 | - **context**: {shot.description} - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json" | STRING |
| HIGH | …core/services/indexing/tool_running_action_detector.py | 0 | - **context**: {shot.description} - **expected result**: ```json {json.dumps(shot.expected_result.model_dump(mode="json" | STRING |
| HIGH | …viously_applied_actionable_customer_dependent_batch.py | 0 | - **interaction events**: {json.dumps([adapt_event(e) for e in shot.interaction_events], indent=2)} | STRING |
| HIGH | …lpha/guideline_matching/generic/observational_batch.py | 0 | - **interaction events**: {json.dumps([adapt_event(e) for e in shot.interaction_events], indent=2)} | STRING |
| HIGH | …pha/guideline_matching/generic/disambiguation_batch.py | 0 | - **interaction events**: {json.dumps([adapt_event(e) for e in shot.interaction_events], indent=2)} | STRING |
| HIGH | …/guideline_matching/generic/response_analysis_batch.py | 0 | - **interaction events**: {json.dumps([adapt_event(e) for e in shot.interaction_events], indent=2)} | STRING |
| HIGH | …ideline_matching/generic/guideline_actionable_batch.py | 0 | - **interaction events**: {json.dumps([adapt_event(e) for e in shot.interaction_events], indent=2)} | STRING |
| HIGH | …neric/guideline_previously_applied_actionable_batch.py | 0 | - **interaction events**: {json.dumps([adapt_event(e) for e in shot.interaction_events], indent=2)} | STRING |
| HIGH | …ne_matching/generic/guideline_low_criticality_batch.py | 0 | - **interaction events**: {json.dumps([adapt_event(e) for e in shot.interaction_events], indent=2)} | STRING |
| HIGH | …atching/generic/journey/journey_next_step_selection.py | 0 | - **interaction events**: {json.dumps([adapt_event(e) for e in shot.interaction_events], indent=2)} | STRING |
| HIGH | …ne_matching/generic/journey/journey_backtrack_check.py | 0 | - **interaction events**: {json.dumps([adapt_event(e) for e in shot.interaction_events], indent=2)} | STRING |
| HIGH | …ng/generic/journey/journey_backtrack_node_selection.py | 0 | - **interaction events**: {json.dumps([adapt_event(e) for e in shot.interaction_events], indent=2)} | STRING |
| HIGH | …viously_applied_actionable_customer_dependent_batch.py | 0 | examples of guideline match evaluations: ------------------- {formatted_shots} | STRING |
| HIGH | …ideline_matching/generic/guideline_actionable_batch.py | 0 | examples of guideline match evaluations: ------------------- {formatted_shots} | STRING |
| HIGH | …neric/guideline_previously_applied_actionable_batch.py | 0 | examples of guideline match evaluations: ------------------- {formatted_shots} | STRING |
| HIGH | …ne_matching/generic/guideline_low_criticality_batch.py | 0 | examples of guideline match evaluations: ------------------- {formatted_shots} | STRING |
| HIGH | …viously_applied_actionable_customer_dependent_batch.py | 0 | important: please note there are exactly {guidelines_len} guidelines in the list for you to check. output format ------- | STRING |
| HIGH | …ideline_matching/generic/guideline_actionable_batch.py | 0 | important: please note there are exactly {guidelines_len} guidelines in the list for you to check. output format ------- | STRING |
| HIGH | …neric/guideline_previously_applied_actionable_batch.py | 0 | important: please note there are exactly {guidelines_len} guidelines in the list for you to check. output format ------- | STRING |
| HIGH | …ne_matching/generic/guideline_low_criticality_batch.py | 0 | important: please note there are exactly {guidelines_len} guidelines in the list for you to check. output format ------- | STRING |
| HIGH | …/guideline_matching/generic/response_analysis_batch.py | 0 | important: please note there are exactly {guidelines_len} guidelines in the list for you to check. output format ------- | STRING |
| HIGH | …atching/generic/journey/journey_next_step_selection.py | 0 | examples of journey step selections: ------------------- {formatted_shots} ### example section is over. the following is | STRING |
| HIGH | …ne_matching/generic/journey/journey_backtrack_check.py | 0 | examples of journey step selections: ------------------- {formatted_shots} ### example section is over. the following is | STRING |
| HIGH | …ng/generic/journey/journey_backtrack_node_selection.py | 0 | examples of journey step selections: ------------------- {formatted_shots} ### example section is over. the following is | STRING |
| HIGH | …ore/services/indexing/guideline_continuous_proposer.py | 0 | guideline ----------- condition: {condition} action: {action} | STRING |
| HIGH | …core/services/indexing/tool_running_action_detector.py | 0 | guideline ----------- condition: {condition} action: {action} | STRING |
| HIGH | …ervices/indexing/guideline_agent_intention_proposer.py | 0 | guideline ----------- condition: {condition} action: {action} | STRING |
| HIGH | …ervices/indexing/customer_dependent_action_detector.py | 0 | guideline ----------- condition: {condition} action: {action} | STRING |
| HIGH | src/parlant/adapters/nlp/vertex_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/cerebras_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/qwen_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/mistral_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/azure_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/parlant_cloud_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/litellm_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/openrouter_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/aws_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/modelscope_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/together_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/openai_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/gemini_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/fireworks_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/ollama_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/anthropic_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| HIGH | src/parlant/adapters/nlp/deepseek_service.py | 0 | returns an error message if the environment is not set up correctly. | STRING |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/tool_utilities.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/test_utilities.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/__init__.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/test_cancellation_suppression_latch.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/conftest.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/test_id_generator.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/test_relationships.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/test_application.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/test_entity_cq.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/test_health_reporter.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …core/stable/engines/alpha/test_user_story_scenarios.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …viously_applied_actionable_customer_dependent_batch.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …table/engines/alpha/test_guideline_actionable_batch.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …ines/alpha/test_previously_applied_actionable_batch.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …/core/stable/engines/alpha/test_relational_resolver.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …/stable/engines/alpha/test_context_variable_loading.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …/engines/alpha/test_guideline_low_criticality_batch.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …ts/core/stable/engines/alpha/test_guideline_matcher.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/engines/alpha/test_mcp.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …s/core/stable/engines/alpha/test_baseline_scenarios.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …core/stable/engines/alpha/test_disambiguation_batch.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …stable/engines/alpha/test_generic_response_analysis.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/engines/alpha/test_tool_caller.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/persistence/test_matches_filters.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/nlp/test_embedding.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/nlp/test_generation.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/services/tools/test_openapi.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/services/tools/test_plugin_client.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …ces/indexing/test_journey_reachable_nodes_evaluator.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …ble/services/indexing/test_agent_intention_proposer.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …ervices/indexing/test_continuous_guideline_proposer.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/stable/services/indexing/test_indexer.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …es/indexing/test_customer_dependent_action_detector.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …le/services/indexing/test_guideline_action_proposer.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/utils.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/utils.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/terms.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/tags.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/sessions.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …s/core/common/engines/alpha/steps/context_variables.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/engines.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/events.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …ts/core/common/engines/alpha/steps/canned_responses.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/tools.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/agents.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/capabilities.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/customers.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/guidelines.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …re/unstable/engines/alpha/test_user_story_scenarios.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …nstable/engines/alpha/test_agent_intention_proposer.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …ines/alpha/test_previously_applied_actionable_batch.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …/core/unstable/engines/alpha/test_guideline_matcher.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …core/unstable/engines/alpha/test_baseline_scenarios.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | …re/unstable/engines/alpha/test_disambiguation_batch.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/adapters/vector_db/test_mongo_vector.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/adapters/vector_db/test_qdrant.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/adapters/nlp/test_zhipu_service.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| LOW | tests/adapters/nlp/test_azure_service.py | 1 | # Copyright 2026 Emcie Co Ltd. | COMMENT |
| 207 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | …/core/stable/engines/alpha/test_relational_resolver.py | 232 | # Create a standalone guideline | COMMENT |
| MEDIUM⚡ | …/core/stable/engines/alpha/test_relational_resolver.py | 238 | # Create a journey with a condition | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 315 | # Create a journey with a condition | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 351 | # Create a standalone guideline | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 405 | # Create a journey | COMMENT |
| MEDIUM | tests/core/stable/engines/alpha/test_tool_caller.py | 1343 | # Create a tool with no parameters and consequential=False (default) | COMMENT |
| MEDIUM | tests/core/stable/engines/alpha/test_tool_caller.py | 1397 | # Create a tool with no parameters and consequential=False (default) | COMMENT |
| MEDIUM | tests/core/stable/engines/alpha/test_tool_caller.py | 1408 | # Create a staged event representing this tool already being staged | COMMENT |
| MEDIUM | tests/adapters/vector_db/test_mongo_vector.py | 390 | # Create a new database instance pointing to the same database | COMMENT |
| MEDIUM | tests/adapters/db/test_mongodb.py | 527 | # Create a simple collection | COMMENT |
| MEDIUM | tests/adapters/db/test_json_file.py | 198 | # Create a document first | COMMENT |
| MEDIUM | tests/adapters/db/test_json_file.py | 221 | # Create a document first | COMMENT |
| MEDIUM | tests/adapters/db/test_json_file.py | 249 | # Create a document first | COMMENT |
| MEDIUM | tests/adapters/db/test_json_file.py | 542 | # Create an empty file | COMMENT |
| MEDIUM | tests/sdk/test_journeys.py | 1061 | # Create the first journey | COMMENT |
| MEDIUM | tests/sdk/test_journeys.py | 1107 | # Create a chat state for order confirmation | COMMENT |
| MEDIUM | tests/sdk/test_journeys.py | 1398 | # Create the user validation journey | COMMENT |
| MEDIUM | tests/sdk/test_journeys.py | 1417 | # Create the hotel booking journey | COMMENT |
| MEDIUM | tests/sdk/test_journeys.py | 1552 | # Create main customer service journey | COMMENT |
| MEDIUM⚡ | tests/sdk/test_journeys.py | 1767 | # Create a guideline | COMMENT |
| MEDIUM⚡ | tests/sdk/test_journeys.py | 1773 | # Create a journey with a custom state ID | COMMENT |
| MEDIUM⚡ | tests/sdk/test_journeys.py | 1780 | # Create a state with a custom ID | COMMENT |
| MEDIUM⚡ | tests/sdk/test_journeys.py | 1788 | # Create a session and send a message | COMMENT |
| MEDIUM | tests/sdk/test_journeys.py | 1878 | # Create a state with a custom ID | COMMENT |
| MEDIUM | tests/sdk/test_journeys.py | 2063 | # Create a linked journey (will be activated via link, not via conditions) | COMMENT |
| MEDIUM | tests/sdk/test_journeys.py | 2077 | # Create the parent journey that links to the validation journey | COMMENT |
| MEDIUM | tests/sdk/test_journeys.py | 2141 | # Create a state transition and attach retriever to the target state | COMMENT |
| MEDIUM | tests/sdk/test_journeys.py | 2178 | # Create a state transition and attach retriever to the target state | COMMENT |
| MEDIUM | tests/sdk/test_guidelines.py | 722 | # Create the first guideline | COMMENT |
| MEDIUM | tests/sdk/test_guidelines.py | 951 | # Create a canned response with a template that uses a field | COMMENT |
| MEDIUM | tests/sdk/test_guidelines.py | 985 | # Create a canned response that uses fields from multiple providers | COMMENT |
| MEDIUM | tests/sdk/test_sdk_validation.py | 183 | # Create a fork state | COMMENT |
| MEDIUM | tests/sdk/test_sdk_validation.py | 257 | # Create a tool state | COMMENT |
| MEDIUM | tests/sdk/test_sdk_validation.py | 288 | # Create a chat state | COMMENT |
| MEDIUM | tests/sdk/test_sdk_validation.py | 601 | # Create a fork state to test with | COMMENT |
| MEDIUM | tests/sdk/test_labels.py | 101 | # Create a journey with labels that will be propagated when the journey matches | COMMENT |
| MEDIUM | tests/sdk/test_canned_responses.py | 47 | # Create a canned response that depends on "order" field | COMMENT |
| MEDIUM | tests/api/test_guidelines.py | 973 | # Create a guideline with LOW criticality | COMMENT |
| MEDIUM | tests/api/test_sessions.py | 1911 | # Create an event with initial metadata | COMMENT |
| MEDIUM | tests/api/test_sessions.py | 1967 | # Create an event with initial metadata | COMMENT |
| MEDIUM | tests/api/test_sessions.py | 2021 | # Create a customer message with custom participant info | COMMENT |
| MEDIUM | tests/api/test_sessions.py | 2052 | # Create a customer message WITHOUT custom participant | COMMENT |
| MEDIUM | tests/api/test_relationships.py | 15 | # Import necessary modules and classes | COMMENT |
| MEDIUM | examples/travel_voice_agent.py | 100 | # Create the journey | COMMENT |
| MEDIUM | examples/travel_voice_agent.py | 168 | # Create the journey | COMMENT |
| MEDIUM | examples/healthcare.py | 70 | # Create the journey | COMMENT |
| MEDIUM | examples/healthcare.py | 130 | # Create the journey | COMMENT |
| MEDIUM | src/parlant/sdk.py | 1620 | # Create the new state | COMMENT |
| MEDIUM | src/parlant/sdk.py | 1692 | # Create a fork state for the condition | COMMENT |
| MEDIUM | src/parlant/sdk.py | 1734 | # Create the target state and add it to processing queue | COMMENT |
| MEDIUM | src/parlant/sdk.py | 1813 | # Create the transition only if target state is in mapping | COMMENT |
| MEDIUM | src/parlant/sdk.py | 4513 | # Create a shim that translates between SDK and core types | COMMENT |
| MEDIUM | src/parlant/core/engines/alpha/engine.py | 1602 | # Create a convenient accessor dict for tool-enabled guidelines (and their tools). | COMMENT |
| MEDIUM | src/parlant/core/services/tools/plugins.py | 259 | """This function is specifically used to refresh some of the tool's | STRING |
| MEDIUM | src/parlant/core/services/tools/mcp_service.py | 65 | """This class is a wrapper around the FastMCP server, mainly to be used in testing the MCP client""" | STRING |
| MEDIUM | …core/services/indexing/behavioral_change_evaluation.py | 563 | # Create a mapping from guideline payloads to evaluations | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/openrouter_service.py | 606 | # Create a dynamic generator for any OpenRouter model | STRING |
| MEDIUM | src/parlant/adapters/nlp/gemini_service.py | 231 | # Create a signature from parameters | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/gemini_service.py | 243 | # Create a fake callable | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/gemini_service.py | 596 | # Create the new class | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_utilities.py | 775 | except Exception: | STRING |
| LOW⚡ | tests/core/stable/test_health_reporter.py | 260 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/core/stable/test_health_reporter.py | 332 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/core/stable/services/tools/test_plugin_client.py | 201 | except Exception as exc: | CODE |
| LOW⚡ | tests/adapters/db/test_mongodb.py | 730 | except Exception: | CODE |
| LOW | tests/e2e/test_server_cli.py | 239 | except Exception as exc: | CODE |
| LOW | tests/e2e/test_utilities.py | 125 | except Exception as exc: | CODE |
| LOW | tests/e2e/test_utilities.py | 157 | except Exception as e: | CODE |
| LOW | tests/e2e/test_utilities.py | 164 | except Exception: | CODE |
| LOW | docs/advanced/custom-llms.md | 289 | except Exception as e: | CODE |
| LOW | docs/adapters/nlp/vertex.md | 344 | except Exception as e: | CODE |
| LOW | docs/production/human-handoff.md | 195 | except Exception as e: | CODE |
| LOW | src/parlant/core/background_tasks.py | 133 | except Exception as exc: | CODE |
| LOW | src/parlant/core/async_utils.py | 226 | except Exception as e: | CODE |
| LOW | src/parlant/core/tools.py | 478 | except Exception as e: | CODE |
| LOW | src/parlant/core/tools.py | 492 | except Exception as e: | CODE |
| LOW | src/parlant/core/tools.py | 569 | except Exception as exc: | CODE |
| LOW | src/parlant/core/app_modules/sessions.py | 347 | except Exception: | CODE |
| LOW | src/parlant/core/app_modules/common.py | 18 | except Exception: | CODE |
| LOW | src/parlant/core/engines/alpha/prompt_builder.py | 156 | except Exception as e: | CODE |
| LOW | src/parlant/core/engines/alpha/message_generator.py | 302 | except Exception as exc: | CODE |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2048 | except Exception as e: | CODE |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 1237 | except Exception as exc: | STRING |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 1290 | except Exception as exc: | STRING |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2480 | except Exception as exc: | STRING |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2823 | except Exception as e: | STRING |
| LOW | src/parlant/core/engines/alpha/engine.py | 213 | except Exception as exc: | CODE |
| LOW | src/parlant/core/engines/alpha/engine.py | 273 | except Exception as exc: | CODE |
| LOW | src/parlant/core/engines/alpha/engine.py | 412 | except Exception: | CODE |
| LOW | …/engines/alpha/tool_calling/overlapping_tools_batch.py | 203 | except Exception as exc: | CODE |
| LOW | …t/core/engines/alpha/tool_calling/single_tool_batch.py | 346 | except Exception as exc: | CODE |
| LOW | …t/core/engines/alpha/tool_calling/single_tool_batch.py | 1027 | except Exception as exc: | STRING |
| LOW | …parlant/core/engines/alpha/tool_calling/tool_caller.py | 290 | except Exception as exc: | CODE |
| LOW | …parlant/core/engines/alpha/tool_calling/tool_caller.py | 308 | except Exception as e: | CODE |
| LOW | …ideline_matching/custom_guideline_matching_strategy.py | 57 | except Exception as e: | CODE |
| LOW | …viously_applied_actionable_customer_dependent_batch.py | 156 | except Exception as exc: | CODE |
| LOW | …lpha/guideline_matching/generic/observational_batch.py | 151 | except Exception as exc: | CODE |
| LOW | …pha/guideline_matching/generic/disambiguation_batch.py | 217 | except Exception as exc: | CODE |
| LOW | …/guideline_matching/generic/response_analysis_batch.py | 206 | except Exception as exc: | CODE |
| LOW | …ideline_matching/generic/guideline_actionable_batch.py | 146 | except Exception as exc: | CODE |
| LOW | …neric/guideline_previously_applied_actionable_batch.py | 149 | except Exception as exc: | CODE |
| LOW | …ne_matching/generic/guideline_low_criticality_batch.py | 123 | except Exception as exc: | CODE |
| LOW | …atching/generic/journey/journey_next_step_selection.py | 377 | except Exception as exc: | CODE |
| LOW | …ne_matching/generic/journey/journey_backtrack_check.py | 187 | except Exception: | CODE |
| LOW | …ne_matching/generic/journey/journey_backtrack_check.py | 363 | except Exception as exc: | STRING |
| LOW | …ng/generic/journey/journey_backtrack_node_selection.py | 254 | except Exception: | CODE |
| LOW | …ng/generic/journey/journey_backtrack_node_selection.py | 514 | except Exception as exc: | STRING |
| LOW | src/parlant/core/nlp/generation.py | 195 | except Exception: | CODE |
| LOW | src/parlant/core/nlp/generation.py | 206 | except Exception as exc: | CODE |
| LOW | src/parlant/core/nlp/generation.py | 362 | except Exception as exc: | CODE |
| LOW | src/parlant/core/nlp/generation.py | 438 | except Exception as e: | CODE |
| LOW | src/parlant/core/nlp/embedding.py | 234 | except Exception as exc: | CODE |
| LOW | src/parlant/core/services/tools/plugins.py | 235 | except Exception: | CODE |
| LOW | src/parlant/core/services/tools/plugins.py | 709 | except Exception as exc: | CODE |
| LOW | src/parlant/core/services/tools/plugins.py | 941 | except Exception: | CODE |
| LOW | src/parlant/core/services/tools/plugins.py | 999 | except Exception as exc: | CODE |
| LOW | src/parlant/core/services/tools/mcp_service.py | 218 | except Exception as exc: | CODE |
| LOW | src/parlant/core/services/tools/mcp_service.py | 257 | except Exception as exc: | CODE |
| LOW | src/parlant/core/services/tools/mcp_service.py | 282 | except Exception as exc: | CODE |
| LOW | src/parlant/core/services/tools/mcp_service.py | 297 | except Exception as e: | CODE |
| 138 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 2012 | # ── Tag-level dependency tests ────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 2252 | # ── ANY-semantics tag dependency tests ───────────────────────────────────── | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 2608 | # ── Dependency hierarchy tests ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 3199 | # ── Edge-case tests ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 3421 | # ── Custom journey tag propagation tests ─────────────────────────────────── | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 3818 | # ── Dependency edge-case tests ───────────────────────────────────────────── | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 4296 | # ── Numerical priority + dependency interaction tests ────────────────────── | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 4489 | # ── TAG_ALL vs TAG_ANY explicit tests ────────────────────────────────────── | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 4771 | # ── DEPENDENCY_ANY (OR group) tests ──────────────────────────────────────── | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 5030 | # ── DEPENDENCY_ANY edge case tests ───────────────────────────────────────── | COMMENT |
| MEDIUM | …/core/stable/engines/alpha/test_relational_resolver.py | 5741 | # ── Resolution attribution edge-case tests ──────────────────────────────── | COMMENT |
| MEDIUM | tests/core/stable/nlp/test_generation.py | 417 | # ============================================================================ | COMMENT |
| MEDIUM | tests/core/stable/nlp/test_generation.py | 419 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | src/parlant/core/engines/alpha/relational_resolver.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | src/parlant/core/engines/alpha/relational_resolver.py | 62 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | src/parlant/core/engines/alpha/relational_resolver.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | src/parlant/core/engines/alpha/relational_resolver.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src/parlant/core/engines/alpha/relational_resolver.py | 180 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src/parlant/core/engines/alpha/relational_resolver.py | 182 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src/parlant/core/engines/alpha/relational_resolver.py | 221 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src/parlant/core/engines/alpha/relational_resolver.py | 223 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src/parlant/core/engines/alpha/relational_resolver.py | 593 | # ── Phase 1: Resolve dependency targets ────────────────────────── | COMMENT |
| MEDIUM | src/parlant/core/engines/alpha/relational_resolver.py | 630 | # ── Phase 2: Topological sort (Kahn's algorithm) ───────────────── | COMMENT |
| MEDIUM | src/parlant/core/engines/alpha/relational_resolver.py | 634 | # ── Phase 3: Evaluate in topological order ─────────────────────── | COMMENT |
| MEDIUM | src/parlant/core/nlp/generation.py | 40 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/core/nlp/generation.py | 42 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/core/nlp/generation.py | 259 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/core/nlp/generation.py | 261 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/parlant_cloud_service.py | 361 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/parlant_cloud_service.py | 363 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/parlant_cloud_service.py | 580 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/parlant_cloud_service.py | 582 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/openai_service.py | 414 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/openai_service.py | 416 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/openai_service.py | 561 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/openai_service.py | 563 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/novita_service.py | 272 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/novita_service.py | 274 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/emcie_service.py | 335 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/emcie_service.py | 337 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/emcie_service.py | 534 | # ============================================================================ | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/emcie_service.py | 536 | # ============================================================================ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …re/stable/engines/alpha/test_journey_node_selection.py | 1098 | CODE | |
| LOW | …core/stable/engines/alpha/test_disambiguation_batch.py | 269 | CODE | |
| LOW | …re/unstable/engines/alpha/test_disambiguation_batch.py | 263 | CODE | |
| LOW | tests/adapters/db/test_mongodb.py | 1078 | CODE | |
| LOW | tests/adapters/db/test_mongodb.py | 1116 | CODE | |
| LOW | tests/adapters/db/test_mongodb.py | 1181 | CODE | |
| LOW | tests/sdk/utils.py | 125 | CODE | |
| LOW | tests/sdk/test_agents.py | 366 | CODE | |
| LOW | tests/e2e/test_utilities.py | 95 | CODE | |
| LOW | scripts/generate_client_sdk.py | 38 | CODE | |
| LOW | src/parlant/sdk.py | 1902 | CODE | |
| LOW | src/parlant/sdk.py | 727 | CODE | |
| LOW | src/parlant/sdk.py | 819 | CODE | |
| LOW | src/parlant/sdk.py | 953 | CODE | |
| LOW | src/parlant/sdk.py | 1386 | CODE | |
| LOW | src/parlant/sdk.py | 1472 | CODE | |
| LOW | src/parlant/sdk.py | 1586 | CODE | |
| LOW | src/parlant/sdk.py | 2944 | CODE | |
| LOW | src/parlant/sdk.py | 4684 | CODE | |
| LOW | src/parlant/sdk.py | 4878 | CODE | |
| LOW | src/parlant/core/journeys.py | 1067 | CODE | |
| LOW | src/parlant/core/entity_cq.py | 382 | CODE | |
| LOW | src/parlant/core/capabilities.py | 414 | CODE | |
| LOW | src/parlant/core/relationships.py | 339 | CODE | |
| LOW | src/parlant/core/glossary.py | 396 | CODE | |
| LOW | src/parlant/core/app_modules/context_variables.py | 84 | CODE | |
| LOW | src/parlant/core/app_modules/journeys.py | 116 | CODE | |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 264 | CODE | |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 553 | CODE | |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 725 | CODE | |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 756 | CODE | |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 930 | CODE | |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 1204 | CODE | |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 1353 | CODE | |
| LOW | src/parlant/core/engines/alpha/prompt_builder.py | 109 | CODE | |
| LOW | src/parlant/core/engines/alpha/message_generator.py | 197 | CODE | |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 610 | CODE | |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 1020 | CODE | |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 1062 | CODE | |
| LOW | src/parlant/core/engines/alpha/engine.py | 1043 | CODE | |
| LOW | src/parlant/core/engines/alpha/engine.py | 1646 | CODE | |
| LOW | src/parlant/core/engines/alpha/engine.py | 2143 | CODE | |
| LOW | …/engines/alpha/tool_calling/overlapping_tools_batch.py | 236 | CODE | |
| LOW | …/engines/alpha/tool_calling/overlapping_tools_batch.py | 661 | CODE | |
| LOW | …t/core/engines/alpha/tool_calling/single_tool_batch.py | 172 | CODE | |
| LOW | …t/core/engines/alpha/tool_calling/single_tool_batch.py | 182 | CODE | |
| LOW | …t/core/engines/alpha/tool_calling/single_tool_batch.py | 355 | CODE | |
| LOW | …t/core/engines/alpha/tool_calling/single_tool_batch.py | 1254 | CODE | |
| LOW | …ngines/alpha/tool_calling/default_tool_call_batcher.py | 64 | CODE | |
| LOW | …ngines/alpha/tool_calling/default_tool_call_batcher.py | 77 | CODE | |
| LOW | …viously_applied_actionable_customer_dependent_batch.py | 107 | CODE | |
| LOW | …lpha/guideline_matching/generic/observational_batch.py | 102 | CODE | |
| LOW | …pha/guideline_matching/generic/disambiguation_batch.py | 148 | CODE | |
| LOW | …/guideline_matching/generic/response_analysis_batch.py | 148 | CODE | |
| LOW | …ideline_matching/generic/guideline_actionable_batch.py | 97 | CODE | |
| LOW | …neric/guideline_previously_applied_actionable_batch.py | 100 | CODE | |
| LOW | …atching/generic/generic_guideline_matching_strategy.py | 161 | CODE | |
| LOW | …ne_matching/generic/guideline_low_criticality_batch.py | 73 | CODE | |
| LOW | …tching/generic/journey/journey_node_selection_batch.py | 159 | CODE | |
| LOW | …tching/generic/journey/journey_node_selection_batch.py | 264 | CODE | |
| 66 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/core/test_cancellation_suppression_latch.py | 15 | CODE | |
| LOW | …/core/stable/engines/alpha/test_relational_resolver.py | 18 | CODE | |
| LOW | tests/adapters/db/test_snowflake_db.py | 15 | CODE | |
| LOW | tests/e2e/test_utilities.py | 15 | CODE | |
| LOW | src/parlant/sdk.py | 15 | CODE | |
| LOW | src/parlant/sdk.py | 76 | CODE | |
| LOW | src/parlant/sdk.py | 76 | CODE | |
| LOW | src/parlant/sdk.py | 76 | CODE | |
| LOW | src/parlant/sdk.py | 76 | CODE | |
| LOW | src/parlant/sdk.py | 76 | CODE | |
| LOW | src/parlant/sdk.py | 76 | CODE | |
| LOW | src/parlant/sdk.py | 76 | CODE | |
| LOW | src/parlant/sdk.py | 76 | CODE | |
| LOW | src/parlant/sdk.py | 99 | CODE | |
| LOW | src/parlant/sdk.py | 132 | CODE | |
| LOW | src/parlant/sdk.py | 132 | CODE | |
| LOW | src/parlant/sdk.py | 133 | CODE | |
| LOW | src/parlant/sdk.py | 134 | CODE | |
| LOW | src/parlant/sdk.py | 157 | CODE | |
| LOW | src/parlant/sdk.py | 163 | CODE | |
| LOW | src/parlant/sdk.py | 163 | CODE | |
| LOW | src/parlant/sdk.py | 163 | CODE | |
| LOW | src/parlant/sdk.py | 168 | CODE | |
| LOW | src/parlant/sdk.py | 183 | CODE | |
| LOW | src/parlant/sdk.py | 183 | CODE | |
| LOW | src/parlant/sdk.py | 183 | CODE | |
| LOW | src/parlant/sdk.py | 230 | CODE | |
| LOW | src/parlant/sdk.py | 230 | CODE | |
| LOW | src/parlant/sdk.py | 230 | CODE | |
| LOW | src/parlant/sdk.py | 230 | CODE | |
| LOW | src/parlant/sdk.py | 230 | CODE | |
| LOW | src/parlant/sdk.py | 239 | CODE | |
| LOW | src/parlant/sdk.py | 239 | CODE | |
| LOW | src/parlant/sdk.py | 239 | CODE | |
| LOW | src/parlant/sdk.py | 239 | CODE | |
| LOW | src/parlant/sdk.py | 239 | CODE | |
| LOW | src/parlant/sdk.py | 246 | CODE | |
| LOW | src/parlant/sdk.py | 246 | CODE | |
| LOW | src/parlant/sdk.py | 252 | CODE | |
| LOW | src/parlant/sdk.py | 252 | CODE | |
| LOW | src/parlant/sdk.py | 256 | CODE | |
| LOW | src/parlant/sdk.py | 256 | CODE | |
| LOW | src/parlant/sdk.py | 256 | CODE | |
| LOW | src/parlant/sdk.py | 263 | CODE | |
| LOW | src/parlant/sdk.py | 263 | CODE | |
| LOW | src/parlant/sdk.py | 263 | CODE | |
| LOW | src/parlant/sdk.py | 263 | CODE | |
| LOW | src/parlant/sdk.py | 274 | CODE | |
| LOW | src/parlant/sdk.py | 274 | CODE | |
| LOW | src/parlant/sdk.py | 274 | CODE | |
| LOW | src/parlant/sdk.py | 274 | CODE | |
| LOW | src/parlant/sdk.py | 274 | CODE | |
| LOW | src/parlant/sdk.py | 274 | CODE | |
| LOW | src/parlant/sdk.py | 274 | CODE | |
| LOW | src/parlant/core/tags.py | 15 | CODE | |
| LOW | src/parlant/core/sessions.py | 15 | CODE | |
| LOW | src/parlant/core/context_variables.py | 15 | CODE | |
| LOW | src/parlant/core/async_utils.py | 15 | CODE | |
| LOW | src/parlant/core/loggers.py | 15 | CODE | |
| LOW | src/parlant/core/canned_responses.py | 15 | CODE | |
| 58 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | llms.txt | 234 | # Step 1: Get order number | COMMENT |
| LOW | llms.txt | 239 | # Step 2: Look up the order | COMMENT |
| LOW | llms.txt | 254 | # Step 4: Check if they need anything else | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2076 | # Step 1: Ask for account name | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2104 | # Step 2: Ask for desired credit limit | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2132 | # Step 3: Confirm information and move forward politely | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2161 | # Step 4: Use tool to get the current limit | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2211 | # Step 5: Use tool to change the limit | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2261 | # Step 6: Report to customer | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2278 | # Step 7: Report failure | COMMENT |
| LOW | docs/production/custom-frontend.md | 124 | ### Step 1: Initialize the Parlant Client | COMMENT |
| LOW | docs/production/custom-frontend.md | 162 | ### Step 2: Create a Session | COMMENT |
| LOW | docs/production/custom-frontend.md | 216 | ### Step 3: Send Customer Messages | COMMENT |
| LOW | docs/production/custom-frontend.md | 268 | ### Step 4: Monitor Session Events | COMMENT |
| LOW | docs/production/custom-frontend.md | 348 | ### Step 5: Display Messages in Your UI | COMMENT |
| LOW | docs/production/custom-frontend.md | 456 | ### Step 6: Complete HTML Example | COMMENT |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 341 | # Step 1: Dependencies | COMMENT |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 353 | # Step 2: Relational prioritization (includes transitive dep filtering) | COMMENT |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 371 | # Step 3: Numerical priority filtering. | COMMENT |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 393 | # Step 4: Entailment. | COMMENT |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2176 | # Step 1: Generate the draft message | STRING |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2266 | # Step 2: Select the most relevant canned response templates based on the draft message | STRING |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2306 | # Step 3: Pre-render these templates so that matching works better | STRING |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2351 | # Step 5: Respond based on the match quality | STRING |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1243 | # Step 1: Retrieve the journeys likely to be activated for this agent | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1248 | # Step 2 : Retrieve all the guidelines for the context. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1277 | # Step 4: Filter the best matches out of those. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1287 | # Step 5: Filter the journeys that are activated by the matched guidelines. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1292 | # Step 6: If any of the lower-probability journeys (those originally filtered out) | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1319 | # Step 7: Build the set of matched guidelines: | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1329 | # Step 8: Let the plan potentially intervene | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1332 | # Step 9: Resolve guideline matches by considering relationships | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1351 | # Step 1: Retrieve all the possible journeys for this agent | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1356 | # Step 2: Reuse the usable guidelines cached during the initial iteration. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1360 | # Step 3: Retrieve guidelines that need reevaluation based on tool calls made | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1370 | # Step 4: Reevaluate those guidelines using the latest context. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1380 | # Step 5: Filter out the journeys activated by the matched guidelines. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1388 | # Step 6: If any of the journeys have been activated, | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1426 | # Step 8: Let the plan potentially intervene | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1429 | # Step 9: Resolve guideline matches by considering relationships | COMMENT |
| LOW | src/parlant/core/engines/alpha/engine.py | 1262 | # Step 3: Exclude guidelines whose prerequisite journeys are less likely to be activated | COMMENT |
| LOW | src/parlant/core/engines/alpha/engine.py | 1414 | # Step 7: Build the final set of matched guidelines: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/adapters/vector_db/test_qdrant.py | 508 | # Check if any documents were successfully migrated to new format | COMMENT |
| LOW | tests/adapters/db/test_mongodb.py | 1106 | # Check if this index includes creation_utc field | COMMENT |
| LOW | tests/adapters/db/test_mongodb.py | 1169 | # Check if this index includes creation_utc field | COMMENT |
| LOW | tests/adapters/db/test_mongodb.py | 1210 | # Check if this index includes creation_utc field | COMMENT |
| LOW | src/parlant/sdk.py | 1768 | # Check if this state has no outgoing transitions (leaf state) | COMMENT |
| LOW | src/parlant/sdk.py | 1827 | # Add target to queue for further processing | COMMENT |
| LOW | src/parlant/sdk.py | 1873 | # Check if this is a journey node guideline | COMMENT |
| LOW | src/parlant/sdk.py | 5021 | # Check if the result is a deferred callable | COMMENT |
| LOW | src/parlant/core/sessions.py | 1551 | # Check if the event has chunks property | COMMENT |
| LOW | src/parlant/core/sessions.py | 1555 | # Check if the last chunk is None (completion signal) | COMMENT |
| LOW | src/parlant/core/journeys.py | 934 | # Check if journey with this ID already exists | COMMENT |
| LOW | src/parlant/core/agents.py | 354 | # Check if agent with this ID already exists | COMMENT |
| LOW | src/parlant/core/customers.py | 277 | # Check if customer with this ID already exists | COMMENT |
| LOW | src/parlant/core/guidelines.py | 699 | # Check if guideline with this ID already exists | COMMENT |
| LOW | src/parlant/core/glossary.py | 301 | # Check if term with this ID already exists | COMMENT |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 709 | # Check if this is the first agent message (greeting scenario) | COMMENT |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2016 | # Add chunk to the list and update the message | COMMENT |
| LOW | …t/core/engines/alpha/tool_calling/single_tool_batch.py | 1284 | # Check if all required parameters are present | STRING |
| LOW | src/parlant/core/services/tools/plugins.py | 339 | # Check if it's a list[Enum] type | COMMENT |
| LOW | src/parlant/adapters/vector_db/qdrant.py | 84 | # Check if it's a timeout error | COMMENT |
| LOW | src/parlant/adapters/vector_db/qdrant.py | 331 | # Check if index exists | COMMENT |
| LOW | src/parlant/adapters/vector_db/qdrant.py | 637 | # Check if collections exist | COMMENT |
| LOW | src/parlant/adapters/vector_db/qdrant.py | 780 | # Check if metadata collection exists | COMMENT |
| LOW | src/parlant/adapters/vector_db/mongo.py | 113 | # Check if the index already exists | COMMENT |
| LOW | src/parlant/adapters/vector_db/mongo.py | 225 | # Check if the collection exists in MongoDB | COMMENT |
| LOW | src/parlant/adapters/vector_db/chroma.py | 246 | # Check if we have a corresponding embedded collection for the embedder type. | COMMENT |
| LOW | src/parlant/adapters/nlp/vertex_service.py | 776 | # Check if it's a short name we recognize | COMMENT |
| LOW | src/parlant/adapters/nlp/mistral_service.py | 350 | # Check if any score indicates flagged content (threshold can be adjusted) | COMMENT |
| LOW | src/parlant/adapters/nlp/azure_service.py | 280 | # Check if API key is provided (backward compatibility) | COMMENT |
| LOW | src/parlant/adapters/nlp/openrouter_service.py | 178 | # Check if it's a JSON mode error | COMMENT |
| LOW | src/parlant/adapters/nlp/openrouter_service.py | 234 | # Check if we got empty response | COMMENT |
| LOW⚡ | src/parlant/adapters/nlp/openrouter_service.py | 247 | # Check if parsed JSON is empty | COMMENT |
| LOW | src/parlant/adapters/nlp/openrouter_service.py | 602 | # Check if we have a predefined generator for this model | STRING |
| LOW | src/parlant/adapters/nlp/gemini_service.py | 529 | # Check if origin is Mapping or Sequence | STRING |
| LOW | src/parlant/api/sessions.py | 2129 | # Check if event is complete (for streaming events) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2076 | # Step 1: Ask for account name | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2104 | # Step 2: Ask for desired credit limit | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2132 | # Step 3: Confirm information and move forward politely | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2161 | # Step 4: Use tool to get the current limit | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2211 | # Step 5: Use tool to change the limit | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2261 | # Step 6: Report to customer | COMMENT |
| LOW | tests/core/common/engines/alpha/steps/journeys.py | 2278 | # Step 7: Report failure | COMMENT |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 341 | # Step 1: Dependencies | COMMENT |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 353 | # Step 2: Relational prioritization (includes transitive dep filtering) | COMMENT |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 371 | # Step 3: Numerical priority filtering. | COMMENT |
| LOW | src/parlant/core/engines/alpha/relational_resolver.py | 393 | # Step 4: Entailment. | COMMENT |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2176 | # Step 1: Generate the draft message | STRING |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2266 | # Step 2: Select the most relevant canned response templates based on the draft message | STRING |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2306 | # Step 3: Pre-render these templates so that matching works better | STRING |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 2351 | # Step 5: Respond based on the match quality | STRING |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1243 | # Step 1: Retrieve the journeys likely to be activated for this agent | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1248 | # Step 2 : Retrieve all the guidelines for the context. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1277 | # Step 4: Filter the best matches out of those. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1287 | # Step 5: Filter the journeys that are activated by the matched guidelines. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1292 | # Step 6: If any of the lower-probability journeys (those originally filtered out) | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1319 | # Step 7: Build the set of matched guidelines: | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1329 | # Step 8: Let the plan potentially intervene | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1332 | # Step 9: Resolve guideline matches by considering relationships | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1351 | # Step 1: Retrieve all the possible journeys for this agent | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1356 | # Step 2: Reuse the usable guidelines cached during the initial iteration. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1360 | # Step 3: Retrieve guidelines that need reevaluation based on tool calls made | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1370 | # Step 4: Reevaluate those guidelines using the latest context. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1380 | # Step 5: Filter out the journeys activated by the matched guidelines. | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1388 | # Step 6: If any of the journeys have been activated, | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1426 | # Step 8: Let the plan potentially intervene | COMMENT |
| LOW⚡ | src/parlant/core/engines/alpha/engine.py | 1429 | # Step 9: Resolve guideline matches by considering relationships | COMMENT |
| LOW | src/parlant/core/engines/alpha/engine.py | 1262 | # Step 3: Exclude guidelines whose prerequisite journeys are less likely to be activated | COMMENT |
| LOW | src/parlant/core/engines/alpha/engine.py | 1414 | # Step 7: Build the final set of matched guidelines: | COMMENT |
| LOW | …t/core/engines/alpha/tool_calling/single_tool_batch.py | 1773 | "The customer wants to purchase a laptop and a mouse and we need to check if those products are available" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 75 | Parlant treats misalignment as a core design problem. It builds on [research into model accuracy and consistency](https: | CODE |
| MEDIUM | README.md | 75 | Parlant treats misalignment as a core design problem. It builds on [research into model accuracy and consistency](https: | CODE |
| MEDIUM | …ces/indexing/test_journey_reachable_nodes_evaluator.py | 55 | # Drop the few-shot examples, which render the same child/condition lines. | COMMENT |
| MEDIUM | docs/advanced/custom-llms.md | 167 | # Return the maximum number of tokens in the model's context window. | COMMENT |
| MEDIUM | docs/adapters/nlp/ollama.md | 58 | # embedding model required for creating embeddings | COMMENT |
| MEDIUM | docs/adapters/nlp/ollama.md | 92 | # Alternative embedding model (512 dimensions) | COMMENT |
| MEDIUM | docs/adapters/nlp/azure.md | 96 | # Use any embedding model (examples - check your Azure resource for availability) | COMMENT |
| MEDIUM | docs/adapters/nlp/azure.md | 251 | use CustomAzureEmbedder # Any embedding model you specify | CODE |
| MEDIUM | docs/adapters/nlp/azure.md | 253 | use AzureTextEmbedding3Large # Default embedding model | CODE |
| MEDIUM | docs/concepts/customization/tools.md | 229 | > To learn more about best-practices for designing your agent's tools, we recommend reading our blog post on [Agentic Ba | CODE |
| MEDIUM | docs/concepts/customization/retrievers.md | 31 | #### Simple RAG Example | COMMENT |
| MEDIUM | docs/concepts/entities/agents.md | 61 | > There's an interesting paper on the [failures of multi-agent systems](https://arxiv.org/abs/2503.13657#:~:text=We%20pr | CODE |
| MEDIUM | docs/production/agentic-design.md | 106 | > - [Agentic API Design blog post](https://parlant.io/blog/what-no-one-tells-you-about-agentic-api-design) - Detailed st | CODE |
| MEDIUM | …/engines/alpha/tool_calling/overlapping_tools_batch.py | 298 | if tool.parameters: # We check this because sometimes LLMs hallucinate placeholders for no- | CODE |
| MEDIUM | …t/core/engines/alpha/tool_calling/single_tool_batch.py | 424 | if tool.parameters: # We check this because sometimes LLMs hallucinate placeholders for no-param to | CODE |
| MEDIUM | src/parlant/adapters/nlp/openrouter_service.py | 364 | # Known embedding model dimensions | COMMENT |
| MEDIUM | src/parlant/adapters/nlp/ollama_service.py | 753 | else: # its a custom embedding model | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/quickstart/installation.md | 70 | export OPENAI_API_KEY="<YOUR_API_KEY>" | CODE |
| HIGH | docs/quickstart/installation.md | 70 | export OPENAI_API_KEY="<YOUR_API_KEY>" | CODE |
| HIGH | docs/adapters/vector_db/qdrant.md | 51 | # api_key="your-api-key-here", | COMMENT |
| HIGH | docs/adapters/nlp/openrouter.md | 17 | export OPENROUTER_API_KEY="your-api-key-here" | CODE |
| HIGH | docs/adapters/nlp/openrouter.md | 44 | export OPENROUTER_API_KEY="your-api-key-here" | CODE |
| HIGH | docs/adapters/nlp/openrouter.md | 514 | export OPENROUTER_API_KEY="your-api-key-here" | CODE |
| HIGH | docs/adapters/nlp/azure.md | 168 | export AZURE_API_KEY="your-api-key" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_utilities.py | 143 | def set_level(self, log_level: LogLevel) -> None: | CODE |
| LOW | tests/e2e/test_utilities.py | 175 | def set_port(self, port: int) -> None: | CODE |
| LOW | scripts/version.py | 36 | def set_package_version(version: str, package: Package) -> None: | CODE |
| LOW | scripts/version.py | 72 | def update_version_variable_in_code(version: str) -> None: | CODE |
| LOW⚡ | src/parlant/sdk.py | 3029 | async def set_value_for_customer(self, customer: Customer, value: JSONSerializable) -> None: | CODE |
| LOW⚡ | src/parlant/sdk.py | 3038 | async def set_value_for_tag(self, tag: TagId, value: JSONSerializable) -> None: | CODE |
| LOW⚡ | src/parlant/sdk.py | 3047 | async def set_global_value(self, value: JSONSerializable) -> None: | CODE |
| LOW⚡ | src/parlant/sdk.py | 3056 | async def set_value_for_agent(self, agent: Agent, value: JSONSerializable) -> None: | CODE |
| LOW | src/parlant/sdk.py | 657 | def _set_progress(self, key: str, pct: float) -> None: | CODE |
| LOW | src/parlant/sdk.py | 4932 | async def _setup_retrievers(self) -> None: | CODE |
| LOW | src/parlant/sdk.py | 5785 | __all__ = [ | CODE |
| LOW | src/parlant/core/loggers.py | 105 | def set_level(self, log_level: LogLevel) -> None: | CODE |
| LOW | src/parlant/core/loggers.py | 184 | def set_level(self, log_level: LogLevel) -> None: | CODE |
| LOW | src/parlant/core/loggers.py | 290 | def set_level(self, log_level: LogLevel) -> None: | CODE |
| LOW | src/parlant/core/tracer.py | 65 | def set_attribute(self, name: str, value: AttributeValue) -> None: ... | CODE |
| LOW | src/parlant/core/health/__init__.py | 42 | __all__ = [ | CODE |
| LOW | …ant/core/engines/alpha/perceived_performance_policy.py | 287 | def set_policy(self, agent_id: AgentId, policy: PerceivedPerformancePolicy) -> None: | CODE |
| LOW | …arlant/core/engines/alpha/canned_response_generator.py | 557 | def set_preamble_config(self, agent_id: AgentId, config: PreambleConfiguration) -> None: | STRING |
| LOW | src/parlant/core/engines/alpha/engine.py | 827 | async def _update_session_mode(self, context: EngineContext) -> None: | CODE |
| LOW | src/parlant/core/engines/alpha/engine.py | 1043 | async def _update_session_labels(self, context: EngineContext) -> None: | CODE |
| LOW | src/parlant/core/engines/alpha/planners.py | 212 | def set_planner(self, agent_id: AgentId, planner: Planner) -> None: | CODE |
| LOW | …core/services/indexing/behavioral_change_evaluation.py | 740 | async def _update_progress(percentage: float) -> None: | CODE |
| LOW⚡ | src/parlant/bin/client.py | 2772 | def update_customer(ctx: click.Context, customer_id: str, name: str) -> None: | CODE |
| LOW⚡ | src/parlant/bin/client.py | 2892 | def update_tag(ctx: click.Context, tag: str, name: str) -> None: | CODE |
| LOW | src/parlant/bin/client.py | 104 | def set_exit_status(status: int) -> None: | CODE |
| LOW | src/parlant/adapters/loggers/opentelemetry.py | 90 | def set_level(self, log_level: LogLevel) -> None: | CODE |
| LOW | src/parlant/adapters/vector_db/qdrant.py | 442 | async def _set_collection_version(self, collection_name: str, version: int) -> None: | CODE |
| LOW | src/parlant/adapters/db/snowflake_db.py | 767 | __all__ = [ | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_utilities.py | 652 | CODE | |
| LOW | …ts/core/stable/engines/alpha/test_guideline_matcher.py | 648 | CODE | |
| LOW | src/parlant/sdk.py | 1902 | CODE | |
| LOW | src/parlant/sdk.py | 1472 | CODE | |
| LOW | src/parlant/sdk.py | 2010 | CODE | |
| LOW | src/parlant/sdk.py | 2027 | CODE | |
| LOW | src/parlant/sdk.py | 2044 | CODE | |
| LOW | src/parlant/sdk.py | 2061 | CODE | |
| LOW | src/parlant/sdk.py | 2085 | CODE | |
| LOW | src/parlant/sdk.py | 2141 | CODE | |
| LOW | src/parlant/sdk.py | 2158 | CODE | |
| LOW | src/parlant/sdk.py | 2175 | CODE | |
| LOW | src/parlant/sdk.py | 2192 | CODE | |
| LOW | src/parlant/sdk.py | 2216 | CODE | |
| LOW | src/parlant/sdk.py | 2275 | CODE | |
| LOW | src/parlant/sdk.py | 2292 | CODE | |
| LOW | src/parlant/sdk.py | 2309 | CODE | |
| LOW | src/parlant/sdk.py | 2326 | CODE | |
| LOW | src/parlant/sdk.py | 2350 | CODE | |
| LOW | src/parlant/sdk.py | 2425 | CODE | |
| LOW | src/parlant/sdk.py | 2442 | CODE | |
| LOW | src/parlant/sdk.py | 2459 | CODE | |
| LOW | src/parlant/sdk.py | 2483 | CODE | |
| LOW | src/parlant/sdk.py | 2711 | CODE | |
| LOW | src/parlant/sdk.py | 2763 | CODE | |
| LOW | src/parlant/sdk.py | 3405 | CODE | |
| LOW | src/parlant/sdk.py | 3476 | CODE | |
| LOW | src/parlant/sdk.py | 3528 | CODE | |
| LOW | src/parlant/sdk.py | 4178 | CODE | |
| LOW | src/parlant/sdk.py | 5121 | CODE | |
| LOW | src/parlant/sdk.py | 5358 | CODE | |
| LOW | src/parlant/core/entity_cq.py | 278 | CODE | |
| LOW | src/parlant/core/guidelines.py | 101 | CODE | |
| LOW | src/parlant/core/guidelines.py | 674 | CODE | |
| LOW | src/parlant/core/health/nlp_view.py | 94 | CODE | |
| LOW | src/parlant/core/app_modules/context_variables.py | 155 | CODE | |
| LOW | src/parlant/core/app_modules/customers.py | 88 | CODE | |
| LOW | src/parlant/bin/client.py | 1045 | CODE | |
| LOW | src/parlant/adapters/db/mongo_db.py | 269 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/adapters/db/test_mongodb.py | 392 | {"id": "dummy_id", "version": "1.0.0", "name": "Test Document"} | CODE |
| LOW | tests/adapters/db/test_json_file.py | 405 | "id": "dummy_id", | CODE |
| LOW⚡ | tests/sdk/test_customers.py | 23 | name="John Doe", metadata={"email": "john.doe@example.com"} | CODE |
| LOW⚡ | tests/sdk/test_customers.py | 31 | assert customer.name == "John Doe" | CODE |
| LOW⚡ | tests/sdk/test_customers.py | 39 | name="John Doe", | CODE |
| LOW⚡ | tests/sdk/test_customers.py | 58 | name="John Doe", | CODE |
| LOW⚡ | tests/sdk/test_customers.py | 65 | self.customer = await server.find_customer(name="John Doe") | CODE |
| LOW⚡ | tests/sdk/test_customers.py | 75 | name="John Doe", | CODE |
| LOW | tests/sdk/test_variables.py | 78 | self.customer = await server.create_customer("John Doe") | CODE |
| LOW | tests/sdk/test_variables.py | 187 | self.customer = await server.create_customer("Jane Doe") | CODE |
| LOW | tests/sdk/test_variables.py | 244 | self.customer = await server.create_customer("Jane Doe") | CODE |
| LOW | tests/sdk/test_variables.py | 286 | "Jane Doe", | CODE |
| LOW | tests/api/test_sessions.py | 1812 | "participant": {"id": "agent_007", "display_name": "John Doe"}, | CODE |
| LOW | tests/api/test_sessions.py | 1823 | assert event["data"]["participant"]["display_name"] == "John Doe" | CODE |
| LOW | tests/api/test_customers.py | 29 | name = "John Doe" | CODE |
| LOW | tests/api/test_customers.py | 60 | "name": "John Doe", | CODE |
| LOW | tests/modules/bank.py | 33 | return ToolResult({"name": "John Doe", "account_number": "1234567890"}) | CODE |
| LOW | …ng/generic/journey/journey_backtrack_node_selection.py | 1428 | _make_event("3", EventSource.CUSTOMER, "Jane Doe"), | STRING |
| LOW | src/parlant/api/sessions.py | 321 | examples=["John Doe", "Alice"], | CODE |
| LOW | src/parlant/api/sessions.py | 328 | "display_name": "John Doe", | CODE |
| LOW | src/parlant/api/sessions.py | 415 | "participant": {"id": "cust_123xy", "display_name": "John Doe"}, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/sdk/utils.py | 113 | """Check if the event is still streaming (chunks property exists and not yet terminated with null).""" | STRING |
| HIGH | scripts/version.py | 136 | "git diff --quiet && git diff --cached --quiet && git ls-files --others --exclude-standard" | CODE |
| HIGH | …arlant/core/engines/alpha/canned_response_generator.py | 1467 | If told so by a guideline or some other contextual condition, send the first message. Otherwise, do not produce a reply | CODE |
| HIGH | …arlant/core/engines/alpha/canned_response_generator.py | 1473 | "response_preamble_that_was_already_sent": null, | CODE |
| HIGH | …arlant/core/engines/alpha/canned_response_generator.py | 1486 | The only exception where you may not produce a reply (i.e., setting message = null) is if the user, or a provided guidel | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | src/parlant/adapters/nlp/azure_service.py | 144 | response = await self._client.beta.chat.completions.parse( | CODE |
| CRITICAL | src/parlant/adapters/nlp/openai_service.py | 200 | response = await self._client.beta.chat.completions.parse( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/sdk/test_sdk_validation.py | 581 | """Test comprehensive condition validation for ForkJourneyState""" | STRING |
| LOW | src/parlant/core/journeys.py | 1366 | # Journey not found, just return node as-is | COMMENT |
| MEDIUM | …arlant/core/engines/alpha/canned_response_generator.py | 1889 | # Build recap section to leverage LLM recency bias | STRING |
| LOW | src/parlant/api/sessions.py | 2137 | # Non-streaming event, just return it once | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/parlant/adapters/vector_db/qdrant.py | 63 | Retry an async operation on timeout errors with exponential backoff. Args: operation: The async operat | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/parlant/core/engines/alpha/prompt_builder.py | 326 | return f"\nIMPORTANT: Please note that the last message was sent by you, the AI agent (likely as a preamble). Yo | STRING |