АДРЕСНЫЙ РЕЖИМ -ADDRESS:Шаг 0 (Pre-Prod Rails): Предпродакшн-постановка ADDRESS Query V1 на рельсы референсный домен, nightly-автоматизация и подтверждённый global gate (102/102 + 25/25)
This commit is contained in:
parent
4cb9fc7021
commit
53716e548e
|
|
@ -1,20 +1,74 @@
|
|||
# ADDRESS Query Docs
|
||||
|
||||
Дата: 2026-03-29
|
||||
Дата: 2026-04-02
|
||||
Статус синхронизации: актуализировано по текущему коду в `llm_normalizer/backend/src/services/*`.
|
||||
|
||||
## Документы
|
||||
## Актуальный статус (2026-04-02)
|
||||
|
||||
- `entity_map_1c_2020.md` - полная карта сущностей по snapshot 2020.
|
||||
- `address_scenario_matrix.md` - матрица сценариев (question -> intent -> recipe).
|
||||
- `query_recipes_v1.md` - каталог фильтров и recipe-контракты.
|
||||
- `runtime_integration_plan.md` - план встраивания `question_mode=address_query`.
|
||||
- `address_runtime_contracts.md` - контракты runtime/debug/result для address lane.
|
||||
- `address_architecture_contract_v1.md` - архитектурные границы `Decompose -> Resolve -> Execute -> Compose` и политика data-agnostic runtime.
|
||||
- `runtime_readiness_matrix_v1.md` - матрица structural vs runtime readiness.
|
||||
- `known_positive_live_suite_v1.md` - базовый template positive-evidence suite.
|
||||
- `data_aware_positive_acceptance_suite_v1.md` - M2.3 canonical guide для curated live acceptance.
|
||||
- `curated_positive_live_suite_v1.md` - M2.3c curated suite (counterparty/account split + negative twins).
|
||||
- `address_query_bootstrap_report_2026-03-29.md` - итоговая сводка bootstrap этапа.
|
||||
- Этап стабилизации закрыт под `strict_policy=route`.
|
||||
- Step-0 pre-prod rails закрыт (reference-domain + nightly automation).
|
||||
- Финальный stress-pack: `102/102`
|
||||
`docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
|
||||
- Финальный follow-up pack: `25/25`
|
||||
`docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
|
||||
- Актуальный nightly regression (green):
|
||||
`docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00/nightly_summary.json`
|
||||
- Task Scheduler: `NDC_ADDRESS_Nightly_Regression` (`daily 03:30`, owner `DCTOUCH`).
|
||||
- Текущий production-контур: `question_mode=address_query`, live-first через MCP.
|
||||
- Следующий этап: `Step-4` domain expansion по рельсовой модели Step-0.
|
||||
|
||||
## Что реально реализовано в коде (срез 2026-04-02)
|
||||
|
||||
Поддерживаемые intents в runtime:
|
||||
|
||||
- `list_open_contracts`
|
||||
- `list_payables_counterparties`
|
||||
- `list_receivables_counterparties`
|
||||
- `account_balance_snapshot`
|
||||
- `open_items_by_counterparty_or_contract`
|
||||
- `list_documents_by_counterparty`
|
||||
- `bank_operations_by_counterparty`
|
||||
- `list_documents_by_contract`
|
||||
- `bank_operations_by_contract`
|
||||
- `documents_forming_balance`
|
||||
|
||||
Ключевой scope-лимит:
|
||||
|
||||
- `COMPOUND_FACTUAL_QUERY` пока detection-only (без multi-intent execution).
|
||||
- `account_turnover_snapshot` и `list_documents_by_type` не реализованы в runtime V1.
|
||||
|
||||
## Основные документы
|
||||
|
||||
- `address_scenario_matrix.md` - актуальная матрица сценариев `question -> intent -> recipe_id`.
|
||||
- `query_recipes_v1.md` - фактический каталог runtime recipes и их контрактов.
|
||||
- `runtime_readiness_matrix_v1.md` - статус готовности сценариев по текущему коду.
|
||||
- `address_runtime_contracts.md` - актуальный debug/output контракт address lane.
|
||||
- `runtime_integration_plan.md` - фактическая схема интеграции в `assistantService`.
|
||||
- `address_architecture_contract_v1.md` - guardrails `Decompose -> Resolve -> Execute -> Compose`.
|
||||
- `global_execution_checklist_v1.md` - release-gate и шаги этапа.
|
||||
- `stage_closeout_2026-04-02.md` - закрытие этапа стабилизации.
|
||||
- `step0_preprod_rail_plan_v1.md` - обязательный pre-prod рельсовый этап перед массовым расширением доменов.
|
||||
- `step0_closeout_2026-04-02.md` - факт закрытия Step-0 с артефактами и gate-подтверждением.
|
||||
- `domain_expansion_implementation_plan_v1.md` - план `Step-4`.
|
||||
- `domain_card_template_v1.md` - шаблон описания домена для repeatable delivery.
|
||||
- `domain_acceptance_question_set_template_v1.md` - шаблон структуры domain acceptance question set.
|
||||
- `run_pack_spec_v1.md` - обязательный формат run-артефактов и gate-валидации.
|
||||
|
||||
Исторические и supporting docs:
|
||||
|
||||
- `entity_map_1c_2020.md`
|
||||
- `address_query_bootstrap_report_2026-03-29.md`
|
||||
- `known_positive_live_suite_v1.md`
|
||||
- `data_aware_positive_acceptance_suite_v1.md`
|
||||
- `curated_positive_live_suite_v1.md`
|
||||
|
||||
## Step-0 Automation (rail tools)
|
||||
|
||||
- `python scripts/validate_address_run_pack.py docs/ADDRESS/runs/<run_id>`
|
||||
- `python scripts/compare_address_run_summary.py --baseline-summary <baseline_run_summary.json> --candidate-summary <candidate_run_summary.json>`
|
||||
- `python scripts/run_address_nightly_regression.py`
|
||||
- `python scripts/run_address_nightly_regression.py --dry-run`
|
||||
- `powershell -ExecutionPolicy Bypass -File .\scripts\run_address_nightly_regression.ps1`
|
||||
|
||||
## Связанные run-паки
|
||||
|
||||
|
|
@ -26,4 +80,8 @@
|
|||
- `docs/ADDRESS/runs/2026-03-29_Address_Query_Runtime_V1_M2_3C_Resolver_Filter_Tuning_And_AccountScope_Audit/`
|
||||
- `docs/ADDRESS/runs/2026-04-01_Address_Query_Runtime_V1_M2_3D_Query_Variants_Expansion/`
|
||||
- `docs/ADDRESS/runs/2026-04-01_Address_Query_Runtime_V1_M2_3E_Stability_Hardening_AccountQueryScope/`
|
||||
|
||||
- `docs/ADDRESS/runs/2026-04-01_Address_Query_Runtime_V1_M2_3F_LLM_Decompose_Coercion_Layer/`
|
||||
- `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/`
|
||||
- `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/`
|
||||
- `docs/ADDRESS/runs/2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22/`
|
||||
- `docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00/`
|
||||
|
|
|
|||
|
|
@ -1,97 +1,126 @@
|
|||
# Address Runtime Contracts V1 (M2.3c)
|
||||
# Address Runtime Contracts V1 (Code Sync)
|
||||
|
||||
Дата: 2026-03-29
|
||||
Дата: 2026-04-02
|
||||
|
||||
Reference:
|
||||
|
||||
- `address_architecture_contract_v1.md` (architecture guardrails and stage boundaries).
|
||||
- `address_architecture_contract_v1.md` (guardrails and stage boundaries)
|
||||
- `llm_normalizer/backend/src/types/addressQuery.ts`
|
||||
- `llm_normalizer/backend/src/services/addressQueryService.ts`
|
||||
- `llm_normalizer/backend/src/services/assistantService.ts` (`buildAddressDebugPayload`)
|
||||
|
||||
## Runtime Policy
|
||||
|
||||
- Runtime lane is `data-agnostic`: no hardcoded counterparties/contracts/accounts from one concrete base.
|
||||
- Acceptance lane is `data-aware`: positive cases are curated after exploratory live pass.
|
||||
- Address lane remains MCP/live-first, whitelist-only, read-only.
|
||||
- Runtime execution is MSP-only in production; snapshot usage is explicit fallback only.
|
||||
- Canonical pipeline boundary: `Decompose -> Resolve -> Execute -> Compose` (no cross-stage leakage).
|
||||
- LLM decompose stage interprets question structure only; company entities are resolved only in live resolver stage.
|
||||
- Runtime lane is `data-agnostic`: без company-specific словарей в коде.
|
||||
- Acceptance lane is `data-aware`: позитивные live-кейсы подбираются отдельно.
|
||||
- Address lane: MCP/live-first, whitelist-only, read-only.
|
||||
- Canonical boundary: `Decompose -> Resolve -> Execute -> Compose`.
|
||||
- LLM pre-decompose интерпретирует текст, но не подменяет whitelist execution.
|
||||
|
||||
## Input Contract
|
||||
|
||||
- `question_mode`: `address_query | deep_analysis | unsupported`
|
||||
- `address_intent`: nullable enum
|
||||
- `resolved_filters`: object
|
||||
- `missing_filters`: string[]
|
||||
- `address_intent`: enum intents + `unknown`
|
||||
- `extracted_filters`: object
|
||||
- `missing_required_filters`: string[]
|
||||
|
||||
## Debug Contract
|
||||
## Debug Contract (actual payload)
|
||||
|
||||
Core detection:
|
||||
|
||||
- `detected_mode`
|
||||
- `detected_mode_confidence`
|
||||
- `query_shape`
|
||||
- `query_shape_confidence`
|
||||
- `detected_intent`
|
||||
- `runtime_readiness`
|
||||
- `is_compound_query`
|
||||
- `subqueries_count`
|
||||
- `resolved_entities`
|
||||
- `resolved_filters`
|
||||
- `missing_filters`
|
||||
- `selected_recipe_ids`
|
||||
- `detected_intent_confidence`
|
||||
|
||||
Filter + recipe:
|
||||
|
||||
- `extracted_filters`
|
||||
- `missing_required_filters`
|
||||
- `selected_recipe`
|
||||
|
||||
Resolver block:
|
||||
|
||||
- `anchor_type`
|
||||
- `anchor_value_raw`
|
||||
- `anchor_value_resolved`
|
||||
- `resolver_confidence`
|
||||
- `ambiguity_count`
|
||||
|
||||
MCP/evidence flow block:
|
||||
|
||||
- `mcp_call_status`
|
||||
- `mcp_call_status_legacy`
|
||||
- `match_failure_stage`
|
||||
- `match_failure_reason`
|
||||
- `rows_fetched`
|
||||
- `raw_rows_received`
|
||||
- `rows_after_account_scope`
|
||||
- `rows_materialized`
|
||||
- `rows_after_recipe_filter`
|
||||
- `rows_matched`
|
||||
- `raw_row_keys_sample`
|
||||
- `materialization_drop_reason`
|
||||
|
||||
Account-scope audit block:
|
||||
|
||||
- `account_scope_mode`
|
||||
- `account_scope_fallback_applied`
|
||||
- resolver block:
|
||||
- `anchor_type`
|
||||
- `anchor_value_raw`
|
||||
- `anchor_value_resolved`
|
||||
- `resolver_confidence`
|
||||
- `ambiguity_count`
|
||||
- MCP/evidence flow block:
|
||||
- `mcp_call_status`
|
||||
- `mcp_call_status_legacy`
|
||||
- `match_failure_stage`
|
||||
- `match_failure_reason`
|
||||
- `rows_fetched`
|
||||
- `raw_rows_received`
|
||||
- `rows_after_account_scope`
|
||||
- `rows_materialized`
|
||||
- `rows_after_recipe_filter`
|
||||
- `rows_matched`
|
||||
- `raw_row_keys_sample`
|
||||
- `materialization_drop_reason`
|
||||
- account-scope audit block:
|
||||
- `account_token_raw`
|
||||
- `account_token_normalized`
|
||||
- `account_scope_fields_checked`
|
||||
- `account_scope_match_strategy`
|
||||
- `account_scope_drop_reason`
|
||||
- `response_type`
|
||||
- `account_token_raw`
|
||||
- `account_token_normalized`
|
||||
- `account_scope_fields_checked`
|
||||
- `account_scope_match_strategy`
|
||||
- `account_scope_drop_reason`
|
||||
|
||||
Result block:
|
||||
|
||||
- `runtime_readiness`
|
||||
- `limited_reason_category`
|
||||
- `fallback_reason`
|
||||
- `response_type`
|
||||
- `limitations`
|
||||
- `reasons`
|
||||
|
||||
Assistant-level metadata (added in `buildAddressDebugPayload`):
|
||||
|
||||
- `llm_decomposition_attempted`
|
||||
- `llm_decomposition_applied`
|
||||
- `llm_provider_used`
|
||||
- `llm_decomposition_trace_id`
|
||||
- `llm_decomposition_effective_message`
|
||||
- `llm_decomposition_reason`
|
||||
- `fallback_rule_hit`
|
||||
- `sanitized_user_message`
|
||||
- `tool_gate_decision`
|
||||
- `tool_gate_reason`
|
||||
- `execution_lane` (`address_query`)
|
||||
|
||||
## Output Contract
|
||||
|
||||
### FACTUAL_LIST
|
||||
|
||||
- short summary
|
||||
- rows[]
|
||||
- totals
|
||||
- short factual summary
|
||||
- rows list
|
||||
- optional hints
|
||||
|
||||
### FACTUAL_SUMMARY
|
||||
|
||||
- aggregate summary
|
||||
- top rows
|
||||
- optional drilldown hints
|
||||
- compact top rows
|
||||
|
||||
### LIMITED_WITH_REASON
|
||||
|
||||
- explicit reason code
|
||||
- missing filters / data availability note
|
||||
- missing filters / data visibility note
|
||||
|
||||
## Limited Reason Taxonomy
|
||||
|
||||
- `empty_match` - live-запрос выполнен, но по фильтру нет строк.
|
||||
- `missing_anchor` - не хватает обязательного якоря (контрагент/договор/счет/период).
|
||||
- `recipe_visibility_gap` - текущий recipe не материализует нужную аналитику.
|
||||
- `execution_error` - ошибка MCP/инфраструктуры/feature-flag.
|
||||
- `unsupported` - вопрос не покрыт address-intent V1.
|
||||
- `empty_match` - live запрос выполнен, но по фильтрам нет строк.
|
||||
- `missing_anchor` - не хватает обязательного якоря или якорь не подтвердился.
|
||||
- `recipe_visibility_gap` - текущий recipe не дает нужной видимости.
|
||||
- `execution_error` - ошибка MCP/feature-flag/инфраструктуры.
|
||||
- `unsupported` - intent не поддержан в Address V1.
|
||||
|
||||
## Runtime Readiness Status
|
||||
|
||||
|
|
@ -101,7 +130,7 @@ Reference:
|
|||
- `DEEP_ONLY`
|
||||
- `UNKNOWN`
|
||||
|
||||
## MCP Stage Status Taxonomy (M2.3c)
|
||||
## MCP Stage Status Taxonomy
|
||||
|
||||
- `skipped`
|
||||
- `error`
|
||||
|
|
@ -112,9 +141,10 @@ Reference:
|
|||
- `matched_non_empty`
|
||||
|
||||
Legacy compatibility:
|
||||
- `mcp_call_status_legacy` may still report `materialized_but_not_matched` for backward-compatible analytics.
|
||||
|
||||
## Materialization Drop Reasons (M2.3c)
|
||||
- `mcp_call_status_legacy` может быть `materialized_but_not_matched` для backward-compatible аналитики.
|
||||
|
||||
## Materialization Drop Reasons
|
||||
|
||||
- `none`
|
||||
- `dropped_by_account_scope_filter`
|
||||
|
|
@ -123,21 +153,15 @@ Legacy compatibility:
|
|||
- `missing_registrator_field`
|
||||
- `unknown_row_shape`
|
||||
|
||||
## Account Scope Strategy (M2.3c)
|
||||
## Account Scope Strategy
|
||||
|
||||
- `strict` - account scope is mandatory and applied as a hard filter.
|
||||
- `preferred` - account scope is applied first; if it yields zero rows while raw rows exist, runtime falls back to raw rows and continues matching.
|
||||
|
||||
## M2.3c Runtime Snapshot
|
||||
|
||||
- Counterparty intents now have confirmed `matched_non_empty` cases in curated live suite.
|
||||
- Account intents still mostly stop at `raw_rows_received_but_not_materialized`.
|
||||
- Guardrails remain unchanged: no free query generation, no false factual outputs.
|
||||
- `strict` - account scope обязателен и работает как hard filter.
|
||||
- `preferred` - account scope применяется first-pass; если дал 0 строк при наличии raw rows, runtime может fallback к raw rows.
|
||||
|
||||
## Compound Query Note
|
||||
|
||||
- `COMPOUND_FACTUAL_QUERY` currently remains detection-only.
|
||||
- Multi-intent decomposition execution is planned for the next increment.
|
||||
- `COMPOUND_FACTUAL_QUERY` пока detection-only.
|
||||
- Multi-intent decomposition execution в runtime V1 не включен.
|
||||
|
||||
## Guardrails
|
||||
|
||||
|
|
@ -145,3 +169,4 @@ Legacy compatibility:
|
|||
- read-only MCP
|
||||
- no free-form query generation
|
||||
- no silent source substitution
|
||||
- false factuals are forbidden (`rows_matched > 0` required for factual)
|
||||
|
|
|
|||
|
|
@ -1,58 +1,67 @@
|
|||
# Address Scenario Matrix (V1)
|
||||
|
||||
Дата: 2026-03-29
|
||||
Дата: 2026-04-02
|
||||
Режим: `question_mode=address_query` (отдельно от deep-analysis)
|
||||
|
||||
## Scope
|
||||
|
||||
Этот сценарный слой покрывает только direct factual lookup без тяжелого reasoning-chain:
|
||||
Этот сценарный слой покрывает direct factual lookup без causal/proof reasoning:
|
||||
|
||||
- список объектов;
|
||||
- агрегаты (остатки/долги/хвосты);
|
||||
- drilldown от агрегата к документам.
|
||||
- списки документов/операций;
|
||||
- агрегатные срезы остатков/взаиморасчетов;
|
||||
- drilldown до документов по счету.
|
||||
|
||||
Не покрывается в V1:
|
||||
|
||||
- "почему так произошло";
|
||||
- доказательная причинно-следственная бухгалтерская интерпретация;
|
||||
- сложные chain proof-вопросы (должны уходить в deep-analysis path).
|
||||
- причинно-следственный анализ ("почему", "докажи", root-cause);
|
||||
- многошаговый multi-intent execution для составных вопросов;
|
||||
- свободный query builder вне whitelist recipe.
|
||||
|
||||
## Matrix
|
||||
## Matrix (актуально по коду)
|
||||
|
||||
| scenario_id | Пользовательский вопрос | intent | required_filters | optional_filters | target_entity_family | MCP recipe | expected_response_type | priority |
|
||||
| scenario_id | Пользовательский вопрос | intent | required_filters (runtime) | optional_filters | target_entity_family | recipe_id (runtime) | expected_response_type (runtime) | priority |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| AQ-P0-01 | Какие договоры не закрыты на текущую дату? | `list_open_contracts` | `as_of_date` | `organization`, `counterparty`, `limit`, `sort` | `NSI_CATALOG`, `ACCOUNTING_REGISTER`, `DOCUMENT` | `address.open_contracts.by_asof` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-02 | Кому мы должны денег на сегодня? | `list_payables_counterparties` | `as_of_date` | `organization`, `account`, `limit`, `sort` | `ACCOUNTING_REGISTER`, `DOCUMENT`, `DOCUMENT_JOURNAL` | `address.payables.counterparty_totals` | `FACTUAL_SUMMARY` | P0 |
|
||||
| AQ-P0-03 | Кто должен нам денег на сегодня? | `list_receivables_counterparties` | `as_of_date` | `organization`, `account`, `limit`, `sort` | `ACCOUNTING_REGISTER`, `DOCUMENT`, `DOCUMENT_JOURNAL` | `address.receivables.counterparty_totals` | `FACTUAL_SUMMARY` | P0 |
|
||||
| AQ-P0-04 | Какой остаток по счету 60 на дату? | `account_balance_snapshot` | `account`, `as_of_date` | `organization`, `limit`, `sort` | `ACCOUNTING_REGISTER`, `CHART_OF_ACCOUNTS` | `address.account.balance_snapshot` | `FACTUAL_SUMMARY` | P0 |
|
||||
| AQ-P0-05 | Какие хвосты висят по контрагенту X? | `open_items_by_counterparty_or_contract` | `counterparty`, `as_of_date` | `organization`, `contract`, `account`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address.open_items.by_counterparty` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-06 | Какие хвосты висят по договору Y? | `open_items_by_counterparty_or_contract` | `contract`, `as_of_date` | `organization`, `counterparty`, `account`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT`, `NSI_CATALOG` | `address.open_items.by_contract` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-07 | Покажи документы по контрагенту X за период | `list_documents_by_counterparty` | `counterparty`, `period_from`, `period_to` | `document_type`, `organization`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL` | `address.documents.by_counterparty` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-07B | Покажи банковские операции по контрагенту X за период | `bank_operations_by_counterparty` | `counterparty` | `period_from`, `period_to`, `organization`, `limit`, `sort` | `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER` | `address.bank_ops.by_counterparty` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-08 | Покажи документы по договору Y за период | `list_documents_by_contract` | `contract`, `period_from`, `period_to` | `document_type`, `organization`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `NSI_CATALOG` | `address.documents.by_contract` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-09 | Какие документы формируют этот остаток по счету 62? | `documents_forming_balance` | `account`, `as_of_date` | `organization`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address.balance.drilldown_documents` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P1-10 | Дай обороты по счету 51 за период | `account_turnover_snapshot` | `account`, `period_from`, `period_to` | `organization`, `counterparty`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address.account.turnover_snapshot` | `FACTUAL_SUMMARY` | P1 |
|
||||
| AQ-P1-11 | Дай список документов по типу "СписаниеСРасчетногоСчета" за период | `list_documents_by_type` | `document_type`, `period_from`, `period_to` | `organization`, `counterparty`, `contract`, `limit` | `DOCUMENT`, `DOCUMENT_JOURNAL` | `address.documents.by_type` | `FACTUAL_LIST` | P1 |
|
||||
| AQ-P0-01 | Какие договоры не закрыты на текущую дату? | `list_open_contracts` | - | `as_of_date`, `organization`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT`, `NSI_CATALOG` | `address_open_contracts_candidates_v1` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-02 | Кому мы должны денег на сегодня? | `list_payables_counterparties` | - | `as_of_date`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER` | `address_movements_payables_v1` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-03 | Кто должен нам денег на сегодня? | `list_receivables_counterparties` | - | `as_of_date`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER` | `address_movements_receivables_v1` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-04 | Какой остаток по счету 60 на дату? | `account_balance_snapshot` | `account` (`as_of_date` defaulted) | `as_of_date`, `period_from`, `period_to`, `limit` | `ACCOUNTING_REGISTER`, `CHART_OF_ACCOUNTS` | `address_movements_account_snapshot_v1` | `FACTUAL_SUMMARY` | P0 |
|
||||
| AQ-P0-05 | Какие хвосты висят по контрагенту/договору? | `open_items_by_counterparty_or_contract` | `counterparty OR contract` | `as_of_date`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address_open_items_by_party_or_contract_v1` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-06 | Покажи документы по контрагенту X | `list_documents_by_counterparty` | `counterparty` | `period_from`, `period_to`, `as_of_date`, `organization`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER` | `address_documents_by_counterparty_v1` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-07 | Покажи банковские операции по контрагенту X | `bank_operations_by_counterparty` | `counterparty` | `period_from`, `period_to`, `as_of_date`, `organization`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER` | `address_bank_operations_by_counterparty_v1` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-08 | Покажи документы по договору Y | `list_documents_by_contract` | `contract` | `period_from`, `period_to`, `as_of_date`, `organization`, `counterparty`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER`, `NSI_CATALOG` | `address_documents_by_contract_v1` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-08B | Покажи банковские операции по договору Y | `bank_operations_by_contract` | `contract` | `period_from`, `period_to`, `as_of_date`, `organization`, `counterparty`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER`, `NSI_CATALOG` | `address_bank_operations_by_contract_v1` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P0-09 | Какие документы формируют остаток по счету 62? | `documents_forming_balance` | `account` + `as_of_date` (`as_of_date` defaulted) | `organization`, `counterparty`, `contract`, `period_from`, `period_to`, `limit`, `sort` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address_documents_forming_balance_v1` | `FACTUAL_LIST` | P0 |
|
||||
| AQ-P1-10 | Дай обороты по счету 51 за период | `account_turnover_snapshot` | `account`, `period_from`, `period_to` | `organization`, `counterparty`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | - (not implemented) | `LIMITED_WITH_REASON` | P1 |
|
||||
| AQ-P1-11 | Дай список документов по типу за период | `list_documents_by_type` | `document_type`, `period_from`, `period_to` | `organization`, `counterparty`, `contract`, `limit` | `DOCUMENT`, `DOCUMENT_JOURNAL` | - (not implemented) | `LIMITED_WITH_REASON` | P1 |
|
||||
| AQ-P2-12 | Покажи технические константы конфигурации | `unsupported_for_v1` | - | - | `CONSTANT` | - | `LIMITED_WITH_REASON` | P2 |
|
||||
|
||||
## Сценарные правила
|
||||
## Runtime rules (актуально по коду)
|
||||
|
||||
- Если вопрос распознается как `address_query`, ответ строится только через recipe-based MCP path.
|
||||
- Если обязательные фильтры не извлечены, вернуть `LIMITED_WITH_REASON` с указанием недостающих параметров.
|
||||
- Если вопрос требует causal/proof reasoning, перевести в deep-analysis path.
|
||||
- Для `as_of_date` по умолчанию используется текущая дата runtime (на момент этого документа: 2026-03-29), если пользователь явно не задал дату.
|
||||
## Runtime status note (M2.3c)
|
||||
- Если mode распознан как `address_query`, ответ строится через whitelist recipe + MCP live path.
|
||||
- Если `shape=EXPLAIN_OR_REASON`, запрос не идет в address lane (handoff в deep-analysis).
|
||||
- Если обязательные фильтры не извлечены, возвращается `LIMITED_WITH_REASON` с `limited_reason_category=missing_anchor`.
|
||||
- Для `account_balance_snapshot` и `documents_forming_balance`:
|
||||
- `as_of_date` берется из `period_to`, если период задан;
|
||||
- иначе default на текущую дату runtime.
|
||||
- Для `documents/bank by counterparty|contract` период по умолчанию не форсируется (all-time), с runtime лимитами и fallback-логикой.
|
||||
- `COMPOUND_FACTUAL_QUERY` пока только детектируется; multi-intent execution не реализован.
|
||||
|
||||
Implemented in live runtime now:
|
||||
## Runtime status note (2026-04-02)
|
||||
|
||||
Реально реализованы в runtime:
|
||||
|
||||
- `list_open_contracts`
|
||||
- `open_items_by_counterparty_or_contract`
|
||||
- `list_documents_by_counterparty`
|
||||
- `bank_operations_by_counterparty`
|
||||
- `documents_forming_balance`
|
||||
|
||||
Still not implemented in runtime:
|
||||
- `list_documents_by_contract`
|
||||
- `bank_operations_by_contract`
|
||||
- `account_balance_snapshot`
|
||||
- `documents_forming_balance`
|
||||
- `list_payables_counterparties`
|
||||
- `list_receivables_counterparties`
|
||||
|
||||
Stage diagnostic note:
|
||||
- strict account intents still show `raw_rows_received > 0`, but `rows_after_account_scope = 0`;
|
||||
- counterparty intents now have curated `matched_non_empty` cases after resolver/filter tuning;
|
||||
- account family still needs account-scope/materialization fix before first stable non-empty account case.
|
||||
Остаются вне runtime V1:
|
||||
|
||||
- `account_turnover_snapshot`
|
||||
- `list_documents_by_type`
|
||||
|
|
|
|||
|
|
@ -0,0 +1,100 @@
|
|||
# Domain Acceptance Question Set Template V1
|
||||
|
||||
Дата: `YYYY-MM-DD`
|
||||
Назначение: стандартная структура acceptance-набора вопросов для одного домена.
|
||||
|
||||
## 1. Naming Convention
|
||||
|
||||
Файл набора:
|
||||
|
||||
- `docs/ADDRESS/question_sets/domain_<domain_name>_acceptance_<YYYY-MM-DD>.json`
|
||||
|
||||
Run ID:
|
||||
|
||||
- `YYYY-MM-DD_Address_Query_Domain_<DomainName>_Acceptance_<HH-mm-ss>`
|
||||
|
||||
## 2. Минимальный состав кейсов
|
||||
|
||||
1. `canonical`: не меньше 10 вопросов.
|
||||
2. `noisy_slang`: не меньше 10 вопросов.
|
||||
3. `followup_chain`: не меньше 5 цепочек.
|
||||
|
||||
Каждый вопрос должен иметь:
|
||||
|
||||
- ожидаемый `intent`
|
||||
- ожидаемый набор required filters
|
||||
- expected outcome (`factual_non_empty | factual_empty | limited_with_reason`)
|
||||
|
||||
## 3. JSON Shape (рекомендуемый)
|
||||
|
||||
```json
|
||||
{
|
||||
"pack_id": "domain_<domain_name>_acceptance_<YYYY-MM-DD>",
|
||||
"question_mode": "address_query",
|
||||
"strict_policy": "route",
|
||||
"cases": [
|
||||
{
|
||||
"id": "canonical_001",
|
||||
"group": "canonical",
|
||||
"question": "<user question>",
|
||||
"expected": {
|
||||
"intent": "<intent_name>",
|
||||
"required_filters_present": ["<filter_a>"],
|
||||
"outcome": "factual_non_empty"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "noisy_001",
|
||||
"group": "noisy_slang",
|
||||
"question": "<noisy question>",
|
||||
"expected": {
|
||||
"intent": "<intent_name>",
|
||||
"required_filters_present": ["<filter_a>"],
|
||||
"outcome": "factual_non_empty"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "followup_001_step_1",
|
||||
"group": "followup_chain",
|
||||
"session_id": "followup_001",
|
||||
"question": "<first question in chain>",
|
||||
"expected": {
|
||||
"intent": "<intent_name>",
|
||||
"required_filters_present": ["<filter_a>"],
|
||||
"outcome": "factual_non_empty"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "followup_001_step_2",
|
||||
"group": "followup_chain",
|
||||
"session_id": "followup_001",
|
||||
"question": "<follow-up question>",
|
||||
"expected": {
|
||||
"intent": "<intent_name>",
|
||||
"required_filters_present": ["<filter_a>"],
|
||||
"outcome": "factual_non_empty"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 4. Правила наполнения
|
||||
|
||||
1. Не использовать company-specific формулировки как обязательные якоря.
|
||||
2. Для follow-up обязательно включать короткие реплики (`а теперь`, `по нему`, `на ту же дату`).
|
||||
3. Для noisy включать опечатки/сленг/шумовые хвосты.
|
||||
4. Для каждого intent должна быть хотя бы одна negative-пара (вопрос похож, но должен уйти в другой intent или limited).
|
||||
|
||||
## 5. Acceptance Gate
|
||||
|
||||
Для закрытия домена набор должен пройти:
|
||||
|
||||
1. `strict_pass(route)=100%`
|
||||
2. `false_factual_rate=0`
|
||||
3. `execution_error_rate=0`
|
||||
|
||||
После domain-gate обязателен global regression gate:
|
||||
|
||||
1. `address_slang_stress_full_2026-04-02.json`
|
||||
2. `address_followup_context_chains_2026-04-02.json`
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
# Domain Card Template V1
|
||||
|
||||
Дата: `YYYY-MM-DD`
|
||||
Домен: `<domain_name>`
|
||||
Статус: `draft | active | shadow | deprecated`
|
||||
Владелец: `<owner/team>`
|
||||
|
||||
## 1. Scope
|
||||
|
||||
Кратко: какую бизнес-задачу закрывает домен и что сознательно не входит в scope.
|
||||
|
||||
In-scope intents:
|
||||
|
||||
1. `<intent_1>`
|
||||
2. `<intent_2>`
|
||||
|
||||
Out-of-scope:
|
||||
|
||||
1. `<intent_or_case_not_supported>`
|
||||
|
||||
## 2. Intent Contract
|
||||
|
||||
Для каждого intent фиксируем контракт.
|
||||
|
||||
### 2.1 `<intent_1>`
|
||||
|
||||
- `query_shape`: `FACTUAL_LIST | FACTUAL_SUMMARY`
|
||||
- `required_filters`: `[<filter_a>, <filter_b>]`
|
||||
- `optional_filters`: `[<filter_c>]`
|
||||
- `resolver_signals`: ключевые фразы/паттерны распознавания
|
||||
- `ambiguity_rules`: как разрешаем коллизии (дата vs счет vs номер договора)
|
||||
- `fallback_policy`: только внутри intent, без смены домена
|
||||
|
||||
### 2.2 `<intent_2>`
|
||||
|
||||
- `query_shape`: `FACTUAL_LIST | FACTUAL_SUMMARY`
|
||||
- `required_filters`: `[...]`
|
||||
- `optional_filters`: `[...]`
|
||||
- `resolver_signals`: `...`
|
||||
- `ambiguity_rules`: `...`
|
||||
- `fallback_policy`: `...`
|
||||
|
||||
## 3. Recipe Mapping
|
||||
|
||||
Связка `intent -> recipe_id` должна совпадать с runtime catalog (`addressRecipeCatalog.ts`).
|
||||
|
||||
| intent | recipe_id | mcp_method | expected_statuses |
|
||||
| --- | --- | --- | --- |
|
||||
| `<intent_1>` | `<address_*_v1>` | `<method>` | `matched_non_empty, no_raw_rows, materialized_but_not_anchor_matched` |
|
||||
| `<intent_2>` | `<address_*_v1>` | `<method>` | `...` |
|
||||
|
||||
## 4. Anchor and Resolver Rules
|
||||
|
||||
- `anchor_type`: `counterparty | contract | account | date_range | ...`
|
||||
- `anchor_resolution_order`: metadata-first порядок
|
||||
- `min_confidence`: порог для factual-ответа
|
||||
- `unresolved_behavior`: что отдаем при неполной резолюции
|
||||
|
||||
## 5. Limited Reasons (taxonomy)
|
||||
|
||||
Разрешенные категории для этого домена:
|
||||
|
||||
1. `<limited_reason_category_1>`
|
||||
2. `<limited_reason_category_2>`
|
||||
|
||||
Запрещено:
|
||||
|
||||
- смешивать произвольные free-form причины;
|
||||
- выдавать factual при unresolved required filter.
|
||||
|
||||
## 6. Test Coverage
|
||||
|
||||
Unit:
|
||||
|
||||
1. resolver intent positives
|
||||
2. resolver negatives (непересечение с соседними intent)
|
||||
3. filter extraction required/optional
|
||||
4. ambiguity resolution tests
|
||||
|
||||
Integration:
|
||||
|
||||
1. recipe selection
|
||||
2. execution status mapping
|
||||
3. debug payload completeness
|
||||
|
||||
Live acceptance:
|
||||
|
||||
1. canonical questions
|
||||
2. noisy/slang questions
|
||||
3. follow-up chains
|
||||
|
||||
## 7. Gate Criteria
|
||||
|
||||
Domain gate:
|
||||
|
||||
- `strict_pass(route)=100%`
|
||||
- `false_factual_rate=0`
|
||||
- `execution_error_rate=0`
|
||||
|
||||
Global gate:
|
||||
|
||||
- baseline stress не ниже текущего эталона
|
||||
- baseline follow-up не ниже текущего эталона
|
||||
|
||||
## 8. Rollout Plan
|
||||
|
||||
1. `shadow`: логируем и сравниваем без влияния на prod-ответ.
|
||||
2. `soft-enable`: ограниченное включение (feature flag/percentage).
|
||||
3. `prod`: полное включение после green global gate.
|
||||
|
||||
## 9. Artifacts
|
||||
|
||||
Обязательные артефакты:
|
||||
|
||||
1. `domain_<name>_card_v1.md`
|
||||
2. `question_sets/domain_<name>_acceptance_<date>.json`
|
||||
3. `runs/<run_id>/run_summary.json`
|
||||
4. `runs/<run_id>/full_live_results.json`
|
||||
5. `runs/<run_id>/failures_only.json`
|
||||
6. `runs/<run_id>/README.md`
|
||||
|
||||
## 10. Change Log
|
||||
|
||||
- `YYYY-MM-DD` — `<what changed>`
|
||||
|
|
@ -0,0 +1,257 @@
|
|||
# Domain Expansion Implementation Plan V1
|
||||
|
||||
Дата: 2026-04-02
|
||||
Контур: `question_mode=address_query` (live-first, MCP)
|
||||
Стартовая база качества: закрытый этап стабилизации (`102/102` stress, `25/25` follow-up).
|
||||
|
||||
## 1. Цель и рамки
|
||||
|
||||
Цель этапа: расширять покрытие доменов/интентов без деградации уже стабильного ядра.
|
||||
|
||||
Рамки:
|
||||
|
||||
- не добавлять company-specific словари/хардкод;
|
||||
- не генерировать свободные запросы к БД/1С через LLM;
|
||||
- работать только через whitelist `intent -> filters -> recipe -> MCP -> factual`;
|
||||
- сохранять release gate: `strict_policy=route`, `false_factual_rate=0`.
|
||||
|
||||
## 2. Что считаем “доменом”
|
||||
|
||||
Домен в этом плане: группа связанных интентов с общей семантикой фильтров и единым набором recipe.
|
||||
|
||||
Примеры доменов:
|
||||
|
||||
1. `contracts_open_items` (незакрытые договоры/позиции)
|
||||
2. `counterparty_documents_bank_ops`
|
||||
3. `account_balance_drilldown`
|
||||
4. `turnover_snapshots`
|
||||
5. `documents_by_type`
|
||||
|
||||
## 3. Базовые принципы внедрения
|
||||
|
||||
1. Metadata-first
|
||||
- Любые якоря (контрагент, договор, счет) подтверждаем через live metadata/rows.
|
||||
- Если якорь не подтвержден, не выдаем псевдо-factual.
|
||||
|
||||
2. Data-agnostic runtime
|
||||
- Никаких уникальных названий компании/договоров в коде как правил.
|
||||
- Допустимы только универсальные нормализаторы формата (дата, номер счета, шумовые токены).
|
||||
|
||||
3. Gate before scale
|
||||
- Каждый новый домен включаем только после прохождения локального domain-gate и полного regression-gate.
|
||||
|
||||
4. Explainability
|
||||
- Для каждого partial/error обязателен объяснимый `limited_reason_category`.
|
||||
|
||||
## 4. Текущий baseline (на который нельзя просесть)
|
||||
|
||||
Обязательные контрольные паки:
|
||||
|
||||
1. `docs/ADDRESS/question_sets/address_slang_stress_full_2026-04-02.json`
|
||||
2. `docs/ADDRESS/question_sets/address_followup_context_chains_2026-04-02.json`
|
||||
|
||||
Текущие пороги (must keep):
|
||||
|
||||
- stress pack: `route_pass=102/102`, `strict_pass(route)=102/102`
|
||||
- follow-up pack: `route_pass=25/25`, `strict_pass(route)=25/25`
|
||||
|
||||
## 4.1. Обязательный pre-prod prerequisite
|
||||
|
||||
Перед масштабным Step-4 должен быть закрыт Step-0 (рельсовый pre-prod):
|
||||
|
||||
- `step0_preprod_rail_plan_v1.md`
|
||||
- `domain_card_template_v1.md`
|
||||
- `domain_acceptance_question_set_template_v1.md`
|
||||
- `run_pack_spec_v1.md`
|
||||
|
||||
Фактический статус на 2026-04-02: Step-0 закрыт (`step0_closeout_2026-04-02.md`), включая nightly automation и reference-domain cycle.
|
||||
|
||||
Ограничение остается как guardrail: если Step-0 в будущем будет нарушен (drift артефактов/gate), расширение снова переводится в ограниченный режим.
|
||||
|
||||
## 5. Domain rollout model (одинаковый для каждого нового домена)
|
||||
|
||||
### Phase A. Domain design
|
||||
|
||||
1. Выбрать домен из `runtime_readiness_matrix_v1.md` с максимальной ценностью и минимальным риском.
|
||||
2. Зафиксировать:
|
||||
- список интентов домена;
|
||||
- обязательные фильтры;
|
||||
- допустимые optional-фильтры;
|
||||
- тип ответа (`FACTUAL_LIST`/`FACTUAL_SUMMARY`/`LIMITED_WITH_REASON`).
|
||||
3. Создать domain card (в docs) с примерами canonical/noisy/follow-up формулировок.
|
||||
|
||||
Выход фазы:
|
||||
|
||||
- domain card;
|
||||
- update scenario matrix;
|
||||
- список acceptance-вопросов по домену.
|
||||
|
||||
### Phase B. Resolver + filters
|
||||
|
||||
1. Добавить/уточнить intent resolver для домена.
|
||||
2. Добавить extractor/validator фильтров.
|
||||
3. Проверить ambiguous anchors:
|
||||
- коллизии чисел (дата vs счет vs номер договора);
|
||||
- короткие follow-up реплики;
|
||||
- мусорные хвосты/сленг.
|
||||
|
||||
Выход фазы:
|
||||
|
||||
- unit tests на resolver/filter;
|
||||
- audit по ambiguous кейсам;
|
||||
- отсутствие ложных positive в test-паке.
|
||||
|
||||
### Phase C. Recipe implementation
|
||||
|
||||
1. Добавить whitelist recipe в `query_recipes_v1.md` и runtime catalog.
|
||||
2. Привязать intent -> recipe selector.
|
||||
3. Реализовать execution contract:
|
||||
- fixed sort/limit;
|
||||
- read-only;
|
||||
- status taxonomy (`matched_non_empty`, `no_raw_rows`, `materialized_but_not_anchor_matched`, ...).
|
||||
|
||||
Выход фазы:
|
||||
|
||||
- интеграционные тесты recipe;
|
||||
- валидный debug payload;
|
||||
- dry-run/локальный smoke.
|
||||
|
||||
### Phase D. Domain acceptance live
|
||||
|
||||
1. Собрать domain question set (минимум 3 слоя):
|
||||
- canonical (чистые формулировки);
|
||||
- noisy/slang;
|
||||
- follow-up chain.
|
||||
2. Прогнать live batch и сохранить артефакты в `docs/ADDRESS/runs/<run_id>/`.
|
||||
3. Проверить domain-gate:
|
||||
- `strict_pass(route) = 100%` для domain-пака;
|
||||
- `false_factual_rate = 0`;
|
||||
- `execution_error_rate = 0`.
|
||||
|
||||
Выход фазы:
|
||||
|
||||
- `run_summary.json`;
|
||||
- `full_live_results.json`;
|
||||
- `failures_only.json`;
|
||||
- краткий `README.md` пака.
|
||||
|
||||
### Phase E. Global non-regression gate
|
||||
|
||||
После успешного domain-gate обязательно:
|
||||
|
||||
1. Прогон stress pack (`102`).
|
||||
2. Прогон follow-up pack (`25`).
|
||||
3. Сравнение до/после по:
|
||||
- `route_pass_rate`;
|
||||
- `strict_pass_rate`;
|
||||
- `partial_coverage_count`;
|
||||
- `execution_error_count`.
|
||||
|
||||
Rule:
|
||||
|
||||
- если любой из baseline-порогов просел, домен не включаем в production-path.
|
||||
|
||||
## 6. Порядок внедрения доменов (рекомендуемый)
|
||||
|
||||
1. `account_turnover_snapshot`
|
||||
- Первый новый domain-intent, которого нет в runtime V1; хорошо измерим отдельным gate.
|
||||
|
||||
2. `documents_by_type`
|
||||
- После фиксации type-normalization и alias-safe matching.
|
||||
|
||||
3. Multi-intent execution для `COMPOUND_FACTUAL_QUERY` (V1.1 lane)
|
||||
- Сейчас в runtime это detection-only, без subquery execution.
|
||||
|
||||
4. Дополнительный hardening уже внедренных by-contract/by-counterparty intent-веток
|
||||
- Проводить как parallel quality track без изменения domain scope.
|
||||
|
||||
## 7. Артефакты и структура документов
|
||||
|
||||
Для каждого домена создать:
|
||||
|
||||
1. `docs/ADDRESS/address_query/domain_<name>_card_v1.md`
|
||||
2. `docs/ADDRESS/question_sets/domain_<name>_acceptance_<date>.json`
|
||||
3. `docs/ADDRESS/runs/<run_id>/run_summary.json`
|
||||
4. `docs/ADDRESS/runs/<run_id>/README.md`
|
||||
|
||||
Обновлять после каждого закрытия:
|
||||
|
||||
- `runtime_readiness_matrix_v1.md`
|
||||
- `address_scenario_matrix.md`
|
||||
- `global_execution_checklist_v1.md`
|
||||
- `stage_closeout_*.md` (по окончании крупного этапа)
|
||||
|
||||
## 8. Метрики контроля по домену
|
||||
|
||||
Core metrics:
|
||||
|
||||
1. `intent_resolution_rate`
|
||||
2. `required_filter_resolution_rate`
|
||||
3. `route_pass_rate`
|
||||
4. `strict_pass_rate`
|
||||
5. `factual_non_empty_rate`
|
||||
6. `partial_with_reason_rate`
|
||||
7. `execution_error_rate`
|
||||
8. `false_factual_rate`
|
||||
|
||||
Порог включения домена:
|
||||
|
||||
- `strict_pass_rate = 100%` на domain-паке;
|
||||
- `false_factual_rate = 0`;
|
||||
- `execution_error_rate = 0`.
|
||||
|
||||
## 9. Логирование и наблюдаемость (обязательно)
|
||||
|
||||
Минимум в debug payload для всех новых доменов:
|
||||
|
||||
- `detected_intent`
|
||||
- `query_shape`
|
||||
- `extracted_filters`
|
||||
- `selected_recipe`
|
||||
- `anchor_type`, `anchor_value_raw`, `anchor_value_resolved`, `resolver_confidence`
|
||||
- `mcp_call_status`
|
||||
- `rows_fetched`, `rows_materialized`, `rows_matched`
|
||||
- `limited_reason_category`
|
||||
- `llm_decomposition_*`
|
||||
- `fallback_rule_hit`
|
||||
|
||||
Отдельно:
|
||||
|
||||
- хранить raw/model trace ID для каждой попытки decomposition;
|
||||
- не терять связку question -> response -> debug payload в batch-артефактах.
|
||||
|
||||
## 10. Риски и как снимаем
|
||||
|
||||
1. Drift в follow-up контексте
|
||||
- Лечение: обязательный follow-up domain-pack + cross-pack regression.
|
||||
|
||||
2. Переобучение на текущую базу
|
||||
- Лечение: запрет на company-specific словари в runtime.
|
||||
|
||||
3. Рост partial из-за узких фильтров
|
||||
- Лечение: controlled fallback только внутри intent, без подмены домена/якоря.
|
||||
|
||||
4. Нестабильность local LLM
|
||||
- Лечение: deterministic fallback + strict validator + trace audit.
|
||||
|
||||
## 11. Операционный ритм (итерация)
|
||||
|
||||
Одна итерация по домену:
|
||||
|
||||
1. Day 1: design + resolver/filter.
|
||||
2. Day 2: recipe + tests.
|
||||
3. Day 3: live acceptance + regression + docs update.
|
||||
|
||||
Результат итерации:
|
||||
|
||||
- либо домен включен в production lane;
|
||||
- либо остается в `shadow/disabled` с явным backlog-фикс листом.
|
||||
|
||||
## 12. Definition of Done для этапа “Domain Expansion V1”
|
||||
|
||||
Этап считается закрытым, когда:
|
||||
|
||||
1. Закрыт согласованный список новых доменов из раздела 6.
|
||||
2. Для каждого домена есть полный комплект артефактов (docs + question set + run artifacts).
|
||||
3. Global baseline-паки не деградируют после каждого включения.
|
||||
4. `global_execution_checklist_v1.md` отражает актуальный финальный статус.
|
||||
|
|
@ -107,3 +107,23 @@ Acceptance gates:
|
|||
- Сегодня стартуем с `M0` и `M1` (контракты + классификация/фильтры).
|
||||
- После этого закрываем `M1.5` (shadow L0 router + регрессия на шумных вопросах).
|
||||
- И только затем поднимаем `M2` для 2 первых intents (`payables/receivables`).
|
||||
|
||||
## Progress Update (2026-04-02)
|
||||
|
||||
Статус по subwave:
|
||||
|
||||
- `M0`: выполнено.
|
||||
- `M1`: выполнено.
|
||||
- `M1.5`: выполнено (LLM-first decompose + deterministic fallback, local provider).
|
||||
- `M2`: выполнено для текущего production-набора intents.
|
||||
- `M3`: выполнено для текущего factual/limited contract.
|
||||
- `M4`: выполнено для текущего acceptance scope.
|
||||
|
||||
Подтверждающие финальные артефакты:
|
||||
|
||||
- `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json` (`102/102`, strict route pass).
|
||||
- `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json` (`25/25`, strict route pass).
|
||||
|
||||
Дальнейшее движение:
|
||||
|
||||
- новый цикл как `Step-4`: domain expansion + nightly regression automation.
|
||||
|
|
|
|||
|
|
@ -1,91 +1,94 @@
|
|||
# Global Execution Checklist V1
|
||||
|
||||
Дата старта: 2026-04-02
|
||||
Цель: последовательное закрытие V1 без архитектурного дрейфа и без company-specific хардкода.
|
||||
Последнее обновление: 2026-04-02
|
||||
Цель: последовательное закрытие Address Query V1 без архитектурного дрейфа и без company-specific хардкода.
|
||||
|
||||
## Правило выполнения
|
||||
|
||||
- Идем по пунктам сверху вниз.
|
||||
- Каждый пункт закрываем только после live-прогона и фиксации артефакта в `docs/ADDRESS/runs/...`.
|
||||
- Критерий качества: `strict_policy=route`, `false_factual_rate=0`, объяснимый debug trace.
|
||||
- Идем по шагам сверху вниз.
|
||||
- Каждый шаг закрывается только после live-прогона и фиксации артефакта в `docs/ADDRESS/runs/...`.
|
||||
- Критерий качества: `strict_policy=route`, `false_factual_rate=0`, explainable debug trace.
|
||||
|
||||
## Текущий статус (срез)
|
||||
## Сводка текущего этапа (закрыто)
|
||||
|
||||
- [x] Stabilization regression (slang/noisy input) на полном паке из 102 вопросов.
|
||||
- [x] Follow-up context hardening (короткие продолжения в сессии) на паке из 25 вопросов.
|
||||
- [x] Metadata-first якорь договора переведен на live-подтвержденный (`19/15`) вместо synthetic.
|
||||
- [x] Release gate для текущего набора intents достигнут на live.
|
||||
|
||||
## Подтвержденные live-артефакты (финальные для этапа)
|
||||
|
||||
1. Полный stress-pack
|
||||
- Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
|
||||
- Результат: `questions_total=102`, `semantic_pass=102/102`, `route_pass=102/102`, `strict_pass(route)=102/102`
|
||||
- Reply profile: `factual=97`, `partial=5` (только non-blocking empty match).
|
||||
|
||||
2. Follow-up chains pack
|
||||
- Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
|
||||
- Результат: `questions_total=25`, `semantic_pass=25/25`, `route_pass=25/25`, `strict_pass(route)=25/25`
|
||||
- Reply profile: `factual=23`, `partial=2` (non-blocking empty match).
|
||||
|
||||
## Что было сделано в рамках этапа
|
||||
|
||||
1. Hardening noisy-input маршрутизации
|
||||
- Усилен decompose/fallback слой для шумных формулировок.
|
||||
- Убраны нестабильные хвосты в датах/периодах (`2020.05`, `year 2020` и т.п.) на этапе фильтров.
|
||||
|
||||
2. Hardening follow-up цепочек
|
||||
- Усилено удержание intent/anchor в коротких репликах вида `а теперь ...`, `по нему ...`, `на ту же дату ...`.
|
||||
- Расширен stop-word/cleanup слой для служебного мусора в фразах.
|
||||
|
||||
3. Якоря договора только metadata-first
|
||||
- Synthetic anchor заменен на live-подтвержденный `19/15`.
|
||||
- Цепочки follow-up обновлены на стабильные формулировки дат (`2020`, `2020-12-31`).
|
||||
|
||||
4. Наборы вопросов синхронизированы с live-якорями
|
||||
- Обновлены question sets в `docs/ADDRESS/question_sets/` под `19/15`.
|
||||
- Закрыт прогон follow-up пакета с новым якорем на `25/25`.
|
||||
|
||||
## Что осталось (ближайшие этапы)
|
||||
|
||||
### Step-0 (pre-prod rails, обязательный перед массовым expansion)
|
||||
|
||||
- [x] Зафиксирован Step-0 план: `step0_preprod_rail_plan_v1.md`.
|
||||
- [x] Зафиксирован шаблон domain card: `domain_card_template_v1.md`.
|
||||
- [x] Зафиксирован шаблон domain acceptance набора: `domain_acceptance_question_set_template_v1.md`.
|
||||
- [x] Зафиксирована спецификация run-пака: `run_pack_spec_v1.md`.
|
||||
- [x] Добавлен structural validator run-паков: `scripts/validate_address_run_pack.py`.
|
||||
- [x] Добавлен baseline comparator до/после merge домена: `scripts/compare_address_run_summary.py`.
|
||||
- [x] Добавлен nightly regression orchestrator на baseline-паках (`102` + `25`): `scripts/run_address_nightly_regression.py` (+ `scripts/run_address_nightly_regression.ps1`).
|
||||
- [x] Выполнен первый боевой nightly run (green): `docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15/`.
|
||||
- [x] Подключено nightly-расписание (Windows Task Scheduler), owner закреплен:
|
||||
- task: `NDC_ADDRESS_Nightly_Regression`
|
||||
- owner: `DCTOUCH`
|
||||
- schedule: `daily 03:30`
|
||||
- script: `scripts/run_address_nightly_regression.ps1`
|
||||
- [x] Прогнан референсный домен через полный рельсовый цикл:
|
||||
- domain pack: `docs/ADDRESS/question_sets/domain_contracts_open_items_acceptance_2026-04-02.json`
|
||||
- run: `docs/ADDRESS/runs/2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22/`
|
||||
- result: `strict_pass(route)=23/23`
|
||||
- [x] Повторный nightly после runtime-фиксов (F014/F020) — green:
|
||||
- run: `docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00/`
|
||||
- result: `stress 102/102`, `follow-up 25/25`, validator/comparator PASS
|
||||
|
||||
Итог: Step-0 pre-prod rails закрыт, можно переходить к Step-4 в factory-режиме.
|
||||
|
||||
### Step-4 (domain expansion)
|
||||
|
||||
- [x] `OPEN_ITEMS` стабилизация (as_of, recovery, fallback) + фокус-прогон `7/7`.
|
||||
Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_11-54-08/run_summary.json`
|
||||
- [x] Полный live regression по `address_slang_stress_full_2026-04-02.json` (102 кейса) выполнен.
|
||||
Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-28-31/run_summary.json`
|
||||
Результат: `route_pass=79/102 (77.45%)`, `factual=74`, `partial=28`.
|
||||
- [x] Единый acceptance baseline для релизного gate.
|
||||
- [x] Дожать follow-up цепочки (контекстные короткие реплики).
|
||||
- [ ] Domain expansion без деградации текущих intents.
|
||||
- [ ] CI/nightly automation для обязательного прогона regression-пака.
|
||||
- [ ] Resolver hardening для более широкого набора anchor-типов (без company-specific словарей).
|
||||
- [ ] CI/nightly automation полного regression-пака.
|
||||
|
||||
## Очередь задач
|
||||
## Документация (code-sync)
|
||||
|
||||
1. Full regression baseline (102 кейса)
|
||||
- Прогон полного вопросника в live.
|
||||
- Сохранение `run_summary.json`, `full_live_results.json`, `failures_only.json`.
|
||||
- Фиксация pass-rate и топ-ошибок.
|
||||
- Статус: выполнено, нужна итерация hardening до целевого gate.
|
||||
- [x] Базовые docs синхронизированы с текущим runtime-кодом (`README`, `address_scenario_matrix`, `query_recipes`, `runtime_readiness_matrix`, `address_runtime_contracts`, `runtime_integration_plan`).
|
||||
|
||||
2. Follow-up hardening
|
||||
- Проверка цепей вида: «а теперь ...», «на ту же дату», «по тому же договору».
|
||||
- Закрытие системных кейсов в tests + live-pack.
|
||||
|
||||
3. Resolver hardening (metadata-first)
|
||||
- Усилить резолв якорей через live-данные, без словарей под конкретную базу.
|
||||
- Снизить `materialized_but_not_anchor_matched` без ложных factual.
|
||||
|
||||
4. Domain expansion
|
||||
- Расширить покрытие intents по матрице readiness.
|
||||
- Для каждого нового intent: recipe + tests + live acceptance.
|
||||
|
||||
5. Release gate automation
|
||||
- Закрепить обязательный регресс-порог перед релизом.
|
||||
- Добавить nightly запуск полного пака и сводный отчет.
|
||||
|
||||
## Ближайший шаг
|
||||
|
||||
`Step-4`: расширение доменов по матрице readiness без деградации текущего релизного gate (`strict_policy=route`).
|
||||
|
||||
## Latest Update (2026-04-02)
|
||||
|
||||
- Full live stress rerun: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
|
||||
- Result: `route_pass=102/102 (100%)`, `strict_pass(route)=102/102`, `semantic_pass=102/102`
|
||||
- Hardening applied:
|
||||
- safer document-intent recipe filter fallback (avoid zeroing matched rows when registrator labels are noisy)
|
||||
- contract anchor cleanup for tails like `year 2020` / trailing separated year
|
||||
- Acceptance baseline for current 102-case pack: reached.
|
||||
|
||||
## Next Step
|
||||
|
||||
`Step-3`: follow-up context chains and domain expansion under the same release gate (`strict_policy=route`, no blocked routes).
|
||||
|
||||
## Latest Update (Step-3 Follow-up)
|
||||
|
||||
- Added follow-up pack: `docs/ADDRESS/question_sets/address_followup_context_chains_2026-04-02.json` (25 cases, session-bound chains).
|
||||
- Live run #1: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_13-47-Run1/run_summary.json`
|
||||
- `semantic_pass=18/25`, `route_pass=17/25`.
|
||||
- Main gaps: intent drift in short follow-up phrases (`a теперь ...`, `по нему`) and noisy counterparty heuristic tokens.
|
||||
- Hardening implemented:
|
||||
- decompose-stage follow-up intent adjustment for contract chains and open-items wording;
|
||||
- balance-family follow-up intent retention for compact account prompts;
|
||||
- counterparty heuristic stop-words extended (`теперь`, `вернись`, `раскрой`, pronoun anchors).
|
||||
- regression tests expanded in `addressQueryRuntimeM23.test.ts`.
|
||||
- Live run #2 after fixes: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_13-47-Run2/run_summary.json`
|
||||
- `semantic_pass=25/25`, `route_pass=22/25`.
|
||||
- Remaining 3 fails were tied to synthetic contract anchor in `open_items` (`materialized_but_not_anchor_matched`).
|
||||
|
||||
## Immediate Next
|
||||
|
||||
- Replace synthetic contract chain anchor with metadata-proven live contract anchor(s) and rerun follow-up pack to target `route_pass=25/25`.
|
||||
|
||||
## Latest Update (Step-3 Closeout)
|
||||
|
||||
- Metadata-proven live anchor selected from 1С directory: `19/15` (validated against `Справочник.ДоговорыКонтрагентов`).
|
||||
- Follow-up contract chain updated to stable phrasing (`2020` / `2020-12-31`) and rerun in live.
|
||||
- Live run #5: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
|
||||
- `semantic_pass=25/25`, `route_pass=25/25`, `strict_pass(route)=25/25`.
|
||||
- Step-3 (follow-up hardening) is considered closed under current release gate.
|
||||
## План Step-4 (коротко)
|
||||
|
||||
1. Добавить новые intents из матрицы readiness (по одному домену за итерацию).
|
||||
2. Для каждого intent: recipe + unit/integration tests + live acceptance run.
|
||||
3. После каждого добавления прогонять оба gate-пака:
|
||||
- `address_slang_stress_full_2026-04-02.json`
|
||||
- `address_followup_context_chains_2026-04-02.json`
|
||||
4. Release-критерий итерации: не ниже текущего `strict_pass(route)=100%` на обоих паках.
|
||||
|
|
|
|||
|
|
@ -1,116 +1,107 @@
|
|||
# Query Recipes V1 (Address Query)
|
||||
|
||||
Дата: 2026-03-29
|
||||
Контур: Stage 4, отдельная ветка `question_mode=address_query`
|
||||
Дата: 2026-04-02
|
||||
Контур: `question_mode=address_query` (live-first, whitelist only)
|
||||
|
||||
## 1) Safe Access Contract
|
||||
|
||||
Цепочка должна быть строго управляемой:
|
||||
Каноническая цепочка исполнения:
|
||||
|
||||
`intent -> filters -> recipe -> MCP -> factual result`
|
||||
`intent -> filters -> recipe -> MCP -> materialization -> factual/limited`
|
||||
|
||||
Ограничения:
|
||||
|
||||
- LLM не генерирует произвольный SQL/1C-запрос.
|
||||
- LLM выбирает только `recipe_id` из каталога и заполняет параметры.
|
||||
- Любой нераспознанный или рискованный случай возвращается как `LIMITED_WITH_REASON` или уходит в deep-analysis.
|
||||
- LLM не генерирует свободные SQL/1C-запросы.
|
||||
- Runtime выбирает только `recipe_id` из статического каталога.
|
||||
- Если фильтры/якоря невалидны или не подтверждены, возвращается `LIMITED_WITH_REASON`.
|
||||
|
||||
## 2) Entity Catalog (P0 for address-query)
|
||||
## 2) Entity Families (runtime focus)
|
||||
|
||||
Базовые семейства для V1:
|
||||
- `ACCOUNTING_REGISTER` (`РегистрБухгалтерии.Хозрасчетный`)
|
||||
- `DOCUMENT` (`СписаниеСРасчетногоСчета`, `ПоступлениеНаРасчетныйСчет`, документные строки)
|
||||
- `DOCUMENT_JOURNAL`
|
||||
- `NSI_CATALOG` (договоры, контрагенты)
|
||||
- `CHART_OF_ACCOUNTS`
|
||||
|
||||
- `ACCOUNTING_REGISTER` (`AccountingRegister_Хозрасчетный*`)
|
||||
- `DOCUMENT` (`СписаниеСРасчетногоСчета`, `ПоступлениеНаРасчетныйСчет`, `АктСверкиВзаиморасчетов`, документные линии)
|
||||
- `DOCUMENT_JOURNAL` (`ДокументыПоставщиков`, `ДокументыПокупателей`, `БанковскиеВыписки`)
|
||||
- `NSI_CATALOG` (`ДоговорыКонтрагентов`, плюс фильтровые справочники)
|
||||
- `CHART_OF_ACCOUNTS` (`Хозрасчетный`)
|
||||
## 3) Filter Catalog (runtime)
|
||||
|
||||
## 3) Filter Catalog
|
||||
|
||||
| filter | type | required_when | notes |
|
||||
| filter | type | required_when (runtime) | notes |
|
||||
|---|---|---|---|
|
||||
| `period_from` | date (`YYYY-MM-DD`) | turnover/list-by-period intents | начало периода |
|
||||
| `period_to` | date (`YYYY-MM-DD`) | turnover/list-by-period intents | конец периода |
|
||||
| `as_of_date` | date (`YYYY-MM-DD`) | balance/open-items intents | срез на дату |
|
||||
| `organization` | string/guid | optional | если не задано, берется default company scope |
|
||||
| `counterparty` | string/guid | required for by-counterparty intents | допускается name->id resolver |
|
||||
| `contract` | string/guid | required for by-contract intents | допускается number/name->id resolver |
|
||||
| `account` | string (`60`, `62.01`, ...) | required for account intents | только validated account tokens |
|
||||
| `document_type` | enum/string | required for list-by-type | белый список типов |
|
||||
| `document_ref` | guid/string | required for document drilldown | точечный lookup |
|
||||
| `status` | enum (`open`, `closed`, `all`) | optional | для open/closed срезов |
|
||||
| `limit` | int (1..200) | optional | default 50 |
|
||||
| `sort` | enum (`date_desc`, `amount_desc`, `name_asc`) | optional | default recipe-specific |
|
||||
| `period_from` | date (`YYYY-MM-DD`) | периодные выборки | начало окна |
|
||||
| `period_to` | date (`YYYY-MM-DD`) | периодные выборки | конец окна |
|
||||
| `as_of_date` | date (`YYYY-MM-DD`) | balance/drilldown/open-items | для account intents defaulted если не задан |
|
||||
| `organization` | string | optional | passthrough-filter |
|
||||
| `counterparty` | string | by-counterparty intents | допускается heuristic extraction |
|
||||
| `contract` | string | by-contract intents | допускается heuristic extraction |
|
||||
| `account` | string (`60`, `62.01`, ...) | account intents | strict token normalization |
|
||||
| `document_type` | string | optional (пока ограниченно используется) | runtime V1 не строит отдельный by-type intent |
|
||||
| `document_ref` | string | optional | point lookup |
|
||||
| `status` | string | optional | reserved |
|
||||
| `limit` | int | optional | extractor default: `20` |
|
||||
| `sort` | enum | optional | `period_desc` / `period_asc` |
|
||||
|
||||
## 4) Query Recipe Catalog V1
|
||||
## 4) Runtime Recipe Catalog (actual)
|
||||
|
||||
| recipe_id | purpose | required_params | optional_params | expected_output_schema | sort/limit rules | drilldown_targets |
|
||||
| recipe_id | intent | purpose | required_filters | optional_filters | query_template | account_scope_mode |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `address.open_contracts.by_asof` | Незакрытые договоры на дату | `as_of_date` | `organization`, `counterparty`, `limit`, `sort` | `contract_ref`, `contract_name`, `counterparty_ref`, `debit`, `credit`, `saldo`, `as_of_date` | default `saldo_desc`, `limit=50` | `address.open_items.by_contract` |
|
||||
| `address.payables.counterparty_totals` | Кому должны мы | `as_of_date` | `organization`, `account`, `limit` | `counterparty_ref`, `counterparty_name`, `payable_amount`, `doc_count`, `as_of_date` | default `payable_amount_desc`, `limit=50` | `address.open_items.by_counterparty` |
|
||||
| `address.receivables.counterparty_totals` | Кто должен нам | `as_of_date` | `organization`, `account`, `limit` | `counterparty_ref`, `counterparty_name`, `receivable_amount`, `doc_count`, `as_of_date` | default `receivable_amount_desc`, `limit=50` | `address.open_items.by_counterparty` |
|
||||
| `address.account.balance_snapshot` | Остаток по счету на дату | `account`, `as_of_date` | `organization`, `limit` | `account`, `debit_balance`, `credit_balance`, `net_balance`, `as_of_date` | default `account_asc`, `limit=20` | `address.balance.drilldown_documents` |
|
||||
| `address.open_items.by_counterparty` | Открытые позиции по контрагенту | `counterparty`, `as_of_date` | `organization`, `contract`, `account`, `limit` | `document_ref`, `document_type`, `document_date`, `contract_ref`, `debit`, `credit`, `open_amount` | default `document_date_desc`, `limit=100` | `address.documents.by_contract` |
|
||||
| `address.open_items.by_contract` | Открытые позиции по договору | `contract`, `as_of_date` | `organization`, `counterparty`, `account`, `limit` | `document_ref`, `document_type`, `document_date`, `counterparty_ref`, `debit`, `credit`, `open_amount` | default `document_date_desc`, `limit=100` | `address.documents.by_contract` |
|
||||
| `address.documents.by_counterparty` | Документы контрагента за период | `counterparty`, `period_from`, `period_to` | `organization`, `document_type`, `limit`, `sort` | `document_ref`, `document_type`, `number`, `date`, `amount`, `posted` | default `date_desc`, `limit=100` | `address.documents.by_contract` |
|
||||
| `address.bank_ops.by_counterparty` | Банковские операции по контрагенту | `counterparty` | `period_from`, `period_to`, `organization`, `limit`, `sort` | `document_ref`, `document_type`, `number`, `date`, `amount`, `posted`, `bank_account_hint` | default `date_desc`, `limit=100` | `address.documents.by_counterparty` |
|
||||
| `address.documents.by_contract` | Документы договора за период | `contract`, `period_from`, `period_to` | `organization`, `document_type`, `limit`, `sort` | `document_ref`, `document_type`, `number`, `date`, `amount`, `posted` | default `date_desc`, `limit=100` | `address.balance.drilldown_documents` |
|
||||
| `address.balance.drilldown_documents` | Расшифровка остатка до документов | `account`, `as_of_date` | `organization`, `counterparty`, `contract`, `limit` | `document_ref`, `document_type`, `number`, `date`, `debit`, `credit`, `delta` | default `date_desc`, `limit=150` | `address.documents.by_counterparty` |
|
||||
| `address_movements_payables_v1` | `list_payables_counterparties` | movement-срез по обязательствам | - | `as_of_date`, `counterparty`, `contract`, `limit` | `movements` | `preferred` |
|
||||
| `address_movements_receivables_v1` | `list_receivables_counterparties` | movement-срез по требованиям | - | `as_of_date`, `counterparty`, `contract`, `limit` | `movements` | `preferred` |
|
||||
| `address_open_contracts_candidates_v1` | `list_open_contracts` | кандидаты незакрытых договоров | - | `as_of_date`, `organization`, `limit` | `movements` | `preferred` |
|
||||
| `address_open_items_by_party_or_contract_v1` | `open_items_by_counterparty_or_contract` | открытые позиции по party/contract | - (`service guard`: нужен `counterparty OR contract`) | `as_of_date`, `counterparty`, `contract`, `limit` | `movements` | `preferred` |
|
||||
| `address_documents_by_counterparty_v1` | `list_documents_by_counterparty` | документы по контрагенту | `counterparty` | `period_from`, `period_to`, `as_of_date`, `organization`, `limit`, `sort` | `bank_docs` | `preferred` |
|
||||
| `address_bank_operations_by_counterparty_v1` | `bank_operations_by_counterparty` | банковские операции по контрагенту | `counterparty` | `period_from`, `period_to`, `as_of_date`, `organization`, `limit`, `sort` | `bank_docs` | `preferred` |
|
||||
| `address_documents_by_contract_v1` | `list_documents_by_contract` | документы по договору | `contract` | `period_from`, `period_to`, `as_of_date`, `organization`, `counterparty`, `limit`, `sort` | `movements` | `preferred` |
|
||||
| `address_bank_operations_by_contract_v1` | `bank_operations_by_contract` | банковские операции по договору | `contract` | `period_from`, `period_to`, `as_of_date`, `organization`, `counterparty`, `limit`, `sort` | `movements` | `preferred` |
|
||||
| `address_documents_forming_balance_v1` | `documents_forming_balance` | drilldown документов, формирующих остаток | `account`, `as_of_date` | `organization`, `counterparty`, `contract`, `period_from`, `period_to`, `limit`, `sort` | `movements` | `strict` |
|
||||
| `address_movements_account_snapshot_v1` | `account_balance_snapshot` | snapshot движений по счету | `account` (`as_of_date` defaulted in extractor) | `as_of_date`, `period_from`, `period_to`, `limit` | `movements` | `strict` |
|
||||
|
||||
## 5) Result Schema (Unified)
|
||||
## 5) Limit and Scope Policy (actual)
|
||||
|
||||
```json
|
||||
{
|
||||
"question_mode": "address_query",
|
||||
"intent": "list_payables_counterparties",
|
||||
"recipe_id": "address.payables.counterparty_totals",
|
||||
"filters": {
|
||||
"as_of_date": "2026-03-29",
|
||||
"organization": "<optional>",
|
||||
"limit": 50
|
||||
},
|
||||
"result_mode": "FACTUAL_SUMMARY",
|
||||
"summary": {
|
||||
"rows": 12,
|
||||
"total_amount": 1543200.50,
|
||||
"currency": "RUB"
|
||||
},
|
||||
"rows": [
|
||||
{
|
||||
"counterparty_name": "ООО Альфа",
|
||||
"payable_amount": 450000.00,
|
||||
"doc_count": 7
|
||||
}
|
||||
],
|
||||
"limitations": []
|
||||
}
|
||||
```
|
||||
- Базовый max limit: `200`.
|
||||
- Расширенный max limit (`1000`) для:
|
||||
- `documents/bank by counterparty|contract`;
|
||||
- `open_items_by_counterparty_or_contract`;
|
||||
- `list_open_contracts`.
|
||||
- Для all-time запросов `documents/bank by *` runtime поднимает limit до max.
|
||||
- Для account intents при явном `account` limit поднимается до `200`.
|
||||
|
||||
## 6) Answer Contract
|
||||
## 6) Stage Status Taxonomy (runtime)
|
||||
|
||||
- `FACTUAL_LIST`: короткий вывод + список строк + totals.
|
||||
- `FACTUAL_SUMMARY`: агрегат + top строки + предложение уточнить фильтр при большом объеме.
|
||||
- `LIMITED_WITH_REASON`: честная причина ограничения (`missing_required_filters`, `live_unavailable`, `no_matches_for_filters`, `unsupported_for_address_query_v1`).
|
||||
- `skipped`
|
||||
- `error`
|
||||
- `no_raw_rows`
|
||||
- `raw_rows_received_but_not_materialized`
|
||||
- `materialized_but_not_anchor_matched`
|
||||
- `materialized_but_filtered_out_by_recipe`
|
||||
- `matched_non_empty`
|
||||
|
||||
## 7) MCP Execution Notes
|
||||
Legacy совместимость:
|
||||
|
||||
- Runtime вызывает MCP proxy (`/api/execute_query`) только с query-template из recipe и параметрами после валидации.
|
||||
- Для V1 все recipe выполняются в `read-only` режиме.
|
||||
- Ограничения на выборку (`limit`) и сортировки фиксируются recipe-контрактом, а не свободным текстом вопроса.
|
||||
## 8) Account Scope Strategy (M2.3c)
|
||||
- `mcp_call_status_legacy=materialized_but_not_matched` для двух split-статусов materialized-*.
|
||||
|
||||
- `account_balance_snapshot` and `documents_forming_balance` use `strict` account scope.
|
||||
- counterparty-oriented recipes use `preferred` account scope with runtime fallback to raw rows when scope gives zero rows.
|
||||
- this keeps account-intent precision while preventing blind row loss on party intents.
|
||||
## 7) Runtime Fallback Behaviors (actual)
|
||||
|
||||
## 9) Runtime Query Template Notes (M2.3c)
|
||||
- При `list_documents_by_contract` и пустом документном отборе, но с anchor rows:
|
||||
- fallback на банковские строки по договору или на anchor rows.
|
||||
- Для `documents/bank by *` при пустом заданном периоде:
|
||||
- auto-broaden периода до доступных данных (`period_window_auto_broadened_to_available_data`).
|
||||
- Для `documents/bank by *` при anchor mismatch:
|
||||
- factual fallback на ближайшие строки (`anchor_not_matched_fallback_rows`) вместо silent empty.
|
||||
|
||||
- `address.documents.by_counterparty` and `address.bank_ops.by_counterparty` use a dedicated `bank_docs` live query template.
|
||||
- account intents (`address.account.balance_snapshot`, `address.balance.drilldown_documents`) continue using movement-oriented query template with strict account scope.
|
||||
- stage diagnostics are tracked with split statuses:
|
||||
- `raw_rows_received_but_not_materialized`
|
||||
- `materialized_but_not_anchor_matched`
|
||||
- `materialized_but_filtered_out_by_recipe`
|
||||
- `matched_non_empty`
|
||||
- for backward compatibility analytics, legacy status is emitted as `mcp_call_status_legacy`.
|
||||
## 8) Result Modes
|
||||
|
||||
- `FACTUAL_LIST`
|
||||
- `FACTUAL_SUMMARY`
|
||||
- `LIMITED_WITH_REASON`
|
||||
|
||||
Фактическая реализация `composeStage` сейчас отдает:
|
||||
|
||||
- `FACTUAL_SUMMARY` в основном для `account_balance_snapshot`;
|
||||
- для остальных factual intents — `FACTUAL_LIST`.
|
||||
|
||||
## 9) Guardrails
|
||||
|
||||
- whitelist recipes only
|
||||
- read-only MCP
|
||||
- no free-form query generation
|
||||
- no silent source substitution
|
||||
|
|
|
|||
|
|
@ -0,0 +1,131 @@
|
|||
# Run Pack Spec V1
|
||||
|
||||
Дата: 2026-04-02
|
||||
Назначение: единый структурный контракт для run-артефактов Address Query.
|
||||
|
||||
## 1. Обязательная структура папки
|
||||
|
||||
Путь:
|
||||
|
||||
- `docs/ADDRESS/runs/<run_id>/`
|
||||
|
||||
Обязательные файлы:
|
||||
|
||||
1. `run_summary.json`
|
||||
2. `full_live_results.json`
|
||||
3. `failures_only.json`
|
||||
4. `README.md`
|
||||
|
||||
Отсутствие любого из файлов = run-pack невалиден для gate.
|
||||
|
||||
## 2. Минимальные поля run_summary.json
|
||||
|
||||
### 2.1 Top-level
|
||||
|
||||
1. `run_id`
|
||||
2. `generated_at` (или `date` для legacy)
|
||||
3. `source_questions_file`
|
||||
4. `strict_policy`
|
||||
5. `totals` (object)
|
||||
|
||||
### 2.2 `totals`
|
||||
|
||||
1. `questions_total`
|
||||
2. `semantic_pass_count`
|
||||
3. `route_pass_count`
|
||||
4. `strict_pass_count`
|
||||
5. `factual_count`
|
||||
6. `partial_coverage_count`
|
||||
7. `http_error_count`
|
||||
|
||||
Рекомендуется (если есть):
|
||||
|
||||
1. `route_pass_rate`
|
||||
2. `strict_pass_rate`
|
||||
3. `execution_error_count`
|
||||
4. `false_factual_count`
|
||||
5. `false_factual_rate`
|
||||
|
||||
## 3. Минимальные поля full_live_results.json
|
||||
|
||||
Top-level:
|
||||
|
||||
1. `run_id`
|
||||
2. `rows` (array)
|
||||
|
||||
Для каждой строки `rows`:
|
||||
|
||||
1. `id` (или `case_id`)
|
||||
2. `question`
|
||||
3. `reply_type` (или `assistant_reply_type`)
|
||||
4. `actual_intent` (или `detected_intent`)
|
||||
5. `selected_recipe`
|
||||
6. `route_pass`
|
||||
7. `strict_pass`
|
||||
8. `mcp_call_status` (или `execution_status`)
|
||||
9. `limited_reason_category` (если partial/limited)
|
||||
10. `debug_payload`
|
||||
|
||||
## 4. Минимальные поля failures_only.json
|
||||
|
||||
Файл должен быть JSON array.
|
||||
|
||||
Рекомендуемые поля элемента:
|
||||
|
||||
1. `id` (или `case_id`)
|
||||
2. `question`
|
||||
3. `failure_type`
|
||||
4. `expected`
|
||||
5. `actual`
|
||||
6. `diagnostic_summary`
|
||||
7. `recommended_fix_owner`
|
||||
|
||||
## 5. README.md run-пака должен содержать
|
||||
|
||||
1. цель прогона
|
||||
2. используемый question set
|
||||
3. команду запуска
|
||||
4. итоговые метрики
|
||||
5. список известных отклонений (если есть)
|
||||
6. решение: `promote | fix_required`
|
||||
|
||||
## 6. Gate Rules
|
||||
|
||||
Domain gate:
|
||||
|
||||
1. `strict_pass(route)=100%`
|
||||
2. `false_factual_rate=0`
|
||||
3. `execution_error_rate=0`
|
||||
|
||||
Global gate:
|
||||
|
||||
1. baseline stress не ниже эталона
|
||||
2. baseline follow-up не ниже эталона
|
||||
3. нет роста `execution_error_count`
|
||||
|
||||
## 7. Автоматические проверки
|
||||
|
||||
Structural validator:
|
||||
|
||||
- `python scripts/validate_address_run_pack.py docs/ADDRESS/runs/<run_id>`
|
||||
|
||||
Baseline comparator:
|
||||
|
||||
- `python scripts/compare_address_run_summary.py --baseline-summary <baseline_run_summary.json> --candidate-summary <candidate_run_summary.json>`
|
||||
|
||||
Nightly regression orchestrator:
|
||||
|
||||
- `python scripts/run_address_nightly_regression.py`
|
||||
|
||||
Windows wrapper:
|
||||
|
||||
- `powershell -ExecutionPolicy Bypass -File .\scripts\run_address_nightly_regression.ps1`
|
||||
|
||||
## 8. Сопровождающие обновления docs
|
||||
|
||||
После успешного run-пака обновляются:
|
||||
|
||||
1. `runtime_readiness_matrix_v1.md`
|
||||
2. `address_scenario_matrix.md`
|
||||
3. `global_execution_checklist_v1.md`
|
||||
4. `stage_closeout_*.md` (для крупных этапов)
|
||||
|
|
@ -1,232 +1,112 @@
|
|||
# Runtime Integration Plan (question_mode=address_query)
|
||||
|
||||
Дата: 2026-03-29
|
||||
Дата среза: 2026-04-02
|
||||
|
||||
## 1) Цель
|
||||
|
||||
Поддерживать отдельный runtime-контур для быстрых address-запросов через MCP,
|
||||
без деградации deep-analysis path.
|
||||
|
||||
## 1) Цель интеграции
|
||||
|
||||
Добавить отдельный runtime-контур для быстрых адресных запросов к 1С через MCP, не ломая существующий Stage 4 deep-analysis path.
|
||||
|
||||
## 2) As-Is (подтверждено кодом)
|
||||
|
||||
Текущий assistant pipeline:
|
||||
|
||||
1. normalizer -> route summary
|
||||
2. execution plan по deep-routes
|
||||
3. `assistantDataLayer.executeRouteRuntime(...)`
|
||||
4. admissibility / eligibility guards
|
||||
5. answer composer
|
||||
|
||||
Ключевые точки в текущем коде:
|
||||
|
||||
- `llm_normalizer/backend/src/services/assistantService.ts`
|
||||
- `llm_normalizer/backend/src/services/routeHintAdapter.ts`
|
||||
- `llm_normalizer/backend/src/services/assistantDataLayer.ts`
|
||||
- `llm_normalizer/backend/src/services/assistantRuntimeGuards.ts`
|
||||
- `llm_normalizer/backend/src/services/answerComposer.ts`
|
||||
|
||||
## 2.1) Architecture Reference (mandatory)
|
||||
|
||||
Перед любыми изменениями address lane сверяться с:
|
||||
|
||||
- `address_architecture_contract_v1.md`
|
||||
|
||||
Ключевая рамка:
|
||||
|
||||
- `Decompose -> Resolve -> Execute -> Compose`
|
||||
- runtime не хранит company-specific словари
|
||||
- company entities подтверждаются только через live resolver/MCP
|
||||
|
||||
## 3) To-Be: Separate Address Lane
|
||||
|
||||
Новый high-level flow:
|
||||
|
||||
1. Входящий вопрос.
|
||||
2. L0 hybrid router: LLM decompose + deterministic fallback.
|
||||
3. Mode-classifier: `address_query` | `deep_analysis` | `unsupported`.
|
||||
4. Если `address_query`:
|
||||
- resolve `address_intent`;
|
||||
- extract+validate filters;
|
||||
- select recipe;
|
||||
- execute MCP (live-first);
|
||||
- normalize result schema;
|
||||
- return factual answer.
|
||||
5. Если не `address_query`: текущий deep path без изменений.
|
||||
|
||||
## 3.1) L0 Hybrid Router (stabilization layer)
|
||||
|
||||
Назначение: убрать хрупкость на шумном пользовательском вводе (опечатки, сленг, лишние слова), не раздувая словари.
|
||||
|
||||
Порядок работы:
|
||||
|
||||
1. Сначала запускаем LLM decompose в строгий JSON-контракт.
|
||||
2. Если LLM дал пустой/невалидный/неиспользуемый фрагмент, включается короткий deterministic fallback:
|
||||
- триггеры по корням/подстрокам (не giant словарь словоформ);
|
||||
- парсинг дат/периодов/счетов;
|
||||
- шумоочистка (служебные слова, междометия, мусорные хвосты).
|
||||
3. Если и fallback не дал валидный результат, возвращаем `LIMITED_WITH_REASON`, без выдумывания фактов.
|
||||
|
||||
Ограничения:
|
||||
|
||||
- без company-specific словарей в runtime;
|
||||
- без генерации SQL/1C-query в свободной форме;
|
||||
- только интерпретация вопроса + передача в whitelist recipes.
|
||||
|
||||
## 4) Встраивание по слоям
|
||||
|
||||
### 4.1 Normalizer / Routing Layer
|
||||
|
||||
Изменения:
|
||||
|
||||
- добавить `question_mode` и `address_intent` в normalizer contract;
|
||||
- добавить L0 router contract (decompose output + fallback reason);
|
||||
- в `routeHintAdapter` добавить address-query rule set до deep route discipline.
|
||||
|
||||
Рекомендуемые файлы:
|
||||
|
||||
- `llm_normalizer/backend/src/types/normalizer.ts`
|
||||
- `llm_normalizer/backend/src/services/routeHintAdapter.ts`
|
||||
|
||||
### 4.2 Assistant Service Orchestration
|
||||
|
||||
Изменения:
|
||||
|
||||
- в `AssistantService.processMessage(...)` добавить раннюю развилку по `question_mode`;
|
||||
- для `address_query` запускать отдельный pipeline (без claim-bound deep-chain).
|
||||
|
||||
Рекомендуемый новый сервис:
|
||||
|
||||
- `llm_normalizer/backend/src/services/addressQueryService.ts`
|
||||
|
||||
### 4.3 Intent + Filter Extraction
|
||||
|
||||
Новые компоненты:
|
||||
|
||||
- `addressIntentResolver.ts`
|
||||
- `addressFilterExtractor.ts`
|
||||
- `addressFilterValidator.ts`
|
||||
|
||||
Выход контракта:
|
||||
|
||||
- `detected_mode`
|
||||
- `detected_intent`
|
||||
- `required_filters`
|
||||
- `resolved_filters`
|
||||
- `missing_filters`
|
||||
|
||||
### 4.4 Recipe Selection + MCP Execution
|
||||
|
||||
Новые компоненты:
|
||||
|
||||
- `addressRecipeCatalog.ts` (статический whitelist recipes)
|
||||
- `addressRecipeSelector.ts`
|
||||
- `addressMcpExecutor.ts`
|
||||
|
||||
Правила:
|
||||
|
||||
- только whitelist `recipe_id`;
|
||||
- live-first; snapshot только explicit fallback;
|
||||
- hard limit на строки и fixed sorting profile.
|
||||
|
||||
### 4.5 Result Materialization + Answer Composer
|
||||
|
||||
Новые компоненты:
|
||||
|
||||
- `addressResultMaterializer.ts`
|
||||
- `addressAnswerComposer.ts`
|
||||
|
||||
Режимы ответа:
|
||||
|
||||
- `FACTUAL_LIST`
|
||||
- `FACTUAL_SUMMARY`
|
||||
- `LIMITED_WITH_REASON`
|
||||
|
||||
### 4.6 Debug/Trace Contract
|
||||
|
||||
Минимальный debug блок для address lane:
|
||||
|
||||
- `detected_mode`
|
||||
- `detected_intent`
|
||||
- `extracted_filters`
|
||||
- `selected_recipe`
|
||||
- `mcp_call_status`
|
||||
- `rows_fetched`
|
||||
- `rows_matched`
|
||||
- `response_type`
|
||||
- `llm_decomposition_attempted`
|
||||
- `llm_decomposition_applied`
|
||||
- `llm_decomposition_reason`
|
||||
- `fallback_rule_hit`
|
||||
- `sanitized_user_message`
|
||||
|
||||
## 5) Fallback Rules
|
||||
|
||||
- Если mode=`address_query`, но `missing_required_filters` -> `LIMITED_WITH_REASON` (без silent fallback в deep).
|
||||
- Если mode=`address_query`, но `intent` не поддержан -> `LIMITED_WITH_REASON` или controlled handoff в deep-path с явной пометкой.
|
||||
- Если live недоступен -> `LIMITED_WITH_REASON: live_unavailable`.
|
||||
|
||||
## 5.1) Compound factual scope (M2.1 real status)
|
||||
|
||||
- `COMPOUND_FACTUAL_QUERY` is currently **detection-only**.
|
||||
- Runtime does **not** execute multi-intent decomposition yet.
|
||||
- Current behavior for compound prompts:
|
||||
- one selected intent;
|
||||
- one selected recipe;
|
||||
- one factual/limited output block.
|
||||
- Multi-step decomposition (`subquery planning -> per-subquery execution -> stitched composer`) is planned for V1.1.
|
||||
|
||||
## 6) Safety Guardrails
|
||||
|
||||
- Никакого free-form query generation от LLM.
|
||||
- Query только через recipe whitelist.
|
||||
- Все параметры проходят типовую и value-валидацию.
|
||||
- Account anchors — только validated account tokens (исключая date/amount pollution).
|
||||
- Read-only MCP profile для address lane.
|
||||
|
||||
## 7) Minimal Implementation Queue
|
||||
|
||||
1. `M0`: контракты (`question_mode`, `address_intent`, filter schema, recipe schema).
|
||||
2. `M1`: classifier + resolver + validator (без MCP execution).
|
||||
3. `M1.5`: L0 hybrid router (LLM-first + deterministic fallback) в shadow mode.
|
||||
4. `M2`: MCP executor + 5 P0 recipe.
|
||||
5. `M3`: factual composer + debug payload + basic tests.
|
||||
6. `M4`: live rerun pack в `docs/ADDRESS/runs/...`.
|
||||
|
||||
## 7.2) L0 rollout policy
|
||||
|
||||
1. `Shadow`: LLM decompose не влияет на ответ, только trace/audit.
|
||||
2. `Soft-enable`: LLM decompose влияет на routing только для P0 intents.
|
||||
3. `Full-enable`: LLM decompose + fallback включены для всего `address_query`.
|
||||
|
||||
Правило безопасности:
|
||||
|
||||
- любой сбой LLM должен откатываться в deterministic fallback, а не в random behavior.
|
||||
|
||||
## 7.1) Sprint B priority order (adapted to current reality)
|
||||
|
||||
1. `documents_by_counterparty`
|
||||
2. `bank_operations_by_counterparty`
|
||||
3. `documents_forming_balance`
|
||||
4. `documents_by_contract`
|
||||
5. `bank_operations_by_contract`
|
||||
|
||||
Rationale:
|
||||
|
||||
- start from anchors with higher resolver stability (counterparty first);
|
||||
- unlock early positive evidence before contract-heavy variants;
|
||||
- keep contract scenarios behind anchor-resolution hardening.
|
||||
|
||||
## 8) Out of Scope for V1
|
||||
|
||||
- Новый proof engine.
|
||||
- Расширение доменов beyond P0 address intents.
|
||||
- Полный redesign deep-stage routing.
|
||||
- Автоматический свободный доступ к произвольным сущностям 1С.
|
||||
|
||||
## 9) Expected Acceptance (V1)
|
||||
|
||||
- Deep-analysis path не деградировал.
|
||||
- Address intents из P0 стабильно маршрутизируются в MCP/live-first lane.
|
||||
- Factual-ответы по P0 сценариям возвращаются в предсказуемом формате.
|
||||
- `false_factual_rate = 0`.
|
||||
- Нет silent-degradation: при провале LLM есть explainable fallback reason.
|
||||
- На шумном вводе нет ложного сдвига anchor (`counterparty`, `account`, `period`).
|
||||
## 2) Фактический статус интеграции
|
||||
|
||||
Address lane уже встроен в `AssistantService` и включен feature-флагами по умолчанию:
|
||||
|
||||
- `FEATURE_ASSISTANT_ADDRESS_QUERY_V1=true`
|
||||
- `FEATURE_ASSISTANT_ADDRESS_QUERY_LLM_PREDECOMPOSE_V1=true`
|
||||
- `FEATURE_ASSISTANT_ADDRESS_QUERY_LIVE_V1=true`
|
||||
|
||||
Ключевая оркестрация:
|
||||
|
||||
- `assistantService.ts`:
|
||||
- L0 pre-decompose (LLM + deterministic fallback)
|
||||
- tool-gate решение (`run_address_lane` / `skip_address_lane`)
|
||||
- follow-up carryover context (сигнал берется из raw user message и pre-decompose effective message)
|
||||
- вызов `addressQueryService.tryHandle(...)`
|
||||
|
||||
## 3) Canonical Runtime Flow (actual)
|
||||
|
||||
1. User message.
|
||||
2. L0 layer:
|
||||
- message sanitization/cleanup;
|
||||
- optional LLM pre-decompose (`normalizer_v2_0_2`);
|
||||
- deterministic fallback rules;
|
||||
- tool-gate decision.
|
||||
3. `addressQueryService`:
|
||||
- `decomposeStage` (mode/shape/intent/filters + follow-up merge)
|
||||
- `resolveStage` (primary anchor + refinement from rows)
|
||||
- `execute` (recipe select -> MCP query -> materialization/scope/filter)
|
||||
- `compose` (FACTUAL_* или LIMITED_WITH_REASON)
|
||||
4. Unified debug payload в `AssistantService`.
|
||||
5. Если lane не обработал запрос - возврат в основной deep path.
|
||||
|
||||
## 4) Реализованные компоненты
|
||||
|
||||
- `src/services/address_runtime/decomposeStage.ts`
|
||||
- `src/services/address_runtime/resolveStage.ts`
|
||||
- `src/services/address_runtime/composeStage.ts`
|
||||
- `src/services/addressIntentResolver.ts`
|
||||
- `src/services/addressFilterExtractor.ts`
|
||||
- `src/services/addressRecipeCatalog.ts`
|
||||
- `src/services/addressMcpClient.ts`
|
||||
- `src/services/addressQueryService.ts`
|
||||
|
||||
## 5) Intent Coverage (runtime)
|
||||
|
||||
Реализовано:
|
||||
|
||||
- `list_open_contracts`
|
||||
- `list_payables_counterparties`
|
||||
- `list_receivables_counterparties`
|
||||
- `account_balance_snapshot`
|
||||
- `open_items_by_counterparty_or_contract`
|
||||
- `list_documents_by_counterparty`
|
||||
- `bank_operations_by_counterparty`
|
||||
- `list_documents_by_contract`
|
||||
- `bank_operations_by_contract`
|
||||
- `documents_forming_balance`
|
||||
|
||||
Не реализовано (V1):
|
||||
|
||||
- `account_turnover_snapshot`
|
||||
- `list_documents_by_type`
|
||||
|
||||
## 6) Execution and Debug Guarantees
|
||||
|
||||
- whitelist recipes only
|
||||
- read-only MCP
|
||||
- no free-form query generation
|
||||
- explicit stage statuses:
|
||||
- `no_raw_rows`
|
||||
- `raw_rows_received_but_not_materialized`
|
||||
- `materialized_but_not_anchor_matched`
|
||||
- `materialized_but_filtered_out_by_recipe`
|
||||
- `matched_non_empty`
|
||||
- legacy compatibility field:
|
||||
- `mcp_call_status_legacy`
|
||||
|
||||
## 7) Runtime Fallbacks (actual)
|
||||
|
||||
- Missing required filters -> `LIMITED_WITH_REASON` (`missing_anchor`)
|
||||
- Recipe missing -> `LIMITED_WITH_REASON` (`recipe_visibility_gap`)
|
||||
- MCP error / lane disabled -> `LIMITED_WITH_REASON` (`execution_error`)
|
||||
- Period auto-broaden for by-counterparty/by-contract docs+bank intents
|
||||
- Anchor mismatch fallback для document/bank intents
|
||||
- Contract-docs recovery path через bank-like rows
|
||||
|
||||
## 8) Compound Scope
|
||||
|
||||
- `COMPOUND_FACTUAL_QUERY` сейчас detection-only.
|
||||
- Multi-intent decomposition execution не выполняется в runtime V1.
|
||||
|
||||
## 9) Known Gaps for Step-4
|
||||
|
||||
- введены шаблоны (`domain_card_template_v1.md`, `domain_acceptance_question_set_template_v1.md`), но domain-specific cards/sets для новых доменов еще не заведены;
|
||||
- P1 intents (`turnover`, `documents_by_type`) в runtime отсутствуют;
|
||||
- CI pipeline интеграция nightly еще не подключена (локальный nightly через Task Scheduler уже работает).
|
||||
|
||||
## 10) Acceptance Baseline (must keep)
|
||||
|
||||
- stress pack: `102/102` (run `2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27`)
|
||||
- follow-up pack: `25/25` (run `2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5`)
|
||||
- `strict_policy=route`
|
||||
- `false_factual_rate=0`
|
||||
|
|
|
|||
|
|
@ -1,35 +1,41 @@
|
|||
# Runtime Readiness Matrix V1 (M2.3c)
|
||||
# Runtime Readiness Matrix V1 (Code Sync)
|
||||
|
||||
Дата: 2026-03-29
|
||||
Дата: 2026-04-02
|
||||
|
||||
Формат: `scenario -> structural_readiness -> runtime_readiness -> blocker`
|
||||
|
||||
## Статусы
|
||||
|
||||
- `STRUCTURALLY_VISIBLE` - сущность подтверждена в snapshot/inventory.
|
||||
- `LIVE_QUERYABLE` - в текущем live path можно давать factual ответ стабильно.
|
||||
- `LIVE_QUERYABLE_WITH_LIMITS` - live path работает, но результат зависит от anchor/period precision.
|
||||
- `REQUIRES_SPECIALIZED_RECIPE` - базовый recipe-контур не покрывает сценарий.
|
||||
- `DEEP_ONLY` - сценарий не относится к address V1.
|
||||
- `STRUCTURALLY_VISIBLE` - сущность подтверждена в inventory/snapshot.
|
||||
- `LIVE_QUERYABLE` - stable factual path без ограничений (пока практически не используется).
|
||||
- `LIVE_QUERYABLE_WITH_LIMITS` - live path работает, но результат зависит от anchor/period precision и fallback-веток.
|
||||
- `REQUIRES_SPECIALIZED_RECIPE` - нужен отдельный recipe/исполнительный путь.
|
||||
- `DEEP_ONLY` - сценарий вне address V1.
|
||||
- `UNKNOWN` - runtime статус не зафиксирован.
|
||||
|
||||
## Матрица (P0/P1)
|
||||
## Матрица (по текущему коду + актуальным run-пакам)
|
||||
|
||||
| scenario_id | scenario | structural_readiness | runtime_readiness | current_blocker | next_action |
|
||||
|---|---|---|---|---|---|
|
||||
| AQ-P0-01 | list_open_contracts | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | weak contract anchors in current live rows | add contract-aware document recipe + resolver confidence gate |
|
||||
| AQ-P0-02 | list_payables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | broad prompts still produce sparse matches | keep curated positive suite and tighten period hints |
|
||||
| AQ-P0-03 | list_receivables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | broad prompts still produce sparse matches | keep curated positive suite and tighten period hints |
|
||||
| AQ-P0-04 | account_balance_snapshot | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | `raw_rows_received > 0`, but account scope drops rows before materialization | account token/shape audit and account field mapping fix |
|
||||
| AQ-P0-05 | open_items_by_counterparty_or_contract (counterparty) | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | requires explicit counterparty anchor for stable non-empty | anchor refinement and resolver ambiguity handling |
|
||||
| AQ-P0-06 | open_items_by_counterparty_or_contract (contract) | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | movement rows often miss contract linkage | two-step path: contract resolver -> focused recipe |
|
||||
| AQ-P0-07 | documents_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | positive cases confirmed, but narrow/broad anchor variants still fragile | continue resolver/filter tuning and parity checks |
|
||||
| AQ-P0-07B | bank_operations_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | positive cases confirmed, but narrow/broad anchor variants still fragile | continue resolver/filter tuning and bank-doc visibility checks |
|
||||
| AQ-P0-08 | documents_by_contract | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | by-contract live recipe not implemented in runtime V1 | implement contract resolver + focused recipe |
|
||||
| AQ-P0-09 | documents_forming_balance | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | implemented, but account-family still blocked before materialization | account scope/materialization diagnostics and account token normalization |
|
||||
| AQ-P1-10 | account_turnover_snapshot | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | not in current intent set | extend intents in V1.1 |
|
||||
| AQ-P0-01 | list_open_contracts | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | contract candidates зависят от качества movement materialization | усилить contract resolver confidence и стабилизировать non-empty профили |
|
||||
| AQ-P0-02 | list_payables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | broad prompts могут давать sparse/empty | держать curated positive + периодные подсказки |
|
||||
| AQ-P0-03 | list_receivables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | broad prompts могут давать sparse/empty | держать curated positive + периодные подсказки |
|
||||
| AQ-P0-04 | account_balance_snapshot | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | часть кейсов упирается в account-scope/materialization | продолжить account token/shape audit |
|
||||
| AQ-P0-05 | open_items_by_counterparty_or_contract | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | обязателен anchor (`counterparty OR contract`) | донастройка anchor extraction и ambiguity handling |
|
||||
| AQ-P0-06 | list_documents_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | возможны anchor mismatches и period misses | поддерживать auto-broaden + anchor fallback аудит |
|
||||
| AQ-P0-07 | bank_operations_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | возможны anchor mismatches и period misses | поддерживать auto-broaden + anchor fallback аудит |
|
||||
| AQ-P0-08 | list_documents_by_contract | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | document-filter может обнулять rows по узкому окну | contract docs fallback + resolver hardening |
|
||||
| AQ-P0-08B | bank_operations_by_contract | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | устойчивость зависит от contract anchor качества | усилить contract normalization и follow-up carryover |
|
||||
| AQ-P0-09 | documents_forming_balance | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | account-family чувствителен к row-shape/materialization | продолжить materialization diagnostics |
|
||||
| AQ-P1-10 | account_turnover_snapshot | STRUCTURALLY_VISIBLE | UNKNOWN | intent/recipe отсутствуют в runtime | планировать как отдельный домен Step-4 |
|
||||
| AQ-P1-11 | list_documents_by_type | STRUCTURALLY_VISIBLE | UNKNOWN | intent/recipe отсутствуют в runtime | планировать как отдельный домен Step-4 |
|
||||
|
||||
## Sync Note (M2.3c)
|
||||
## Sync Notes (2026-04-02)
|
||||
|
||||
- `documents_by_counterparty` and `bank_operations_by_counterparty` now have curated `matched_non_empty` cases.
|
||||
- `account_balance_snapshot` and `documents_forming_balance` remain limited because rows are dropped before materialization.
|
||||
- `COMPOUND_FACTUAL_QUERY` is detection-only and does not execute multi-intent decomposition yet.
|
||||
- В runtime реализованы by-contract intents:
|
||||
- `list_documents_by_contract`
|
||||
- `bank_operations_by_contract`
|
||||
- `COMPOUND_FACTUAL_QUERY` остается detection-only (без multi-intent execution).
|
||||
- Финальные gate-артефакты стабильности:
|
||||
- stress `102/102`: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
|
||||
- follow-up `25/25`: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
|
||||
|
|
|
|||
|
|
@ -0,0 +1,103 @@
|
|||
# Address Query V1 — Stage Closeout (2026-04-02)
|
||||
|
||||
Дата среза: 2026-04-02
|
||||
Контур: `address_query` (live-first через MCP)
|
||||
LLM: local (`qwen2.5-14b-instruct-1m`, LM Studio)
|
||||
|
||||
## 1. Цель закрываемого этапа
|
||||
|
||||
Закрыть стабильность текущего V1-контура до расширения доменов:
|
||||
|
||||
- маршрутизация и интенты на шумном/сленговом вводе;
|
||||
- follow-up цепочки в пределах одной сессии (`а теперь...`, `по нему...`, `на ту же дату...`);
|
||||
- отсутствие company-specific хардкода в runtime;
|
||||
- release gate по `strict_policy=route`.
|
||||
|
||||
## 2. Что закрыто фактически
|
||||
|
||||
1. Full slang stress regression
|
||||
- Набор: `docs/ADDRESS/question_sets/address_slang_stress_full_2026-04-02.json`
|
||||
- Финальный прогон: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
|
||||
- Итог: `102/102` по `semantic_pass`, `route_pass`, `strict_pass(route)`.
|
||||
|
||||
2. Follow-up context chains
|
||||
- Набор: `docs/ADDRESS/question_sets/address_followup_context_chains_2026-04-02.json`
|
||||
- Финальный прогон: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
|
||||
- Итог: `25/25` по `semantic_pass`, `route_pass`, `strict_pass(route)`.
|
||||
|
||||
3. Resolver/anchor стабилизация
|
||||
- Убран synthetic якорь договора в ключевых цепочках.
|
||||
- Рабочий якорь переведен на live-подтвержденный: `19/15`.
|
||||
|
||||
4. Gate-профиль зафиксирован
|
||||
- `strict_policy=route` применяется как обязательный критерий этапа.
|
||||
- `partial_coverage` учитывается как non-blocking только при корректной маршрутизации и явной причине (`empty_match`).
|
||||
|
||||
## 3. Подробные метрики (финальные артефакты)
|
||||
|
||||
### 3.1 Stress pack 102
|
||||
|
||||
Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
|
||||
|
||||
- `questions_total=102`
|
||||
- `ok_200=102`
|
||||
- `semantic_pass=102/102`
|
||||
- `route_pass=102/102`
|
||||
- `strict_pass(route)=102/102`
|
||||
- `factual=97`
|
||||
- `partial_coverage=5`
|
||||
- `llm_decomposition_applied=77`
|
||||
- `avg_elapsed_ms=5922.3`
|
||||
|
||||
### 3.2 Follow-up pack 25
|
||||
|
||||
Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
|
||||
|
||||
- `questions_total=25`
|
||||
- `ok_200=25`
|
||||
- `semantic_pass=25/25`
|
||||
- `route_pass=25/25`
|
||||
- `strict_pass(route)=25/25`
|
||||
- `factual=23`
|
||||
- `partial_coverage=2`
|
||||
- `llm_decomposition_applied=13`
|
||||
- `avg_elapsed_ms=4896.8`
|
||||
|
||||
## 4. Какие изменения закреплены в базе документов/наборов
|
||||
|
||||
1. Чеклист этапа обновлен
|
||||
- `docs/ADDRESS/address_query/global_execution_checklist_v1.md`
|
||||
|
||||
2. Вопросники синхронизированы с live-якорем договора
|
||||
- `docs/ADDRESS/question_sets/address_contract_19_15_postfix_2026-04-02.json`
|
||||
- `docs/ADDRESS/question_sets/address_followup_context_chains_2026-04-02.json`
|
||||
- связанные stress/open-items packs в `docs/ADDRESS/question_sets/`
|
||||
|
||||
3. Диагностические/исторические прогоны сохранены, но не являются gate-артефактами
|
||||
- например, `docs/ADDRESS/runs/2026-04-02_Address_Live_Contract_24_15_PostFix_Check_13-34-22/` (без `run_summary.json`).
|
||||
|
||||
## 5. Что важно понимать по качеству этапа
|
||||
|
||||
1. Система вопрос понимает и корректно роутит в `address_query` для текущего acceptance-пака.
|
||||
2. Если в live-окне нет строк под фильтром, система возвращает объяснимый `partial_coverage` с `empty_match` (а не выдумывает factual).
|
||||
3. Контур остается data-agnostic: runtime не должен хранить уникальные company-сущности как словарь.
|
||||
|
||||
## 6. Остаточные риски
|
||||
|
||||
1. Domain coverage пока ограничен текущим набором intents; при расширении возможны регрессии в noisy/follow-up.
|
||||
2. Для некоторых исторических чат-экспортов встречается проблема кодировки в текстовом слое вывода (mojibake); это отдельная задача presentation/debug слоя.
|
||||
3. Диагностические run-паки в `docs/ADDRESS/runs/` неоднородны по структуре (не во всех есть `run_summary.json`), поэтому release-gate нужно держать на фиксированном whitelist артефактов.
|
||||
|
||||
## 7. Что дальше (Step-4)
|
||||
|
||||
1. Domain expansion по `runtime_readiness_matrix_v1.md` без снижения текущего gate.
|
||||
2. На каждый новый intent:
|
||||
- recipe;
|
||||
- unit/integration tests;
|
||||
- live-run с артефактами в `docs/ADDRESS/runs/...`.
|
||||
3. После каждой итерации обязательный повтор двух gate-паков:
|
||||
- `address_slang_stress_full_2026-04-02.json`
|
||||
- `address_followup_context_chains_2026-04-02.json`
|
||||
4. Рельсовый prerequisite закрыт отдельным документом:
|
||||
- `step0_closeout_2026-04-02.md`
|
||||
5. Дальше: подключение nightly в CI (локальный nightly через Task Scheduler уже включен).
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
# Step-0 Closeout (2026-04-02)
|
||||
|
||||
Дата среза: 2026-04-02
|
||||
Контур: `address_query`
|
||||
Статус: `CLOSED`
|
||||
|
||||
## 1. Что подтверждено
|
||||
|
||||
1. Рельсовый toolkit внедрен:
|
||||
- `scripts/validate_address_run_pack.py`
|
||||
- `scripts/compare_address_run_summary.py`
|
||||
- `scripts/run_address_nightly_regression.py`
|
||||
- `scripts/run_address_nightly_regression.ps1`
|
||||
- `scripts/register_address_nightly_task.ps1`
|
||||
|
||||
2. Nightly automation подключена и закреплена:
|
||||
- Task Scheduler task: `NDC_ADDRESS_Nightly_Regression`
|
||||
- Owner: `DCTOUCH`
|
||||
- Schedule: `daily 03:30`
|
||||
- Entry script: `scripts/run_address_nightly_regression.ps1`
|
||||
|
||||
3. Референсный домен прошел полный цикл:
|
||||
- Domain pack: `docs/ADDRESS/question_sets/domain_contracts_open_items_acceptance_2026-04-02.json`
|
||||
- Run: `docs/ADDRESS/runs/2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22/`
|
||||
- Result: `strict_pass(route)=23/23`, `false_factual_rate=0`, `execution_error_count=0`
|
||||
|
||||
4. Глобальный gate после фиксов повторно зеленый:
|
||||
- Nightly bundle: `docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00/`
|
||||
- Stress: `102/102`
|
||||
- Follow-up: `25/25`
|
||||
- Validator: PASS
|
||||
- Comparator vs baseline: PASS
|
||||
|
||||
## 2. Дополнительный runtime hardening, который вошел в закрытие
|
||||
|
||||
1. Follow-up carryover теперь учитывает исходное сообщение пользователя и pre-decompose effective message,
|
||||
чтобы не терять referential follow-up контекст (`этому же договору`).
|
||||
2. Intent/anchor hardening для account-drilldown:
|
||||
- compact account token (`62`) распознается корректно;
|
||||
- `документами` и близкие формы исключены из контрагентных эвристик.
|
||||
|
||||
## 3. Definition of Done (Step-0) — статус
|
||||
|
||||
1. Domain card template и acceptance template: `DONE`
|
||||
2. Structural validator run-паков: `DONE`
|
||||
3. Baseline comparator до/после: `DONE`
|
||||
4. Nightly regression на baseline-паках: `DONE`
|
||||
5. Минимум 1 референсный домен end-to-end: `DONE`
|
||||
6. Чеклист обновлен с closeout: `DONE` (`global_execution_checklist_v1.md`)
|
||||
|
||||
Итог: Step-0 pre-prod rails завершен, контур готов к Step-4 domain expansion в repeatable/factory режиме.
|
||||
|
|
@ -0,0 +1,174 @@
|
|||
# Step-0 Pre-Prod Rail Plan V1
|
||||
|
||||
Дата: 2026-04-02
|
||||
Контур: `question_mode=address_query`
|
||||
Горизонт: 2 недели
|
||||
|
||||
## Статус выполнения (2026-04-02)
|
||||
|
||||
- Step-0 закрыт.
|
||||
- Closeout: `step0_closeout_2026-04-02.md`
|
||||
- Подтверждающий nightly bundle: `docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00/`
|
||||
|
||||
## 1. Зачем Step-0
|
||||
|
||||
Цель Step-0: перевести расширение доменов из режима R&D в режим фабрики доменов (repeatable delivery).
|
||||
|
||||
Важно:
|
||||
|
||||
- нужен не «идеальный домен», а «идеальный процесс внедрения домена»;
|
||||
- достаточно одного референсного домена с полностью отлаженным циклом поставки;
|
||||
- остальные домены добавляются по тем же рельсам, без ручных исключений.
|
||||
|
||||
## 2. Входные условия (на сегодня)
|
||||
|
||||
Базовый quality-gate уже есть и подтвержден:
|
||||
|
||||
- stress: `102/102` (`strict_policy=route`)
|
||||
- follow-up: `25/25` (`strict_policy=route`)
|
||||
- `false_factual_rate = 0`
|
||||
|
||||
Контрольные артефакты:
|
||||
|
||||
- `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
|
||||
- `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
|
||||
|
||||
## 3. Что считается «рельсами»
|
||||
|
||||
Обязательные элементы рельсов:
|
||||
|
||||
1. Единый domain-contract (intent/filters/recipe/statuses/fallback).
|
||||
2. Единый формат run-артефактов (неопционально).
|
||||
3. Двухуровневый gate:
|
||||
- domain-gate (локальный для нового домена)
|
||||
- global-gate (`102` + `25`) после каждой доменной итерации.
|
||||
4. Единый rollout-процесс: `shadow -> soft-enable -> prod`.
|
||||
5. Автоматический nightly/CI прогон с fail-fast.
|
||||
|
||||
## 4. Scope Step-0 (что делаем за 2 недели)
|
||||
|
||||
### 4.1 Process/Contract Track
|
||||
|
||||
- Зафиксировать шаблон domain card:
|
||||
- intent-set;
|
||||
- required filters;
|
||||
- recipe mapping;
|
||||
- accepted limited reasons;
|
||||
- known risk patterns;
|
||||
- rollout mode.
|
||||
- Зафиксировать template acceptance question set:
|
||||
- `canonical`
|
||||
- `noisy/slang`
|
||||
- `follow-up chains`
|
||||
- Зафиксировать rule: один PR = один домен/поддомен.
|
||||
|
||||
### 4.2 Tooling/Gate Track
|
||||
|
||||
- Ввести validator структуры run-пака:
|
||||
- обязательны `run_summary.json`, `full_live_results.json`, `failures_only.json`, `README.md`.
|
||||
- Ввести gate-скрипт сравнения baseline до/после:
|
||||
- `strict_pass_rate`
|
||||
- `route_pass_rate`
|
||||
- `execution_error_count`
|
||||
- `false_factual_rate`
|
||||
- Ввести nightly regression:
|
||||
- `address_slang_stress_full_2026-04-02.json`
|
||||
- `address_followup_context_chains_2026-04-02.json`
|
||||
|
||||
### 4.3 Reference Domain Track
|
||||
|
||||
- Выбрать 1 референсный домен (рекомендуется `open_contracts + open_items` hardening).
|
||||
- Пройти полный цикл:
|
||||
- design -> code -> tests -> live acceptance -> global regression -> docs closeout.
|
||||
- Сохранить полный набор артефактов как эталон для следующих доменов.
|
||||
|
||||
## 5. План на 2 недели
|
||||
|
||||
### Week 1
|
||||
|
||||
1. Day 1-2: зафиксировать контракты и шаблоны (domain card + question set + run-pack spec).
|
||||
2. Day 3-4: добавить CI validator run-паков и baseline comparator.
|
||||
3. Day 5: dry-run на текущих исторических run-папках, устранить структурные дыры.
|
||||
|
||||
Результат недели 1:
|
||||
|
||||
- есть формальный domain factory contract;
|
||||
- есть автоматический structural gate артефактов;
|
||||
- есть baseline comparator.
|
||||
|
||||
### Week 2
|
||||
|
||||
1. Day 1-2: провести референсный домен через полный pipeline.
|
||||
2. Day 3: включить nightly regression + отчет.
|
||||
3. Day 4: зафиксировать PR-шаблон и release checklist для доменов.
|
||||
4. Day 5: Step-0 closeout review.
|
||||
|
||||
Результат недели 2:
|
||||
|
||||
- минимум 1 домен поставлен по рельсам end-to-end;
|
||||
- nightly и fail-criteria работают автоматически;
|
||||
- Step-4 можно запускать как последовательность однотипных доменных итераций.
|
||||
|
||||
## 6. Жесткие gate-критерии Step-0
|
||||
|
||||
### 6.1 Domain Gate
|
||||
|
||||
- `strict_pass_rate = 100%` на domain-паке
|
||||
- `false_factual_rate = 0`
|
||||
- `execution_error_rate = 0`
|
||||
|
||||
### 6.2 Global Gate
|
||||
|
||||
- stress pack не ниже baseline (`102/102`)
|
||||
- follow-up pack не ниже baseline (`25/25`)
|
||||
- нет роста `execution_error_count`
|
||||
|
||||
### 6.3 Artifact Gate
|
||||
|
||||
Для каждого run-пака обязательны:
|
||||
|
||||
- `run_summary.json`
|
||||
- `full_live_results.json`
|
||||
- `failures_only.json`
|
||||
- `README.md`
|
||||
|
||||
Если чего-то нет - домен считается незакрытым.
|
||||
|
||||
## 7. Definition of Done (Step-0 Complete)
|
||||
|
||||
Step-0 считается закрытым, когда одновременно выполнено:
|
||||
|
||||
1. Есть утвержденный domain card template и acceptance template.
|
||||
2. Есть автоматический structural validator run-паков.
|
||||
3. Есть автоматический comparator baseline до/после.
|
||||
4. Есть nightly regression на двух baseline-паках.
|
||||
5. Хотя бы 1 референсный домен прошел полный цикл с green domain+global gates.
|
||||
6. `global_execution_checklist_v1.md` обновлен и содержит Step-0 closeout.
|
||||
|
||||
## 8. Что НЕ требуется для старта Step-4
|
||||
|
||||
Не требуется «идеальная система» или «идеальный все-домены-ready».
|
||||
|
||||
Требуется:
|
||||
|
||||
- доказанный repeatable delivery-процесс;
|
||||
- доказанный контроль качества без ручного hero-mode.
|
||||
|
||||
Именно это и делает Step-0 pre-prod обязательным перед масштабным domain expansion.
|
||||
|
||||
## 9. Automation Toolkit (внедрено)
|
||||
|
||||
Готовые скрипты Step-0:
|
||||
|
||||
1. Structural validator run-пака
|
||||
`python scripts/validate_address_run_pack.py docs/ADDRESS/runs/<run_id>`
|
||||
2. Baseline comparator
|
||||
`python scripts/compare_address_run_summary.py --baseline-summary <baseline_run_summary.json> --candidate-summary <candidate_run_summary.json>`
|
||||
3. Nightly orchestration (102 + 25, validator + comparator)
|
||||
`python scripts/run_address_nightly_regression.py`
|
||||
4. Windows wrapper для планировщика
|
||||
`powershell -ExecutionPolicy Bypass -File .\scripts\run_address_nightly_regression.ps1`
|
||||
|
||||
Минимальный dry-run smoke:
|
||||
|
||||
- `python scripts/run_address_nightly_regression.py --dry-run`
|
||||
|
|
@ -0,0 +1,172 @@
|
|||
[
|
||||
{
|
||||
"id": "RCO_C001",
|
||||
"group": "canonical",
|
||||
"text": "Покажи незакрытые договоры на 2020-12-31",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"expected_mode": "address_query",
|
||||
"expected_reply_type": "factual"
|
||||
},
|
||||
{
|
||||
"id": "RCO_C002",
|
||||
"group": "canonical",
|
||||
"text": "Show open contracts as of 2020-12-31",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"expected_mode": "address_query",
|
||||
"expected_reply_type": "factual"
|
||||
},
|
||||
{
|
||||
"id": "RCO_C003",
|
||||
"group": "canonical",
|
||||
"text": "Есть ли долг по договору 19/15 на 2020-07-31",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_C004",
|
||||
"group": "canonical",
|
||||
"text": "Есть ли незакрытые позиции по договору 19/15 на 2020-12-31",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_C005",
|
||||
"group": "canonical",
|
||||
"text": "Покажи открытые позиции по договору 19/15",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_C006",
|
||||
"group": "canonical",
|
||||
"text": "Есть ли открытые позиции по договору 19/15 на 2020-12-31",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_C007",
|
||||
"group": "canonical",
|
||||
"text": "Покажи незакрытые договоры на конец 2020-12-31",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"expected_mode": "address_query",
|
||||
"expected_reply_type": "factual"
|
||||
},
|
||||
{
|
||||
"id": "RCO_C008",
|
||||
"group": "canonical",
|
||||
"text": "list open contracts for 2020-12-31",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"expected_mode": "address_query",
|
||||
"expected_reply_type": "factual"
|
||||
},
|
||||
{
|
||||
"id": "RCO_N001",
|
||||
"group": "noisy_slang",
|
||||
"text": "покажи незакрытые договоры на 2020-12-31 пж",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_N002",
|
||||
"group": "noisy_slang",
|
||||
"text": "незакрытые договоры на 2020-12-31 гони",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_N003",
|
||||
"group": "noisy_slang",
|
||||
"text": "open contracts 2020-12-31 pls",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_N004",
|
||||
"group": "noisy_slang",
|
||||
"text": "по дог 19/15 есть хвосты на 2020-12-31",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_N005",
|
||||
"group": "noisy_slang",
|
||||
"text": "долг по дог 19/15 на 2020-12-31 есть?",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_N006",
|
||||
"group": "noisy_slang",
|
||||
"text": "open items by contract 19/15 as of 2020-12-31",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_N007",
|
||||
"group": "noisy_slang",
|
||||
"text": "есть ли долг по договору 19/15 на 31.12.2020",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_N008",
|
||||
"group": "noisy_slang",
|
||||
"text": "покажи открытые позиции по дог 19/15 на 2020-12-31 пж",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_N009",
|
||||
"group": "noisy_slang",
|
||||
"text": "show open contracts for 2020.12.31",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_N010",
|
||||
"group": "noisy_slang",
|
||||
"text": "незакрытые договоры 2020-12-31",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_F001",
|
||||
"group": "followup_chain",
|
||||
"session": "chain_contract_open_items_a",
|
||||
"text": "Есть ли долг по договору 19/15 на 2020-07-31",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_F002",
|
||||
"group": "followup_chain",
|
||||
"session": "chain_contract_open_items_a",
|
||||
"text": "а теперь на 2020-12-31",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_F003",
|
||||
"group": "followup_chain",
|
||||
"session": "chain_contract_open_items_a",
|
||||
"text": "а теперь открытые позиции по нему",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_F004",
|
||||
"group": "followup_chain",
|
||||
"session": "chain_contract_open_items_b",
|
||||
"text": "Покажи незакрытые договоры на 2020-12-31",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"expected_mode": "address_query"
|
||||
},
|
||||
{
|
||||
"id": "RCO_F005",
|
||||
"group": "followup_chain",
|
||||
"session": "chain_contract_open_items_b",
|
||||
"text": "а теперь есть ли долг по договору 19/15 на 2020-12-31",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"expected_mode": "address_query"
|
||||
}
|
||||
]
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10
|
||||
|
||||
Generated at: 2026-04-02T16:55:34
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\domain_contracts_open_items_acceptance_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 23
|
||||
- ok_200_count: 23
|
||||
- semantic_pass_count: 21
|
||||
- semantic_pass_rate: 0.913
|
||||
- route_pass_count: 19
|
||||
- route_pass_rate: 0.8261
|
||||
- strict_pass_count: 19
|
||||
- strict_pass_rate: 0.8261
|
||||
- factual_count: 19
|
||||
- partial_coverage_count: 3
|
||||
- clarification_required_count: 1
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 17
|
||||
- avg_elapsed_ms: 6984.8
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
|
|
@ -0,0 +1,860 @@
|
|||
[
|
||||
{
|
||||
"index": 7,
|
||||
"id": "RCO_C007",
|
||||
"question": "Покажи незакрытые договорные позиции на 2020-12-31",
|
||||
"session": null,
|
||||
"session_id": "asst-2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10-rco_c007",
|
||||
"status_code": 200,
|
||||
"ok": true,
|
||||
"elapsed_ms": 6241,
|
||||
"reply_type": "partial_coverage",
|
||||
"trace_id": "address-K-kNk82lg0",
|
||||
"assistant_reply": "Для точного адресного поиска не хватает обязательного якоря.\nПричина: для open_items нужен якорь контрагента или договора.\nЧто нужно уточнить: укажите контрагента или номер/название договора.",
|
||||
"assistant_reply_first_line": "Для точного адресного поиска не хватает обязательного якоря.",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"actual_intent": "open_items_by_counterparty_or_contract",
|
||||
"intent_match": false,
|
||||
"expected_mode": "address_query",
|
||||
"actual_mode": "address_query",
|
||||
"mode_match": true,
|
||||
"expected_reply_type": "factual",
|
||||
"reply_match": false,
|
||||
"semantic_pass": false,
|
||||
"route_pass": false,
|
||||
"route_health": "blocked_missing_anchor",
|
||||
"strict_policy": "route",
|
||||
"strict_pass": false,
|
||||
"selected_recipe": null,
|
||||
"missing_required_filters": [
|
||||
"counterparty_or_contract"
|
||||
],
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 0,
|
||||
"rows_matched": 0,
|
||||
"mcp_call_status": "skipped",
|
||||
"limited_reason_category": "missing_anchor",
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"debug_payload": {
|
||||
"trace_id": "address-K-kNk82lg0",
|
||||
"prompt_version": "address_query_runtime_v1",
|
||||
"schema_version": "address_query_runtime_v1",
|
||||
"fallback_type": "partial",
|
||||
"route_summary": null,
|
||||
"fragments": [],
|
||||
"requirements_extracted": [],
|
||||
"coverage_report": {
|
||||
"requirements_total": 0,
|
||||
"requirements_covered": 0,
|
||||
"requirements_uncovered": [],
|
||||
"requirements_partially_covered": [],
|
||||
"clarification_needed_for": [],
|
||||
"out_of_scope_requirements": []
|
||||
},
|
||||
"routes": [],
|
||||
"retrieval_status": [],
|
||||
"retrieval_results": [],
|
||||
"answer_grounding_check": {
|
||||
"status": "partial",
|
||||
"route_subject_match": true,
|
||||
"missing_requirements": [],
|
||||
"reasons": [
|
||||
"address_action_detected",
|
||||
"address_entity_detected",
|
||||
"object_signal_detected",
|
||||
"open_items_signal_detected"
|
||||
],
|
||||
"why_included_summary": [],
|
||||
"selection_reason_summary": []
|
||||
},
|
||||
"dropped_intent_segments": [],
|
||||
"detected_mode": "address_query",
|
||||
"detected_mode_confidence": "high",
|
||||
"query_shape": "OBJECT_LOOKUP",
|
||||
"query_shape_confidence": "medium",
|
||||
"detected_intent": "open_items_by_counterparty_or_contract",
|
||||
"detected_intent_confidence": "medium",
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"as_of_date": "2020-12-31"
|
||||
},
|
||||
"missing_required_filters": [
|
||||
"counterparty_or_contract"
|
||||
],
|
||||
"selected_recipe": null,
|
||||
"mcp_call_status_legacy": "skipped",
|
||||
"account_scope_mode": "strict",
|
||||
"account_scope_fallback_applied": false,
|
||||
"anchor_type": "unknown",
|
||||
"anchor_value_raw": null,
|
||||
"anchor_value_resolved": null,
|
||||
"resolver_confidence": "low",
|
||||
"ambiguity_count": 0,
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"mcp_call_status": "skipped",
|
||||
"rows_fetched": 0,
|
||||
"raw_rows_received": 0,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_matched": 0,
|
||||
"raw_row_keys_sample": [],
|
||||
"materialization_drop_reason": "none",
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"limited_reason_category": "missing_anchor",
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"execution_lane": "address_query",
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_attempted": true,
|
||||
"llm_provider_used": "local",
|
||||
"llm_decomposition_trace_id": "xGDs8U2f3GsoPC",
|
||||
"llm_decomposition_effective_message": "Показать незакрытые договорные позиции по состоянию на 2020-12-31",
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"sanitized_user_message": "покажи незакрытые договорные позиции на 2020-12-31",
|
||||
"tool_gate_decision": "run_address_lane",
|
||||
"tool_gate_reason": "address_mode_classifier_detected",
|
||||
"answer_structure_v11": null,
|
||||
"investigation_state_snapshot": null,
|
||||
"normalized": null,
|
||||
"normalizer_output": {
|
||||
"trace_id": "xGDs8U2f3GsoPC",
|
||||
"prompt_version": "normalizer_v2_0_2",
|
||||
"applied": true,
|
||||
"effective_message": "Показать незакрытые договорные позиции по состоянию на 2020-12-31"
|
||||
}
|
||||
},
|
||||
"error_code": null,
|
||||
"error_message": null
|
||||
},
|
||||
{
|
||||
"index": 9,
|
||||
"id": "RCO_N001",
|
||||
"question": "покажи незакрытые догоры на 2020-12-31",
|
||||
"session": null,
|
||||
"session_id": "asst-2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10-rco_n001",
|
||||
"status_code": 200,
|
||||
"ok": true,
|
||||
"elapsed_ms": 12203,
|
||||
"reply_type": "clarification_required",
|
||||
"trace_id": "S6B0lD-FqSJ6wt",
|
||||
"assistant_reply": "Коротко: Наиболее вероятный механизм проблемы подтвержден частично и требует первичной проверки. Что сломано:\n- Есть признаки проблемы, но без уточнений по периоду и объекту вывод ненадежен. Почему это похоже на проблему:\n- Сигнал проблемы есть, но механизм подтвержден не полностью. На чем это основано:\n- Опора частичная: часть требований покрыта не полностью.\n- Отдельно не подтверждено или покрыто частично: R1. Что проверить первым:\n- Проверьте связку документов и проводок по проблемному участку в указанном периоде. Ограничения:\n- Якоря из вопроса без прямого подтверждения: 2020-12, period:2020-12.\n- Ни одно требование не получило подтвержденного покрытия.\n- Нет explainable-сигналов why_included в результатах выборки.\n- supplier/customer polarity.\n- required anchors claim-bound grounding.\n- evidence.",
|
||||
"assistant_reply_first_line": "Коротко: Наиболее вероятный механизм проблемы подтвержден частично и требует первичной проверки. Что сломано:",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"actual_intent": null,
|
||||
"intent_match": false,
|
||||
"expected_mode": "address_query",
|
||||
"actual_mode": null,
|
||||
"mode_match": false,
|
||||
"expected_reply_type": null,
|
||||
"reply_match": true,
|
||||
"semantic_pass": false,
|
||||
"route_pass": false,
|
||||
"route_health": "blocked_clarification",
|
||||
"strict_policy": "route",
|
||||
"strict_pass": false,
|
||||
"selected_recipe": null,
|
||||
"missing_required_filters": null,
|
||||
"match_failure_stage": null,
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": null,
|
||||
"rows_matched": null,
|
||||
"mcp_call_status": null,
|
||||
"limited_reason_category": null,
|
||||
"llm_decomposition_applied": null,
|
||||
"llm_decomposition_reason": null,
|
||||
"fallback_rule_hit": null,
|
||||
"debug_payload": {
|
||||
"trace_id": "S6B0lD-FqSJ6wt",
|
||||
"prompt_version": "address_query_runtime_v1",
|
||||
"schema_version": "v1",
|
||||
"fallback_type": "clarification",
|
||||
"route_summary": null,
|
||||
"fragments": [],
|
||||
"requirements_extracted": [
|
||||
{
|
||||
"requirement_id": "R1",
|
||||
"source_fragment_id": null,
|
||||
"requirement_text": "покажи незакрытые догоры на 2020-12-31",
|
||||
"subject_tokens": [],
|
||||
"status": "clarification_needed",
|
||||
"route": null
|
||||
}
|
||||
],
|
||||
"coverage_report": {
|
||||
"requirements_total": 1,
|
||||
"requirements_covered": 0,
|
||||
"requirements_uncovered": [],
|
||||
"requirements_partially_covered": [],
|
||||
"clarification_needed_for": [
|
||||
"R1"
|
||||
],
|
||||
"out_of_scope_requirements": []
|
||||
},
|
||||
"routes": [],
|
||||
"retrieval_status": [],
|
||||
"retrieval_results": [],
|
||||
"answer_grounding_check": {
|
||||
"status": "no_grounded_answer",
|
||||
"route_subject_match": true,
|
||||
"missing_requirements": [
|
||||
"R1"
|
||||
],
|
||||
"reasons": [
|
||||
"Ни одно требование не получило подтвержденного покрытия.",
|
||||
"Нет explainable-сигналов why_included в результатах выборки.",
|
||||
"Не удалось надежно определить supplier/customer polarity.",
|
||||
"Недостаточно покрытия required anchors для claim-bound grounding.",
|
||||
"Недостаточно допустимого evidence для обоснованного ответа.",
|
||||
"Targeted evidence acquisition не дал допустимых попаданий по claim target path.",
|
||||
"Есть критическое противоречие по domain/account scope."
|
||||
],
|
||||
"why_included_summary": [],
|
||||
"selection_reason_summary": []
|
||||
},
|
||||
"dropped_intent_segments": [],
|
||||
"question_type_class": "why_breaks",
|
||||
"company_anchors": {
|
||||
"contract_numbers": [],
|
||||
"document_numbers": [],
|
||||
"dates": [],
|
||||
"amounts": [],
|
||||
"accounts": [],
|
||||
"periods": [
|
||||
"2020-12"
|
||||
],
|
||||
"document_types": [],
|
||||
"all": [
|
||||
"period:2020-12"
|
||||
]
|
||||
},
|
||||
"business_scope_raw": [],
|
||||
"business_scope_resolved": [],
|
||||
"company_grounding_applied": false,
|
||||
"scope_resolution_reason": [],
|
||||
"company_scope_resolution_reason": [],
|
||||
"raw_time_anchor": null,
|
||||
"raw_time_scope": null,
|
||||
"resolved_time_anchor": null,
|
||||
"resolved_primary_period": null,
|
||||
"effective_primary_period": null,
|
||||
"temporal_guard_input": null,
|
||||
"temporal_alignment_status": "conflicting",
|
||||
"temporal_resolution_source": "normalized_time_scope:missing",
|
||||
"temporal_guard_basis": "none",
|
||||
"temporal_guard_applied": false,
|
||||
"temporal_guard_outcome": "passed",
|
||||
"temporal_guard": {
|
||||
"raw_time_anchor": null,
|
||||
"raw_time_scope": null,
|
||||
"resolved_time_anchor": null,
|
||||
"resolved_primary_period": null,
|
||||
"effective_primary_period": null,
|
||||
"temporal_guard_input": null,
|
||||
"temporal_alignment_status": "conflicting",
|
||||
"temporal_resolution_source": "normalized_time_scope:missing",
|
||||
"temporal_guard_basis": "none",
|
||||
"temporal_guard_applied": false,
|
||||
"temporal_guard_outcome": "passed",
|
||||
"primary_period_window": null,
|
||||
"allowed_context_window": null,
|
||||
"controlled_temporal_expansion_enabled": false,
|
||||
"context_expansion_reasons_allowed": [
|
||||
"prehistory",
|
||||
"carryover",
|
||||
"post_period_closure",
|
||||
"long_running_contract_context"
|
||||
],
|
||||
"normalized_anchor_drift_detected": false,
|
||||
"reason_codes": [
|
||||
"missing_resolved_primary_period"
|
||||
]
|
||||
},
|
||||
"raw_numeric_tokens": [
|
||||
"2020",
|
||||
"12",
|
||||
"31"
|
||||
],
|
||||
"classified_numeric_tokens": [
|
||||
{
|
||||
"token": "12",
|
||||
"classification": "date_token"
|
||||
},
|
||||
{
|
||||
"token": "31",
|
||||
"classification": "date_token"
|
||||
}
|
||||
],
|
||||
"rejected_as_non_accounts": [
|
||||
"12",
|
||||
"31"
|
||||
],
|
||||
"resolved_account_anchors": [],
|
||||
"domain_polarity_guard": {
|
||||
"applied": true,
|
||||
"polarity": "mixed_or_unresolved",
|
||||
"outcome": "limited_unresolved_polarity",
|
||||
"supplier_score": 0,
|
||||
"customer_score": 0,
|
||||
"account_scope": [],
|
||||
"raw_numeric_tokens": [
|
||||
"2020",
|
||||
"12",
|
||||
"31"
|
||||
],
|
||||
"classified_numeric_tokens": [
|
||||
{
|
||||
"token": "12",
|
||||
"classification": "date_token"
|
||||
},
|
||||
{
|
||||
"token": "31",
|
||||
"classification": "date_token"
|
||||
}
|
||||
],
|
||||
"rejected_as_non_accounts": [
|
||||
"12",
|
||||
"31"
|
||||
],
|
||||
"resolved_account_anchors": [],
|
||||
"rejected_problem_units": 0,
|
||||
"rejected_evidence": 0,
|
||||
"critical_contradiction": true,
|
||||
"reason_codes": [
|
||||
"unresolved_supplier_customer_polarity",
|
||||
"supplier_customer_signals_absent"
|
||||
]
|
||||
},
|
||||
"claim_anchor_audit": {
|
||||
"claim_type": "prove_month_close_state",
|
||||
"settlement_role_resolution_reason": [],
|
||||
"polarity_resolution_status": "not_applicable",
|
||||
"required_anchors": [
|
||||
"period",
|
||||
"close_signal",
|
||||
"cost_scope"
|
||||
],
|
||||
"resolved_anchors": {
|
||||
"period": [
|
||||
"2020-12"
|
||||
],
|
||||
"account_scope": [],
|
||||
"amounts": [],
|
||||
"contract": [],
|
||||
"document_numbers": [],
|
||||
"document_types": [],
|
||||
"counterparty_scope": [],
|
||||
"advance_signal": [],
|
||||
"closure_signal": [
|
||||
"closure"
|
||||
],
|
||||
"vat_signal": [],
|
||||
"chain_signal": [],
|
||||
"close_signal": [],
|
||||
"cost_scope": [],
|
||||
"rbp_signal": [],
|
||||
"writeoff_signal": [],
|
||||
"fixed_asset_signal": [],
|
||||
"amortization_signal": [],
|
||||
"expected_fa_set": [],
|
||||
"actual_fa_set": []
|
||||
},
|
||||
"missing_anchors": [
|
||||
"close_signal",
|
||||
"cost_scope"
|
||||
],
|
||||
"claim_anchor_resolution_rate": 0.3333,
|
||||
"primary_period": null,
|
||||
"allowed_context_window": null,
|
||||
"context_expansion_reasons_allowed": [
|
||||
"prehistory",
|
||||
"carryover",
|
||||
"post_period_closure",
|
||||
"long_running_contract_context"
|
||||
],
|
||||
"reason_codes": [
|
||||
"claim_missing_required_anchors",
|
||||
"claim_anchor_resolution_low"
|
||||
]
|
||||
},
|
||||
"settlement_role": null,
|
||||
"settlement_role_resolution_reason": [],
|
||||
"polarity_resolution_status": "not_applicable",
|
||||
"targeted_evidence_acquisition": {
|
||||
"claim_type": "prove_month_close_state",
|
||||
"required_checks": [
|
||||
"close_operation_found",
|
||||
"distribution_step_found",
|
||||
"residual_tail_found"
|
||||
],
|
||||
"check_status": {
|
||||
"close_operation_found": "not_found",
|
||||
"distribution_step_found": "not_found",
|
||||
"residual_tail_found": "not_found"
|
||||
},
|
||||
"targeted_item_hits": 0,
|
||||
"targeted_evidence_hits": 0,
|
||||
"targeted_evidence_hit_rate": 0,
|
||||
"targeted_evidence_source_refs": [],
|
||||
"reason_codes": [
|
||||
"targeted_evidence_not_found",
|
||||
"targeted_evidence_hit_rate_low"
|
||||
]
|
||||
},
|
||||
"evidence_admissibility_gate": {
|
||||
"candidate_evidence_total": 0,
|
||||
"admissible_evidence_count": 0,
|
||||
"rejected_evidence_count": 0,
|
||||
"rejected_item_count": 0,
|
||||
"reject_breakdown": {
|
||||
"wrong_period": 0,
|
||||
"wrong_domain": 0,
|
||||
"wrong_account_scope": 0,
|
||||
"weak_source_mapping": 0,
|
||||
"zero_live_match": 0,
|
||||
"future_dated_or_out_of_window": 0
|
||||
},
|
||||
"category_breakdown": {
|
||||
"hard_evidence": 0,
|
||||
"supporting_signal": 0,
|
||||
"inadmissible_noise": 0
|
||||
},
|
||||
"reason_codes": [
|
||||
"no_admissible_evidence_for_grounded_answer"
|
||||
]
|
||||
},
|
||||
"eligibility_time_basis": "none",
|
||||
"grounded_answer_eligibility_guard": {
|
||||
"eligible": false,
|
||||
"temporal_passed": true,
|
||||
"eligibility_time_basis": "none",
|
||||
"business_scope_passed": true,
|
||||
"polarity_passed": false,
|
||||
"claim_anchors_passed": false,
|
||||
"claim_anchor_resolution_rate": 0.3333,
|
||||
"missing_required_anchors": 2,
|
||||
"admissible_evidence_count": 0,
|
||||
"critical_contradiction": true,
|
||||
"outcome": "limited_or_insufficient_evidence",
|
||||
"grounding_mode": "limited_or_insufficient_evidence",
|
||||
"reason_codes": [
|
||||
"polarity_guard_limited_unresolved_polarity",
|
||||
"claim_anchor_coverage_insufficient",
|
||||
"admissible_evidence_count_zero",
|
||||
"targeted_evidence_hit_rate_zero",
|
||||
"critical_domain_or_account_contradiction"
|
||||
]
|
||||
},
|
||||
"problem_centric_answer_applied": false,
|
||||
"problem_units_used_count": 0,
|
||||
"problem_answer_mode": "stage1_policy_v11",
|
||||
"answer_structure_v11": {
|
||||
"schema_version": "answer_structure_v1_1",
|
||||
"answer_summary": "Нужны уточнения: без сужения фокуса надежный вывод невозможен.",
|
||||
"direct_answer": "Есть признаки проблемы, но без уточнений по периоду и объекту вывод ненадежен.",
|
||||
"mechanism_block": {
|
||||
"status": "unresolved",
|
||||
"mechanism_notes": [],
|
||||
"limitation_reason_codes": []
|
||||
},
|
||||
"evidence_block": {
|
||||
"evidence_ids": [],
|
||||
"source_refs": [],
|
||||
"mechanism_notes": [],
|
||||
"coverage_note": "coverage_partial_or_limited"
|
||||
},
|
||||
"uncertainty_block": {
|
||||
"open_uncertainties": [
|
||||
"R1",
|
||||
"missing_anchor:document_or_object",
|
||||
"missing_anchor:counterparty"
|
||||
],
|
||||
"limitations": [
|
||||
"Ни одно требование не получило подтвержденного покрытия.",
|
||||
"Нет explainable-сигналов why_included в результатах выборки.",
|
||||
"Не удалось надежно определить supplier/customer polarity.",
|
||||
"Недостаточно покрытия required anchors для claim-bound grounding.",
|
||||
"Недостаточно допустимого evidence для обоснованного ответа.",
|
||||
"Targeted evidence acquisition не дал допустимых попаданий по claim target path.",
|
||||
"Есть критическое противоречие по domain/account scope.",
|
||||
"Часть якорей запроса пока не подтверждена в опоре: 2020-12, period:2020-12."
|
||||
]
|
||||
},
|
||||
"next_step_block": {
|
||||
"recommended_actions": [
|
||||
"Дайте недостающие якоря (период/счет/объект), иначе сильный factual вывод невозможен."
|
||||
],
|
||||
"clarification_questions": [
|
||||
"Укажите документ/GUID/конкретный объект для трассировки.",
|
||||
"Укажите контрагента или группу контрагентов.",
|
||||
"Закройте уточнения для требований: R1."
|
||||
]
|
||||
}
|
||||
},
|
||||
"investigation_state_snapshot": {
|
||||
"schema_version": "investigation_state_v1",
|
||||
"session_id": "asst-2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10-rco_n001",
|
||||
"status": "active",
|
||||
"turn_index": 1,
|
||||
"updated_at": "2026-04-02T13:54:03.427Z",
|
||||
"question_id": "msg-QQjwBnw0bw",
|
||||
"question_scope_id": "p:2020-12|s:покажи незакрытые догоры на 2020-12-31",
|
||||
"scope_origin": "explicit_from_message",
|
||||
"focus": {
|
||||
"domain": null,
|
||||
"period": "2020-12",
|
||||
"primary_accounts": [],
|
||||
"active_query_subject": "покажи незакрытые догоры на 2020-12-31"
|
||||
},
|
||||
"narrowing_status": "unknown",
|
||||
"evidence_refs": [],
|
||||
"open_uncertainties": [
|
||||
"clarify:R1"
|
||||
],
|
||||
"last_answer_mode": "clarification_required",
|
||||
"followup_context": {
|
||||
"previous_question_id": null,
|
||||
"last_user_message": "покажи незакрытые догоры на 2020-12-31",
|
||||
"referenced_requirement_ids": [
|
||||
"R1"
|
||||
],
|
||||
"active_domain": null,
|
||||
"active_requirement_ids": [
|
||||
"R1"
|
||||
],
|
||||
"uncovered_requirement_ids": [
|
||||
"R1"
|
||||
],
|
||||
"last_problem_unit_id": null,
|
||||
"settlement_next_actions": [],
|
||||
"evidence_summary": [],
|
||||
"question_scope_id": "p:2020-12|s:покажи незакрытые догоры на 2020-12-31",
|
||||
"scope_origin": "explicit_from_message"
|
||||
},
|
||||
"query_mode_hint": "investigation_candidate"
|
||||
},
|
||||
"normalized": null
|
||||
},
|
||||
"error_code": null,
|
||||
"error_message": null
|
||||
},
|
||||
{
|
||||
"index": 16,
|
||||
"id": "RCO_N008",
|
||||
"question": "покажи открытые позиции по дог 19/15 пж",
|
||||
"session": null,
|
||||
"session_id": "asst-2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10-rco_n008",
|
||||
"status_code": 200,
|
||||
"ok": true,
|
||||
"elapsed_ms": 7091,
|
||||
"reply_type": "partial_coverage",
|
||||
"trace_id": "address-WjcNH7liP2",
|
||||
"assistant_reply": "В live-данных по текущему фильтру записи не найдены.\nПричина: по указанному якорю и фильтрам в live-выборке нет строк.\nЧто нужно уточнить: уточните период или снимите часть фильтров.",
|
||||
"assistant_reply_first_line": "В live-данных по текущему фильтру записи не найдены.",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"actual_intent": "open_items_by_counterparty_or_contract",
|
||||
"intent_match": true,
|
||||
"expected_mode": "address_query",
|
||||
"actual_mode": "address_query",
|
||||
"mode_match": true,
|
||||
"expected_reply_type": null,
|
||||
"reply_match": true,
|
||||
"semantic_pass": true,
|
||||
"route_pass": false,
|
||||
"route_health": "likely_blocked_route",
|
||||
"strict_policy": "route",
|
||||
"strict_pass": false,
|
||||
"selected_recipe": "address_open_items_by_party_or_contract_v1",
|
||||
"missing_required_filters": [],
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "contract_anchor_not_matched_in_materialized_rows",
|
||||
"rows_fetched": 20,
|
||||
"rows_matched": 0,
|
||||
"mcp_call_status": "materialized_but_not_anchor_matched",
|
||||
"limited_reason_category": "empty_match",
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"debug_payload": {
|
||||
"trace_id": "address-WjcNH7liP2",
|
||||
"prompt_version": "address_query_runtime_v1",
|
||||
"schema_version": "address_query_runtime_v1",
|
||||
"fallback_type": "partial",
|
||||
"route_summary": null,
|
||||
"fragments": [],
|
||||
"requirements_extracted": [],
|
||||
"coverage_report": {
|
||||
"requirements_total": 0,
|
||||
"requirements_covered": 0,
|
||||
"requirements_uncovered": [],
|
||||
"requirements_partially_covered": [],
|
||||
"clarification_needed_for": [],
|
||||
"out_of_scope_requirements": []
|
||||
},
|
||||
"routes": [],
|
||||
"retrieval_status": [],
|
||||
"retrieval_results": [],
|
||||
"answer_grounding_check": {
|
||||
"status": "partial",
|
||||
"route_subject_match": true,
|
||||
"missing_requirements": [],
|
||||
"reasons": [
|
||||
"address_action_detected",
|
||||
"address_entity_detected",
|
||||
"object_signal_detected",
|
||||
"open_items_signal_detected"
|
||||
],
|
||||
"why_included_summary": [],
|
||||
"selection_reason_summary": []
|
||||
},
|
||||
"dropped_intent_segments": [],
|
||||
"detected_mode": "address_query",
|
||||
"detected_mode_confidence": "high",
|
||||
"query_shape": "OBJECT_LOOKUP",
|
||||
"query_shape_confidence": "medium",
|
||||
"detected_intent": "open_items_by_counterparty_or_contract",
|
||||
"detected_intent_confidence": "medium",
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"contract": "19/15 ПЖ"
|
||||
},
|
||||
"missing_required_filters": [],
|
||||
"selected_recipe": "address_open_items_by_party_or_contract_v1",
|
||||
"mcp_call_status_legacy": "materialized_but_not_matched",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": true,
|
||||
"anchor_type": "contract",
|
||||
"anchor_value_raw": "19/15 ПЖ",
|
||||
"anchor_value_resolved": "19/15 ПЖ",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "contract_anchor_not_matched_in_materialized_rows",
|
||||
"mcp_call_status": "materialized_but_not_anchor_matched",
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 20,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_materialized": 20,
|
||||
"rows_matched": 0,
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"materialization_drop_reason": "none",
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"limited_reason_category": "empty_match",
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"execution_lane": "address_query",
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_attempted": true,
|
||||
"llm_provider_used": "local",
|
||||
"llm_decomposition_trace_id": "lxly54b13hg0NS",
|
||||
"llm_decomposition_effective_message": "Показать открытые позиции по договору 19/15 ПЖ.",
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"sanitized_user_message": "покажи открытые позиции по договор 19/15",
|
||||
"tool_gate_decision": "run_address_lane",
|
||||
"tool_gate_reason": "address_mode_classifier_detected",
|
||||
"answer_structure_v11": null,
|
||||
"investigation_state_snapshot": null,
|
||||
"normalized": null,
|
||||
"normalizer_output": {
|
||||
"trace_id": "lxly54b13hg0NS",
|
||||
"prompt_version": "normalizer_v2_0_2",
|
||||
"applied": true,
|
||||
"effective_message": "Показать открытые позиции по договору 19/15 ПЖ."
|
||||
}
|
||||
},
|
||||
"error_code": null,
|
||||
"error_message": null
|
||||
},
|
||||
{
|
||||
"index": 23,
|
||||
"id": "RCO_F005",
|
||||
"question": "а теперь есть ли долг по договору 19/15",
|
||||
"session": "chain_contract_open_items_b",
|
||||
"session_id": "asst-2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10-chain_contract_open_items_b",
|
||||
"status_code": 200,
|
||||
"ok": true,
|
||||
"elapsed_ms": 7071,
|
||||
"reply_type": "partial_coverage",
|
||||
"trace_id": "address-alvGrbULwl",
|
||||
"assistant_reply": "В live-данных по текущему фильтру записи не найдены.\nПричина: по указанному якорю и фильтрам в live-выборке нет строк.\nЧто нужно уточнить: уточните период или снимите часть фильтров.",
|
||||
"assistant_reply_first_line": "В live-данных по текущему фильтру записи не найдены.",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"actual_intent": "open_items_by_counterparty_or_contract",
|
||||
"intent_match": true,
|
||||
"expected_mode": "address_query",
|
||||
"actual_mode": "address_query",
|
||||
"mode_match": true,
|
||||
"expected_reply_type": null,
|
||||
"reply_match": true,
|
||||
"semantic_pass": true,
|
||||
"route_pass": false,
|
||||
"route_health": "likely_blocked_route",
|
||||
"strict_policy": "route",
|
||||
"strict_pass": false,
|
||||
"selected_recipe": "address_open_items_by_party_or_contract_v1",
|
||||
"missing_required_filters": [],
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "contract_anchor_not_matched_in_materialized_rows",
|
||||
"rows_fetched": 20,
|
||||
"rows_matched": 0,
|
||||
"mcp_call_status": "materialized_but_not_anchor_matched",
|
||||
"limited_reason_category": "empty_match",
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"debug_payload": {
|
||||
"trace_id": "address-alvGrbULwl",
|
||||
"prompt_version": "address_query_runtime_v1",
|
||||
"schema_version": "address_query_runtime_v1",
|
||||
"fallback_type": "partial",
|
||||
"route_summary": null,
|
||||
"fragments": [],
|
||||
"requirements_extracted": [],
|
||||
"coverage_report": {
|
||||
"requirements_total": 0,
|
||||
"requirements_covered": 0,
|
||||
"requirements_uncovered": [],
|
||||
"requirements_partially_covered": [],
|
||||
"clarification_needed_for": [],
|
||||
"out_of_scope_requirements": []
|
||||
},
|
||||
"routes": [],
|
||||
"retrieval_status": [],
|
||||
"retrieval_results": [],
|
||||
"answer_grounding_check": {
|
||||
"status": "partial",
|
||||
"route_subject_match": true,
|
||||
"missing_requirements": [],
|
||||
"reasons": [
|
||||
"address_action_detected",
|
||||
"address_entity_detected",
|
||||
"verify_signal_detected",
|
||||
"open_items_signal_detected",
|
||||
"period_from_followup_context",
|
||||
"address_followup_context_applied"
|
||||
],
|
||||
"why_included_summary": [],
|
||||
"selection_reason_summary": []
|
||||
},
|
||||
"dropped_intent_segments": [],
|
||||
"detected_mode": "address_query",
|
||||
"detected_mode_confidence": "high",
|
||||
"query_shape": "VERIFY_FACTUAL",
|
||||
"query_shape_confidence": "medium",
|
||||
"detected_intent": "open_items_by_counterparty_or_contract",
|
||||
"detected_intent_confidence": "medium",
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"contract": "19/15",
|
||||
"period_from": "2020-12-01",
|
||||
"period_to": "2020-12-31"
|
||||
},
|
||||
"missing_required_filters": [],
|
||||
"selected_recipe": "address_open_items_by_party_or_contract_v1",
|
||||
"mcp_call_status_legacy": "materialized_but_not_matched",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": true,
|
||||
"anchor_type": "contract",
|
||||
"anchor_value_raw": "19/15",
|
||||
"anchor_value_resolved": "19/15",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "contract_anchor_not_matched_in_materialized_rows",
|
||||
"mcp_call_status": "materialized_but_not_anchor_matched",
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 20,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_materialized": 20,
|
||||
"rows_matched": 0,
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"materialization_drop_reason": "none",
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"limited_reason_category": "empty_match",
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"execution_lane": "address_query",
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_attempted": true,
|
||||
"llm_provider_used": "local",
|
||||
"llm_decomposition_trace_id": "JCTFOfjzFFHE7a",
|
||||
"llm_decomposition_effective_message": "проверить наличие долга по договору 19/15",
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"sanitized_user_message": "а теперь есть ли долг по договору 19/15",
|
||||
"tool_gate_decision": "run_address_lane",
|
||||
"tool_gate_reason": "address_mode_classifier_detected",
|
||||
"answer_structure_v11": null,
|
||||
"investigation_state_snapshot": null,
|
||||
"normalized": null,
|
||||
"normalizer_output": {
|
||||
"trace_id": "JCTFOfjzFFHE7a",
|
||||
"prompt_version": "normalizer_v2_0_2",
|
||||
"applied": true,
|
||||
"effective_message": "проверить наличие долга по договору 19/15"
|
||||
}
|
||||
},
|
||||
"error_code": null,
|
||||
"error_message": null
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,27 @@
|
|||
# Response Audit: 2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| RCO_C001 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_C002 | True | ok_or_factual | factual | list_open_contracts | None | Show open contracts as of 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_C003 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли долг по договору 19/15 на 2020-07-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_C004 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли незакрытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_C005 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Покажи открытые позиции по договору 19/15 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_C006 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_C007 | False | blocked_missing_anchor | partial_coverage | open_items_by_counterparty_or_contract | missing_anchor | Покажи незакрытые договорные позиции на 2020-12-31 | Для точного адресного поиска не хватает обязательного якоря. |
|
||||
| RCO_C008 | True | ok_or_factual | factual | list_open_contracts | None | list open contracts for 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_N001 | False | blocked_clarification | clarification_required | None | None | покажи незакрытые догоры на 2020-12-31 | Коротко: Наиболее вероятный механизм проблемы подтвержден частично и требует первичной проверки. Что сломано: |
|
||||
| RCO_N002 | True | ok_or_factual | factual | list_open_contracts | None | незакрытые договоры на 2020-12-31 гони | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_N003 | True | ok_or_factual | factual | list_open_contracts | None | open contracts 2020-12-31 pls | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_N004 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | по дог 19/15 есть хвосты на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_N005 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | долг по дог 19/15 на 2020-12-31 есть? | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_N006 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | open items by contract 19/15 as of 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_N007 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли долг по договору 19/15 на 31.12.2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_N008 | False | likely_blocked_route | partial_coverage | open_items_by_counterparty_or_contract | empty_match | покажи открытые позиции по дог 19/15 пж | В live-данных по текущему фильтру записи не найдены. |
|
||||
| RCO_N009 | True | ok_or_factual | factual | list_open_contracts | None | show open contracts for 2020.12.31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_N010 | True | ok_or_factual | factual | list_open_contracts | None | незакрытые договоры 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_F001 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли долг по договору 19/15 на 2020-07-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_F002 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_F003 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_F004 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_F005 | False | likely_blocked_route | partial_coverage | open_items_by_counterparty_or_contract | empty_match | а теперь есть ли долг по договору 19/15 | В live-данных по текущему фильтру записи не найдены. |
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10",
|
||||
"generated_at": "2026-04-02T16:55:34",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\domain_contracts_open_items_acceptance_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 23,
|
||||
"ok_200_count": 23,
|
||||
"semantic_pass_count": 21,
|
||||
"semantic_pass_rate": 0.913,
|
||||
"route_pass_count": 19,
|
||||
"route_pass_rate": 0.8261,
|
||||
"strict_pass_count": 19,
|
||||
"strict_pass_rate": 0.8261,
|
||||
"factual_count": 19,
|
||||
"partial_coverage_count": 3,
|
||||
"clarification_required_count": 1,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 17,
|
||||
"avg_elapsed_ms": 6984.8
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 19,
|
||||
"partial_coverage": 3,
|
||||
"clarification_required": 1
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_open_contracts": 8,
|
||||
"open_items_by_counterparty_or_contract": 14,
|
||||
"None": 1
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 22,
|
||||
"None": 1
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 19,
|
||||
"skipped": 1,
|
||||
"None": 1,
|
||||
"materialized_but_not_anchor_matched": 2
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"missing_anchor": 1,
|
||||
"empty_match": 2
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 19,
|
||||
"blocked_missing_anchor": 1,
|
||||
"blocked_clarification": 1,
|
||||
"likely_blocked_route": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22
|
||||
|
||||
Generated at: 2026-04-02T16:58:39
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\domain_contracts_open_items_acceptance_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 23
|
||||
- ok_200_count: 23
|
||||
- semantic_pass_count: 23
|
||||
- semantic_pass_rate: 1.0
|
||||
- route_pass_count: 23
|
||||
- route_pass_rate: 1.0
|
||||
- strict_pass_count: 23
|
||||
- strict_pass_rate: 1.0
|
||||
- factual_count: 23
|
||||
- partial_coverage_count: 0
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 18
|
||||
- avg_elapsed_ms: 6755.0
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
|
|
@ -0,0 +1 @@
|
|||
[]
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,27 @@
|
|||
# Response Audit: 2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| RCO_C001 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_C002 | True | ok_or_factual | factual | list_open_contracts | None | Show open contracts as of 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_C003 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли долг по договору 19/15 на 2020-07-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_C004 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли незакрытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_C005 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Покажи открытые позиции по договору 19/15 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_C006 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_C007 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на конец 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_C008 | True | ok_or_factual | factual | list_open_contracts | None | list open contracts for 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_N001 | True | ok_or_factual | factual | list_open_contracts | None | покажи незакрытые договоры на 2020-12-31 пж | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_N002 | True | ok_or_factual | factual | list_open_contracts | None | незакрытые договоры на 2020-12-31 гони | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_N003 | True | ok_or_factual | factual | list_open_contracts | None | open contracts 2020-12-31 pls | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_N004 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | по дог 19/15 есть хвосты на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_N005 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | долг по дог 19/15 на 2020-12-31 есть? | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_N006 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | open items by contract 19/15 as of 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_N007 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли долг по договору 19/15 на 31.12.2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_N008 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | покажи открытые позиции по дог 19/15 на 2020-12-31 пж | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_N009 | True | ok_or_factual | factual | list_open_contracts | None | show open contracts for 2020.12.31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_N010 | True | ok_or_factual | factual | list_open_contracts | None | незакрытые договоры 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_F001 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли долг по договору 19/15 на 2020-07-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_F002 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_F003 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| RCO_F004 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| RCO_F005 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь есть ли долг по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22",
|
||||
"generated_at": "2026-04-02T16:58:39",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\domain_contracts_open_items_acceptance_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 23,
|
||||
"ok_200_count": 23,
|
||||
"semantic_pass_count": 23,
|
||||
"semantic_pass_rate": 1.0,
|
||||
"route_pass_count": 23,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_count": 23,
|
||||
"strict_pass_rate": 1.0,
|
||||
"factual_count": 23,
|
||||
"partial_coverage_count": 0,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 18,
|
||||
"avg_elapsed_ms": 6755.0
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 23
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_open_contracts": 10,
|
||||
"open_items_by_counterparty_or_contract": 13
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 23
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 23
|
||||
},
|
||||
"limited_reason_category": {},
|
||||
"route_health": {
|
||||
"ok_or_factual": 23
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Followup_Recheck_PostDomain_17-14-30
|
||||
|
||||
Generated at: 2026-04-02T17:14:46
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 25
|
||||
- ok_200_count: 25
|
||||
- semantic_pass_count: 23
|
||||
- semantic_pass_rate: 0.92
|
||||
- route_pass_count: 23
|
||||
- route_pass_rate: 0.92
|
||||
- strict_pass_count: 23
|
||||
- strict_pass_rate: 0.92
|
||||
- factual_count: 24
|
||||
- partial_coverage_count: 1
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 13
|
||||
- avg_elapsed_ms: 5041.3
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,29 @@
|
|||
# Response Audit: 2026-04-02_Address_Followup_Recheck_PostDomain_17-14-30
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
|
||||
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F014 | False | ok_or_factual | factual | list_documents_by_counterparty | None | раскрой 62 документами на ту же дату | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F015 | False | ok_or_factual | factual | list_documents_by_counterparty | None | вернись на 2020-12-31 по 60 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F020 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по этому же договору | Собран список документов по договору (live address lane). |
|
||||
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Followup_Recheck_PostDomain_17-14-30",
|
||||
"generated_at": "2026-04-02T17:14:46",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 25,
|
||||
"ok_200_count": 25,
|
||||
"semantic_pass_count": 23,
|
||||
"semantic_pass_rate": 0.92,
|
||||
"route_pass_count": 23,
|
||||
"route_pass_rate": 0.92,
|
||||
"strict_pass_count": 23,
|
||||
"strict_pass_rate": 0.92,
|
||||
"factual_count": 24,
|
||||
"partial_coverage_count": 1,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 13,
|
||||
"avg_elapsed_ms": 5041.3
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 24,
|
||||
"partial_coverage": 1
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_documents_by_counterparty": 5,
|
||||
"account_balance_snapshot": 8,
|
||||
"documents_forming_balance": 1,
|
||||
"bank_operations_by_counterparty": 2,
|
||||
"list_documents_by_contract": 3,
|
||||
"bank_operations_by_contract": 3,
|
||||
"open_items_by_counterparty_or_contract": 3
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 25
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 24,
|
||||
"no_raw_rows": 1
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"empty_match": 1
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 24,
|
||||
"partial_non_blocking": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Followup_Recheck_PostFix2_17-24-40
|
||||
|
||||
Generated at: 2026-04-02T17:26:20
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 25
|
||||
- ok_200_count: 25
|
||||
- semantic_pass_count: 24
|
||||
- semantic_pass_rate: 0.96
|
||||
- route_pass_count: 23
|
||||
- route_pass_rate: 0.92
|
||||
- strict_pass_count: 23
|
||||
- strict_pass_rate: 0.92
|
||||
- factual_count: 22
|
||||
- partial_coverage_count: 3
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 13
|
||||
- avg_elapsed_ms: 4910.7
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
|
|
@ -0,0 +1,298 @@
|
|||
[
|
||||
{
|
||||
"index": 14,
|
||||
"id": "F014",
|
||||
"question": "раскрой 62 документами на ту же дату",
|
||||
"session": "chain_balance_c",
|
||||
"session_id": "asst-2026-04-02_Address_Followup_Recheck_PostFix2_17-24-40-chain_balance_c",
|
||||
"status_code": 200,
|
||||
"ok": true,
|
||||
"elapsed_ms": 8385,
|
||||
"reply_type": "factual",
|
||||
"trace_id": "address-uEVFkkwWvL",
|
||||
"assistant_reply": "Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу.\nСобран список документов по контрагенту (live address lane).\nСтрок отобрано: 2.\n1. 2020-05-21T12:00:00Z | Поступление на расчетный счет 00000000023 от 21.05.2020 12:00:00 | 0 / 0 | 250546.24 | аналитика: ЗАО Ремонтно-строительная фирма «Ремстройсервис»\n2. 2020-05-15T12:00:02Z | Поступление на расчетный счет 00000000022 от 15.05.2020 12:00:02 | 0 / 0 | 765000 | аналитика: ПрофТренд,ООО",
|
||||
"assistant_reply_first_line": "Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу.",
|
||||
"expected_intent": "documents_forming_balance",
|
||||
"actual_intent": "list_documents_by_counterparty",
|
||||
"intent_match": false,
|
||||
"expected_mode": "address_query",
|
||||
"actual_mode": "address_query",
|
||||
"mode_match": true,
|
||||
"expected_reply_type": null,
|
||||
"reply_match": true,
|
||||
"semantic_pass": false,
|
||||
"route_pass": false,
|
||||
"route_health": "ok_or_factual",
|
||||
"strict_policy": "route",
|
||||
"strict_pass": false,
|
||||
"selected_recipe": "address_documents_by_counterparty_v1",
|
||||
"missing_required_filters": [],
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "counterparty_anchor_not_matched_in_materialized_rows",
|
||||
"rows_fetched": 20,
|
||||
"rows_matched": 2,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"limited_reason_category": null,
|
||||
"llm_decomposition_applied": false,
|
||||
"llm_decomposition_reason": "normalized_fragment_rejected_intent_conflict",
|
||||
"fallback_rule_hit": null,
|
||||
"debug_payload": {
|
||||
"trace_id": "address-uEVFkkwWvL",
|
||||
"prompt_version": "address_query_runtime_v1",
|
||||
"schema_version": "address_query_runtime_v1",
|
||||
"fallback_type": "none",
|
||||
"route_summary": null,
|
||||
"fragments": [],
|
||||
"requirements_extracted": [],
|
||||
"coverage_report": {
|
||||
"requirements_total": 0,
|
||||
"requirements_covered": 0,
|
||||
"requirements_uncovered": [],
|
||||
"requirements_partially_covered": [],
|
||||
"clarification_needed_for": [],
|
||||
"out_of_scope_requirements": []
|
||||
},
|
||||
"routes": [],
|
||||
"retrieval_status": [],
|
||||
"retrieval_results": [],
|
||||
"answer_grounding_check": {
|
||||
"status": "grounded",
|
||||
"route_subject_match": true,
|
||||
"missing_requirements": [],
|
||||
"reasons": [
|
||||
"address_entity_detected",
|
||||
"drilldown_signal_detected",
|
||||
"documents_by_counterparty_signal_detected",
|
||||
"period_from_followup_context",
|
||||
"address_followup_context_applied",
|
||||
"anchor_not_matched_fallback_rows"
|
||||
],
|
||||
"why_included_summary": [],
|
||||
"selection_reason_summary": []
|
||||
},
|
||||
"dropped_intent_segments": [],
|
||||
"detected_mode": "address_query",
|
||||
"detected_mode_confidence": "medium",
|
||||
"query_shape": "DRILLDOWN_REQUEST",
|
||||
"query_shape_confidence": "high",
|
||||
"detected_intent": "list_documents_by_counterparty",
|
||||
"detected_intent_confidence": "medium",
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"counterparty": "документами",
|
||||
"period_from": "2020-05-01",
|
||||
"period_to": "2020-05-31"
|
||||
},
|
||||
"missing_required_filters": [],
|
||||
"selected_recipe": "address_documents_by_counterparty_v1",
|
||||
"mcp_call_status_legacy": "matched_non_empty",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": false,
|
||||
"anchor_type": "counterparty",
|
||||
"anchor_value_raw": "документами",
|
||||
"anchor_value_resolved": "документами",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"match_failure_stage": "materialized_but_not_anchor_matched",
|
||||
"match_failure_reason": "counterparty_anchor_not_matched_in_materialized_rows",
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 2,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_materialized": 2,
|
||||
"rows_matched": 2,
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Контрагент",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"Amount"
|
||||
],
|
||||
"materialization_drop_reason": "none",
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"limited_reason_category": null,
|
||||
"response_type": "FACTUAL_LIST",
|
||||
"execution_lane": "address_query",
|
||||
"llm_decomposition_applied": false,
|
||||
"llm_decomposition_attempted": true,
|
||||
"llm_provider_used": "local",
|
||||
"llm_decomposition_trace_id": "fWGwdLnz5skfYo",
|
||||
"llm_decomposition_effective_message": "раскрой 62 документами на ту же дату",
|
||||
"llm_decomposition_reason": "normalized_fragment_rejected_intent_conflict",
|
||||
"fallback_rule_hit": null,
|
||||
"sanitized_user_message": "раскрой 62 документами на ту же дату",
|
||||
"tool_gate_decision": "run_address_lane",
|
||||
"tool_gate_reason": "address_mode_classifier_detected",
|
||||
"answer_structure_v11": null,
|
||||
"investigation_state_snapshot": null,
|
||||
"normalized": null,
|
||||
"normalizer_output": {
|
||||
"trace_id": "fWGwdLnz5skfYo",
|
||||
"prompt_version": "normalizer_v2_0_2",
|
||||
"applied": false,
|
||||
"effective_message": "раскрой 62 документами на ту же дату"
|
||||
}
|
||||
},
|
||||
"error_code": null,
|
||||
"error_message": null
|
||||
},
|
||||
{
|
||||
"index": 20,
|
||||
"id": "F020",
|
||||
"question": "покажи документы по этому же договору",
|
||||
"session": "chain_contract_d",
|
||||
"session_id": "asst-2026-04-02_Address_Followup_Recheck_PostFix2_17-24-40-chain_contract_d",
|
||||
"status_code": 200,
|
||||
"ok": true,
|
||||
"elapsed_ms": 6027,
|
||||
"reply_type": "partial_coverage",
|
||||
"trace_id": "address-CdjfoNgyoR",
|
||||
"assistant_reply": "Для точного адресного поиска не хватает обязательного якоря.\nПричина: не хватает обязательных фильтров.\nЧто нужно уточнить: уточните: contract.",
|
||||
"assistant_reply_first_line": "Для точного адресного поиска не хватает обязательного якоря.",
|
||||
"expected_intent": "list_documents_by_contract",
|
||||
"actual_intent": "list_documents_by_contract",
|
||||
"intent_match": true,
|
||||
"expected_mode": "address_query",
|
||||
"actual_mode": "address_query",
|
||||
"mode_match": true,
|
||||
"expected_reply_type": null,
|
||||
"reply_match": true,
|
||||
"semantic_pass": true,
|
||||
"route_pass": false,
|
||||
"route_health": "blocked_missing_anchor",
|
||||
"strict_policy": "route",
|
||||
"strict_pass": false,
|
||||
"selected_recipe": "address_documents_by_contract_v1",
|
||||
"missing_required_filters": [
|
||||
"contract"
|
||||
],
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 0,
|
||||
"rows_matched": 0,
|
||||
"mcp_call_status": "skipped",
|
||||
"limited_reason_category": "missing_anchor",
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"debug_payload": {
|
||||
"trace_id": "address-CdjfoNgyoR",
|
||||
"prompt_version": "address_query_runtime_v1",
|
||||
"schema_version": "address_query_runtime_v1",
|
||||
"fallback_type": "partial",
|
||||
"route_summary": null,
|
||||
"fragments": [],
|
||||
"requirements_extracted": [],
|
||||
"coverage_report": {
|
||||
"requirements_total": 0,
|
||||
"requirements_covered": 0,
|
||||
"requirements_uncovered": [],
|
||||
"requirements_partially_covered": [],
|
||||
"clarification_needed_for": [],
|
||||
"out_of_scope_requirements": []
|
||||
},
|
||||
"routes": [],
|
||||
"retrieval_status": [],
|
||||
"retrieval_results": [],
|
||||
"answer_grounding_check": {
|
||||
"status": "partial",
|
||||
"route_subject_match": true,
|
||||
"missing_requirements": [],
|
||||
"reasons": [
|
||||
"address_action_detected",
|
||||
"address_entity_detected",
|
||||
"document_list_signal_detected",
|
||||
"documents_by_contract_signal_detected",
|
||||
"missing_required_filters"
|
||||
],
|
||||
"why_included_summary": [],
|
||||
"selection_reason_summary": []
|
||||
},
|
||||
"dropped_intent_segments": [],
|
||||
"detected_mode": "address_query",
|
||||
"detected_mode_confidence": "high",
|
||||
"query_shape": "DOCUMENT_LIST",
|
||||
"query_shape_confidence": "medium",
|
||||
"detected_intent": "list_documents_by_contract",
|
||||
"detected_intent_confidence": "medium",
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20
|
||||
},
|
||||
"missing_required_filters": [
|
||||
"contract"
|
||||
],
|
||||
"selected_recipe": "address_documents_by_contract_v1",
|
||||
"mcp_call_status_legacy": "skipped",
|
||||
"account_scope_mode": "strict",
|
||||
"account_scope_fallback_applied": false,
|
||||
"anchor_type": "unknown",
|
||||
"anchor_value_raw": null,
|
||||
"anchor_value_resolved": null,
|
||||
"resolver_confidence": "low",
|
||||
"ambiguity_count": 0,
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"mcp_call_status": "skipped",
|
||||
"rows_fetched": 0,
|
||||
"raw_rows_received": 0,
|
||||
"rows_after_account_scope": 0,
|
||||
"rows_after_recipe_filter": 0,
|
||||
"rows_materialized": 0,
|
||||
"rows_matched": 0,
|
||||
"raw_row_keys_sample": [],
|
||||
"materialization_drop_reason": "none",
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"limited_reason_category": "missing_anchor",
|
||||
"response_type": "LIMITED_WITH_REASON",
|
||||
"execution_lane": "address_query",
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_attempted": true,
|
||||
"llm_provider_used": "local",
|
||||
"llm_decomposition_trace_id": "8HqWWHl_5_uQpy",
|
||||
"llm_decomposition_effective_message": "Показать документы по указанному договору.",
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"sanitized_user_message": "покажи документы по этому же договору",
|
||||
"tool_gate_decision": "run_address_lane",
|
||||
"tool_gate_reason": "address_mode_classifier_detected",
|
||||
"answer_structure_v11": null,
|
||||
"investigation_state_snapshot": null,
|
||||
"normalized": null,
|
||||
"normalizer_output": {
|
||||
"trace_id": "8HqWWHl_5_uQpy",
|
||||
"prompt_version": "normalizer_v2_0_2",
|
||||
"applied": true,
|
||||
"effective_message": "Показать документы по указанному договору."
|
||||
}
|
||||
},
|
||||
"error_code": null,
|
||||
"error_message": null
|
||||
}
|
||||
]
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,29 @@
|
|||
# Response Audit: 2026-04-02_Address_Followup_Recheck_PostFix2_17-24-40
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
|
||||
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F014 | False | ok_or_factual | factual | list_documents_by_counterparty | None | раскрой 62 документами на ту же дату | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F015 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | вернись на 2020-12-31 по 60 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F020 | False | blocked_missing_anchor | partial_coverage | list_documents_by_contract | missing_anchor | покажи документы по этому же договору | Для точного адресного поиска не хватает обязательного якоря. |
|
||||
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Followup_Recheck_PostFix2_17-24-40",
|
||||
"generated_at": "2026-04-02T17:26:20",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 25,
|
||||
"ok_200_count": 25,
|
||||
"semantic_pass_count": 24,
|
||||
"semantic_pass_rate": 0.96,
|
||||
"route_pass_count": 23,
|
||||
"route_pass_rate": 0.92,
|
||||
"strict_pass_count": 23,
|
||||
"strict_pass_rate": 0.92,
|
||||
"factual_count": 22,
|
||||
"partial_coverage_count": 3,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 13,
|
||||
"avg_elapsed_ms": 4910.7
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 22,
|
||||
"partial_coverage": 3
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_documents_by_counterparty": 4,
|
||||
"account_balance_snapshot": 9,
|
||||
"documents_forming_balance": 1,
|
||||
"bank_operations_by_counterparty": 2,
|
||||
"list_documents_by_contract": 3,
|
||||
"bank_operations_by_contract": 3,
|
||||
"open_items_by_counterparty_or_contract": 3
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 25
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 22,
|
||||
"no_raw_rows": 2,
|
||||
"skipped": 1
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"empty_match": 2,
|
||||
"missing_anchor": 1
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 22,
|
||||
"partial_non_blocking": 2,
|
||||
"blocked_missing_anchor": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Followup_Recheck_PostFix3_17-32-00
|
||||
|
||||
Generated at: 2026-04-02T17:34:01
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 25
|
||||
- ok_200_count: 25
|
||||
- semantic_pass_count: 25
|
||||
- semantic_pass_rate: 1.0
|
||||
- route_pass_count: 25
|
||||
- route_pass_rate: 1.0
|
||||
- strict_pass_count: 25
|
||||
- strict_pass_rate: 1.0
|
||||
- factual_count: 23
|
||||
- partial_coverage_count: 2
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 14
|
||||
- avg_elapsed_ms: 4875.2
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
|
|
@ -0,0 +1 @@
|
|||
[]
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,29 @@
|
|||
# Response Audit: 2026-04-02_Address_Followup_Recheck_PostFix3_17-32-00
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
|
||||
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F014 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой 62 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| F015 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | вернись на 2020-12-31 по 60 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F020 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по этому же договору | Собран список документов по договору (live address lane). |
|
||||
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Followup_Recheck_PostFix3_17-32-00",
|
||||
"generated_at": "2026-04-02T17:34:01",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 25,
|
||||
"ok_200_count": 25,
|
||||
"semantic_pass_count": 25,
|
||||
"semantic_pass_rate": 1.0,
|
||||
"route_pass_count": 25,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_count": 25,
|
||||
"strict_pass_rate": 1.0,
|
||||
"factual_count": 23,
|
||||
"partial_coverage_count": 2,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 14,
|
||||
"avg_elapsed_ms": 4875.2
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 23,
|
||||
"partial_coverage": 2
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_documents_by_counterparty": 3,
|
||||
"account_balance_snapshot": 9,
|
||||
"documents_forming_balance": 2,
|
||||
"bank_operations_by_counterparty": 2,
|
||||
"list_documents_by_contract": 3,
|
||||
"bank_operations_by_contract": 3,
|
||||
"open_items_by_counterparty_or_contract": 3
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 25
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 23,
|
||||
"no_raw_rows": 2
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"empty_match": 2
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 23,
|
||||
"partial_non_blocking": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Followup_Recheck_PostFix_17-20-05
|
||||
|
||||
Generated at: 2026-04-02T17:21:46
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 25
|
||||
- ok_200_count: 25
|
||||
- semantic_pass_count: 23
|
||||
- semantic_pass_rate: 0.92
|
||||
- route_pass_count: 22
|
||||
- route_pass_rate: 0.88
|
||||
- strict_pass_count: 22
|
||||
- strict_pass_rate: 0.88
|
||||
- factual_count: 23
|
||||
- partial_coverage_count: 2
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 13
|
||||
- avg_elapsed_ms: 4925.8
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,29 @@
|
|||
# Response Audit: 2026-04-02_Address_Followup_Recheck_PostFix_17-20-05
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
|
||||
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F014 | False | ok_or_factual | factual | list_documents_by_counterparty | None | раскрой 62 документами на ту же дату | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F015 | False | ok_or_factual | factual | list_documents_by_counterparty | None | вернись на 2020-12-31 по 60 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F020 | False | blocked_missing_anchor | partial_coverage | list_documents_by_contract | missing_anchor | покажи документы по этому же договору | Для точного адресного поиска не хватает обязательного якоря. |
|
||||
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Followup_Recheck_PostFix_17-20-05",
|
||||
"generated_at": "2026-04-02T17:21:46",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 25,
|
||||
"ok_200_count": 25,
|
||||
"semantic_pass_count": 23,
|
||||
"semantic_pass_rate": 0.92,
|
||||
"route_pass_count": 22,
|
||||
"route_pass_rate": 0.88,
|
||||
"strict_pass_count": 22,
|
||||
"strict_pass_rate": 0.88,
|
||||
"factual_count": 23,
|
||||
"partial_coverage_count": 2,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 13,
|
||||
"avg_elapsed_ms": 4925.8
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 23,
|
||||
"partial_coverage": 2
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_documents_by_counterparty": 5,
|
||||
"account_balance_snapshot": 8,
|
||||
"documents_forming_balance": 1,
|
||||
"bank_operations_by_counterparty": 2,
|
||||
"list_documents_by_contract": 3,
|
||||
"bank_operations_by_contract": 3,
|
||||
"open_items_by_counterparty_or_contract": 3
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 25
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 23,
|
||||
"no_raw_rows": 1,
|
||||
"skipped": 1
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"empty_match": 1,
|
||||
"missing_anchor": 1
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 23,
|
||||
"partial_non_blocking": 1,
|
||||
"blocked_missing_anchor": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Nightly_followup_25_16-45-27
|
||||
|
||||
Generated at: 2026-04-02T16:47:27
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 25
|
||||
- ok_200_count: 25
|
||||
- semantic_pass_count: 25
|
||||
- semantic_pass_rate: 1.0
|
||||
- route_pass_count: 25
|
||||
- route_pass_rate: 1.0
|
||||
- strict_pass_count: 25
|
||||
- strict_pass_rate: 1.0
|
||||
- factual_count: 23
|
||||
- partial_coverage_count: 2
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 13
|
||||
- avg_elapsed_ms: 4794
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
|
|
@ -0,0 +1 @@
|
|||
[]
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,29 @@
|
|||
# Response Audit: 2026-04-02_Address_Nightly_followup_25_16-45-27
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
|
||||
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F014 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой 62 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| F015 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | вернись на 2020-12-31 по 60 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F020 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по этому же договору | Собран список документов по договору (live address lane). |
|
||||
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_16-45-27",
|
||||
"generated_at": "2026-04-02T16:47:27",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 25,
|
||||
"ok_200_count": 25,
|
||||
"semantic_pass_count": 25,
|
||||
"semantic_pass_rate": 1.0,
|
||||
"route_pass_count": 25,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_count": 25,
|
||||
"strict_pass_rate": 1.0,
|
||||
"factual_count": 23,
|
||||
"partial_coverage_count": 2,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 13,
|
||||
"avg_elapsed_ms": 4794
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 23,
|
||||
"partial_coverage": 2
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_documents_by_counterparty": 3,
|
||||
"account_balance_snapshot": 9,
|
||||
"documents_forming_balance": 2,
|
||||
"bank_operations_by_counterparty": 2,
|
||||
"list_documents_by_contract": 3,
|
||||
"bank_operations_by_contract": 3,
|
||||
"open_items_by_counterparty_or_contract": 3
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 25
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 23,
|
||||
"no_raw_rows": 2
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"empty_match": 2
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 23,
|
||||
"partial_non_blocking": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T16:47:27",
|
||||
"overall_pass": true,
|
||||
"baseline": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5",
|
||||
"questions_total": 25,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"candidate": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_followup_25_16-45-27\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_16-45-27",
|
||||
"questions_total": 25,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"metric": "strict_pass_rate",
|
||||
"passed": true,
|
||||
"baseline": 1.0,
|
||||
"candidate": 1.0,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "route_pass_rate",
|
||||
"passed": true,
|
||||
"baseline": 1.0,
|
||||
"candidate": 1.0,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "execution_error_count",
|
||||
"passed": true,
|
||||
"baseline": 0,
|
||||
"candidate": 0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "false_factual_rate",
|
||||
"passed": true,
|
||||
"baseline": 0.0,
|
||||
"candidate": 0.0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "questions_total_match",
|
||||
"passed": true,
|
||||
"baseline": 25,
|
||||
"candidate": 25,
|
||||
"rule": "candidate == baseline"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T16:47:27",
|
||||
"total": 1,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"results": [
|
||||
{
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_followup_25_16-45-27",
|
||||
"valid": true,
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"metrics": {
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_16-45-27",
|
||||
"questions_total": 25,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_rate": 1.0,
|
||||
"http_error_count": 0,
|
||||
"rows_count": 25,
|
||||
"failures_count": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Nightly_stress_102_16-35-15
|
||||
|
||||
Generated at: 2026-04-02T16:45:27
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_slang_stress_full_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 102
|
||||
- ok_200_count: 102
|
||||
- semantic_pass_count: 102
|
||||
- semantic_pass_rate: 1.0
|
||||
- route_pass_count: 102
|
||||
- route_pass_rate: 1.0
|
||||
- strict_pass_count: 102
|
||||
- strict_pass_rate: 1.0
|
||||
- factual_count: 97
|
||||
- partial_coverage_count: 5
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 78
|
||||
- avg_elapsed_ms: 5992.8
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
|
|
@ -0,0 +1 @@
|
|||
[]
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,106 @@
|
|||
# Response Audit: 2026-04-02_Address_Nightly_stress_102_16-35-15
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| S001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки за 2020 покаж пж | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | покеж все доки по свк за 20 год | Собран список документов по контрагенту (live address lane). |
|
||||
| S003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | дай список документов по свк за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие у свк есть доки за 2020? | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | че по свк по докам за 2020 год | Собран список документов по контрагенту (live address lane). |
|
||||
| S006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | ёпт покажи доки по свк за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S007 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля, доки свк 2020 вывали | Собран список документов по контрагенту (live address lane). |
|
||||
| S008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk docs for 2020 please | Собран список документов по контрагенту (live address lane). |
|
||||
| S009 | True | ok_or_factual | factual | list_documents_by_counterparty | None | docs by counterparty svk year 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S010 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по контрагенту свк покаж документы за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S011 | True | ok_or_factual | factual | list_documents_by_counterparty | None | плс доки по свк 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S012 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк док за 2020 гони | Собран список документов по контрагенту (live address lane). |
|
||||
| S013 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк банковские операции за 2020 покаж | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S014 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк выписка банка 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S015 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | платежи по свк за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S016 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | оплаты по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S017 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк опер за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S018 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | че у свк по банку за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S019 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк списания/поступления за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S020 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops by svk for 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S021 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | transactions by counterparty svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S022 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | бля, по свк банковские платежки 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S023 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо по счету 60.01 на дату 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S024 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по счету 60.01 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S025 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи остаток по 60.01 за май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S026 | True | ok_or_factual | factual | account_balance_snapshot | None | счет 60 остаток на май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S027 | True | ok_or_factual | factual | account_balance_snapshot | None | баланс account 60.01 as of 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S028 | True | ok_or_factual | factual | account_balance_snapshot | None | 60.01 saldo на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S029 | True | ok_or_factual | factual | account_balance_snapshot | None | сколько на счете 60 на конец 2020-05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S030 | True | ok_or_factual | factual | account_balance_snapshot | None | дай остаток 60.02 на 2020-12-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S031 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | епт, сальдо по счету 62.01 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| S032 | True | ok_or_factual | factual | account_balance_snapshot | None | плс остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S033 | True | ok_or_factual | factual | account_balance_snapshot | None | как там по счету 60.01 на 2020.07? | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S034 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60 на 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S035 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по счету 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S036 | True | ok_or_factual | factual | documents_forming_balance | None | из чего состоит остаток по счету 60 на 2020.05 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S037 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S038 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S039 | True | ok_or_factual | factual | documents_forming_balance | None | documents forming balance for account 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S040 | True | ok_or_factual | factual | documents_forming_balance | None | бля, какие доки формируют остаток 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S041 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | по счету 62.01 раскрой остаток документами на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| S042 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток по счету 51 на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S043 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| S044 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по дог. 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| S045 | True | ok_or_factual | factual | list_documents_by_contract | None | какие документы по контракту 19/15 | Собран список документов по договору (live address lane). |
|
||||
| S046 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 year 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| S047 | True | ok_or_factual | factual | list_documents_by_contract | None | бля, покажи по договору 19/15 доки | Собран список документов по договору (live address lane). |
|
||||
| S048 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 документы | Собран список документов по договору (live address lane). |
|
||||
| S049 | True | ok_or_factual | factual | list_documents_by_contract | None | плс документы договор №19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S050 | True | ok_or_factual | factual | list_documents_by_contract | None | покеж документы по 19/15 | Собран список документов по договору (live address lane). |
|
||||
| S051 | True | ok_or_factual | factual | bank_operations_by_contract | None | банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S052 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежи по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S053 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S054 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S055 | True | ok_or_factual | factual | bank_operations_by_contract | None | ёпт, покажи банк операции по дог 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S056 | True | ok_or_factual | factual | bank_operations_by_contract | None | по контракту 19/15 платежки | Собран список банковских операций по договору (live address lane). |
|
||||
| S057 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S058 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S059 | True | ok_or_factual | factual | account_balance_snapshot | None | ок, теперь 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S060 | True | ok_or_factual | factual | account_balance_snapshot | None | теперь на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки кинь за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по свк все документы за 20й год | Собран список документов по контрагенту (live address lane). |
|
||||
| X003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | пж вывали доки контрагент свк 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| X004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk poka docy za 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| X005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие доки по компании свк за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| X006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля покаж свк документы 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк операции за 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| X008 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк выписку банка за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| X009 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк платежки за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X010 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| X011 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | транзакции по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| X012 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | ёпт по свк че по банку 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X013 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по 60.01 на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X014 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60.01 на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X015 | True | ok_or_factual | factual | account_balance_snapshot | None | что на счете 60 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X016 | True | ok_or_factual | factual | account_balance_snapshot | None | дай остаток 62.01 на 2020 май | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X017 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | saldo account 60 as of 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| X018 | True | ok_or_factual | factual | account_balance_snapshot | None | плиз остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X019 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | скока по 60.02 на конец 2020-12 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| X020 | True | ok_or_factual | factual | account_balance_snapshot | None | бля сальдо 60.01 на 2020-05-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X021 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X022 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X023 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X024 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X025 | True | ok_or_factual | factual | documents_forming_balance | None | docs forming balance 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X026 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | раскидай остаток 62.01 по докам на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| X027 | True | ok_or_factual | factual | documents_forming_balance | None | по счету 51 раскрой остаток документами на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X028 | True | ok_or_factual | factual | documents_forming_balance | None | бля из чего состоит остаток по 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X029 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| X030 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы контракт 19/15 | Собран список документов по договору (live address lane). |
|
||||
| X031 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| X032 | True | ok_or_factual | factual | list_documents_by_contract | None | по дог 19/15 какие документы | Собран список документов по договору (live address lane). |
|
||||
| X033 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 выведи доки | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X034 | True | ok_or_factual | factual | list_documents_by_contract | None | нах покажи документы по 19/15 | Собран список документов по договору (live address lane). |
|
||||
| X035 | True | ok_or_factual | factual | bank_operations_by_contract | None | банк операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X036 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежки по дог 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X037 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по контракту 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X038 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X039 | True | ok_or_factual | factual | bank_operations_by_contract | None | покажи банк опер по дог 19/15 пж | Собран список банковских операций по договору (live address lane). |
|
||||
| X040 | True | ok_or_factual | factual | bank_operations_by_contract | None | епт транзакции договор 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X041 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X042 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_16-35-15",
|
||||
"generated_at": "2026-04-02T16:45:27",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 102,
|
||||
"ok_200_count": 102,
|
||||
"semantic_pass_count": 102,
|
||||
"semantic_pass_rate": 1.0,
|
||||
"route_pass_count": 102,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_count": 102,
|
||||
"strict_pass_rate": 1.0,
|
||||
"factual_count": 97,
|
||||
"partial_coverage_count": 5,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 78,
|
||||
"avg_elapsed_ms": 5992.8
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 97,
|
||||
"partial_coverage": 5
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_documents_by_counterparty": 18,
|
||||
"bank_operations_by_counterparty": 16,
|
||||
"account_balance_snapshot": 26,
|
||||
"documents_forming_balance": 16,
|
||||
"list_documents_by_contract": 14,
|
||||
"bank_operations_by_contract": 12
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 102
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 97,
|
||||
"no_raw_rows": 5
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"empty_match": 5
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 97,
|
||||
"partial_non_blocking": 5
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T16:45:27",
|
||||
"overall_pass": true,
|
||||
"baseline": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27",
|
||||
"questions_total": 102,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"candidate": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_stress_102_16-35-15\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_16-35-15",
|
||||
"questions_total": 102,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"metric": "strict_pass_rate",
|
||||
"passed": true,
|
||||
"baseline": 1.0,
|
||||
"candidate": 1.0,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "route_pass_rate",
|
||||
"passed": true,
|
||||
"baseline": 1.0,
|
||||
"candidate": 1.0,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "execution_error_count",
|
||||
"passed": true,
|
||||
"baseline": 0,
|
||||
"candidate": 0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "false_factual_rate",
|
||||
"passed": true,
|
||||
"baseline": 0.0,
|
||||
"candidate": 0.0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "questions_total_match",
|
||||
"passed": true,
|
||||
"baseline": 102,
|
||||
"candidate": 102,
|
||||
"rule": "candidate == baseline"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T16:45:27",
|
||||
"total": 1,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"results": [
|
||||
{
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_stress_102_16-35-15",
|
||||
"valid": true,
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"metrics": {
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_16-35-15",
|
||||
"questions_total": 102,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_rate": 1.0,
|
||||
"http_error_count": 0,
|
||||
"rows_count": 102,
|
||||
"failures_count": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# 2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15
|
||||
|
||||
Generated at: 2026-04-02T16:47:27
|
||||
Dry run: False
|
||||
Strict policy: route
|
||||
Overall: PASS
|
||||
|
||||
## Packs
|
||||
### stress_102
|
||||
- run_id: 2026-04-02_Address_Nightly_stress_102_16-35-15
|
||||
- runner_ok: True
|
||||
- validator_ok: True
|
||||
- comparator_ok: True
|
||||
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\2026-04-02_Address_Nightly_stress_102_16-35-15
|
||||
|
||||
### followup_25
|
||||
- run_id: 2026-04-02_Address_Nightly_followup_25_16-45-27
|
||||
- runner_ok: True
|
||||
- validator_ok: True
|
||||
- comparator_ok: True
|
||||
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\2026-04-02_Address_Nightly_followup_25_16-45-27
|
||||
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"nightly_run_id": "2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15",
|
||||
"generated_at": "2026-04-02T16:47:27",
|
||||
"dry_run": false,
|
||||
"overall_ok": true,
|
||||
"strict_policy": "route",
|
||||
"packs": [
|
||||
{
|
||||
"pack": "stress_102",
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_16-35-15",
|
||||
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
|
||||
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_stress_102_16-35-15",
|
||||
"runner_ok": true,
|
||||
"validator_ok": true,
|
||||
"comparator_ok": true,
|
||||
"errors": [],
|
||||
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_stress_102_16-35-15_validator_report.json",
|
||||
"comparator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_stress_102_16-35-15_comparator_report.json"
|
||||
},
|
||||
{
|
||||
"pack": "followup_25",
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_16-45-27",
|
||||
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
|
||||
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_followup_25_16-45-27",
|
||||
"runner_ok": true,
|
||||
"validator_ok": true,
|
||||
"comparator_ok": true,
|
||||
"errors": [],
|
||||
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_followup_25_16-45-27_validator_report.json",
|
||||
"comparator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_followup_25_16-45-27_comparator_report.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Nightly_followup_25_17-10-13
|
||||
|
||||
Generated at: 2026-04-02T17:12:20
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 25
|
||||
- ok_200_count: 25
|
||||
- semantic_pass_count: 23
|
||||
- semantic_pass_rate: 0.92
|
||||
- route_pass_count: 23
|
||||
- route_pass_rate: 0.92
|
||||
- strict_pass_count: 23
|
||||
- strict_pass_rate: 0.92
|
||||
- factual_count: 24
|
||||
- partial_coverage_count: 1
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 13
|
||||
- avg_elapsed_ms: 5077.5
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,29 @@
|
|||
# Response Audit: 2026-04-02_Address_Nightly_followup_25_17-10-13
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
|
||||
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F014 | False | ok_or_factual | factual | list_documents_by_counterparty | None | раскрой 62 документами на ту же дату | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F015 | False | ok_or_factual | factual | list_documents_by_counterparty | None | вернись на 2020-12-31 по 60 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F020 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по этому же договору | Собран список документов по договору (live address lane). |
|
||||
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_17-10-13",
|
||||
"generated_at": "2026-04-02T17:12:20",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 25,
|
||||
"ok_200_count": 25,
|
||||
"semantic_pass_count": 23,
|
||||
"semantic_pass_rate": 0.92,
|
||||
"route_pass_count": 23,
|
||||
"route_pass_rate": 0.92,
|
||||
"strict_pass_count": 23,
|
||||
"strict_pass_rate": 0.92,
|
||||
"factual_count": 24,
|
||||
"partial_coverage_count": 1,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 13,
|
||||
"avg_elapsed_ms": 5077.5
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 24,
|
||||
"partial_coverage": 1
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_documents_by_counterparty": 5,
|
||||
"account_balance_snapshot": 8,
|
||||
"documents_forming_balance": 1,
|
||||
"bank_operations_by_counterparty": 2,
|
||||
"list_documents_by_contract": 3,
|
||||
"bank_operations_by_contract": 3,
|
||||
"open_items_by_counterparty_or_contract": 3
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 25
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 24,
|
||||
"no_raw_rows": 1
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"empty_match": 1
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 24,
|
||||
"partial_non_blocking": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T17:12:20",
|
||||
"overall_pass": false,
|
||||
"baseline": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5",
|
||||
"questions_total": 25,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"candidate": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_followup_25_17-10-13\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_17-10-13",
|
||||
"questions_total": 25,
|
||||
"strict_pass_rate": 0.92,
|
||||
"route_pass_rate": 0.92,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"metric": "strict_pass_rate",
|
||||
"passed": false,
|
||||
"baseline": 1.0,
|
||||
"candidate": 0.92,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "route_pass_rate",
|
||||
"passed": false,
|
||||
"baseline": 1.0,
|
||||
"candidate": 0.92,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "execution_error_count",
|
||||
"passed": true,
|
||||
"baseline": 0,
|
||||
"candidate": 0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "false_factual_rate",
|
||||
"passed": true,
|
||||
"baseline": 0.0,
|
||||
"candidate": 0.0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "questions_total_match",
|
||||
"passed": true,
|
||||
"baseline": 25,
|
||||
"candidate": 25,
|
||||
"rule": "candidate == baseline"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T17:12:20",
|
||||
"total": 1,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"results": [
|
||||
{
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_followup_25_17-10-13",
|
||||
"valid": true,
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"metrics": {
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_17-10-13",
|
||||
"questions_total": 25,
|
||||
"route_pass_rate": 0.92,
|
||||
"strict_pass_rate": 0.92,
|
||||
"http_error_count": 0,
|
||||
"rows_count": 25,
|
||||
"failures_count": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Nightly_stress_102_16-59-46
|
||||
|
||||
Generated at: 2026-04-02T17:10:13
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_slang_stress_full_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 102
|
||||
- ok_200_count: 102
|
||||
- semantic_pass_count: 102
|
||||
- semantic_pass_rate: 1.0
|
||||
- route_pass_count: 102
|
||||
- route_pass_rate: 1.0
|
||||
- strict_pass_count: 102
|
||||
- strict_pass_rate: 1.0
|
||||
- factual_count: 96
|
||||
- partial_coverage_count: 6
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 75
|
||||
- avg_elapsed_ms: 6142.3
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
|
|
@ -0,0 +1 @@
|
|||
[]
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,106 @@
|
|||
# Response Audit: 2026-04-02_Address_Nightly_stress_102_16-59-46
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| S001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки за 2020 покаж пж | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | покеж все доки по свк за 20 год | Собран список документов по контрагенту (live address lane). |
|
||||
| S003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | дай список документов по свк за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие у свк есть доки за 2020? | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | че по свк по докам за 2020 год | Собран список документов по контрагенту (live address lane). |
|
||||
| S006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | ёпт покажи доки по свк за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S007 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля, доки свк 2020 вывали | Собран список документов по контрагенту (live address lane). |
|
||||
| S008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk docs for 2020 please | Собран список документов по контрагенту (live address lane). |
|
||||
| S009 | True | ok_or_factual | factual | list_documents_by_counterparty | None | docs by counterparty svk year 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S010 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по контрагенту свк покаж документы за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S011 | True | ok_or_factual | factual | list_documents_by_counterparty | None | плс доки по свк 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S012 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк док за 2020 гони | Собран список документов по контрагенту (live address lane). |
|
||||
| S013 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк банковские операции за 2020 покаж | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S014 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк выписка банка 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S015 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | платежи по свк за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S016 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | оплаты по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S017 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк опер за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S018 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | че у свк по банку за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S019 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк списания/поступления за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S020 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops by svk for 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S021 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | transactions by counterparty svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S022 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | бля, по свк банковские платежки 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S023 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо по счету 60.01 на дату 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S024 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по счету 60.01 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S025 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи остаток по 60.01 за май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S026 | True | ok_or_factual | factual | account_balance_snapshot | None | счет 60 остаток на май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S027 | True | ok_or_factual | factual | account_balance_snapshot | None | баланс account 60.01 as of 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S028 | True | ok_or_factual | factual | account_balance_snapshot | None | 60.01 saldo на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S029 | True | ok_or_factual | factual | account_balance_snapshot | None | сколько на счете 60 на конец 2020-05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S030 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | дай остаток 60.02 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| S031 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | епт, сальдо по счету 62.01 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| S032 | True | ok_or_factual | factual | account_balance_snapshot | None | плс остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S033 | True | ok_or_factual | factual | account_balance_snapshot | None | как там по счету 60.01 на 2020.07? | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S034 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60 на 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S035 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по счету 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S036 | True | ok_or_factual | factual | documents_forming_balance | None | из чего состоит остаток по счету 60 на 2020.05 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S037 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S038 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S039 | True | ok_or_factual | factual | documents_forming_balance | None | documents forming balance for account 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S040 | True | ok_or_factual | factual | documents_forming_balance | None | бля, какие доки формируют остаток 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S041 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | по счету 62.01 раскрой остаток документами на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| S042 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток по счету 51 на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S043 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| S044 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по дог. 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| S045 | True | ok_or_factual | factual | list_documents_by_contract | None | какие документы по контракту 19/15 | Собран список документов по договору (live address lane). |
|
||||
| S046 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 year 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| S047 | True | ok_or_factual | factual | list_documents_by_contract | None | бля, покажи по договору 19/15 доки | Собран список документов по договору (live address lane). |
|
||||
| S048 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 документы | Собран список документов по договору (live address lane). |
|
||||
| S049 | True | ok_or_factual | factual | list_documents_by_contract | None | плс документы договор №19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S050 | True | ok_or_factual | factual | list_documents_by_contract | None | покеж документы по 19/15 | Собран список документов по договору (live address lane). |
|
||||
| S051 | True | ok_or_factual | factual | bank_operations_by_contract | None | банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S052 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежи по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S053 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S054 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S055 | True | ok_or_factual | factual | bank_operations_by_contract | None | ёпт, покажи банк операции по дог 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S056 | True | ok_or_factual | factual | bank_operations_by_contract | None | по контракту 19/15 платежки | Собран список банковских операций по договору (live address lane). |
|
||||
| S057 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S058 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S059 | True | ok_or_factual | factual | account_balance_snapshot | None | ок, теперь 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S060 | True | ok_or_factual | factual | account_balance_snapshot | None | теперь на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки кинь за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по свк все документы за 20й год | Собран список документов по контрагенту (live address lane). |
|
||||
| X003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | пж вывали доки контрагент свк 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| X004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk poka docy za 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| X005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие доки по компании свк за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| X006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля покаж свк документы 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк операции за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X008 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк выписку банка за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| X009 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк платежки за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X010 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| X011 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | транзакции по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| X012 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | ёпт по свк че по банку 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X013 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по 60.01 на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X014 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60.01 на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X015 | True | ok_or_factual | factual | account_balance_snapshot | None | что на счете 60 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X016 | True | ok_or_factual | factual | account_balance_snapshot | None | дай остаток 62.01 на 2020 май | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X017 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | saldo account 60 as of 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| X018 | True | ok_or_factual | factual | account_balance_snapshot | None | плиз остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X019 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | скока по 60.02 на конец 2020-12 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| X020 | True | ok_or_factual | factual | account_balance_snapshot | None | бля сальдо 60.01 на 2020-05-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X021 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X022 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X023 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X024 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X025 | True | ok_or_factual | factual | documents_forming_balance | None | docs forming balance 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X026 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | раскидай остаток 62.01 по докам на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| X027 | True | ok_or_factual | factual | documents_forming_balance | None | по счету 51 раскрой остаток документами на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X028 | True | ok_or_factual | factual | documents_forming_balance | None | бля из чего состоит остаток по 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X029 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| X030 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы контракт 19/15 | Собран список документов по договору (live address lane). |
|
||||
| X031 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| X032 | True | ok_or_factual | factual | list_documents_by_contract | None | по дог 19/15 какие документы | Собран список документов по договору (live address lane). |
|
||||
| X033 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 выведи доки | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X034 | True | ok_or_factual | factual | list_documents_by_contract | None | нах покажи документы по 19/15 | Собран список документов по договору (live address lane). |
|
||||
| X035 | True | ok_or_factual | factual | bank_operations_by_contract | None | банк операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X036 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежки по дог 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X037 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по контракту 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X038 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X039 | True | ok_or_factual | factual | bank_operations_by_contract | None | покажи банк опер по дог 19/15 пж | Собран список банковских операций по договору (live address lane). |
|
||||
| X040 | True | ok_or_factual | factual | bank_operations_by_contract | None | епт транзакции договор 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X041 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X042 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_16-59-46",
|
||||
"generated_at": "2026-04-02T17:10:13",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 102,
|
||||
"ok_200_count": 102,
|
||||
"semantic_pass_count": 102,
|
||||
"semantic_pass_rate": 1.0,
|
||||
"route_pass_count": 102,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_count": 102,
|
||||
"strict_pass_rate": 1.0,
|
||||
"factual_count": 96,
|
||||
"partial_coverage_count": 6,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 75,
|
||||
"avg_elapsed_ms": 6142.3
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 96,
|
||||
"partial_coverage": 6
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_documents_by_counterparty": 18,
|
||||
"bank_operations_by_counterparty": 16,
|
||||
"account_balance_snapshot": 26,
|
||||
"documents_forming_balance": 16,
|
||||
"list_documents_by_contract": 14,
|
||||
"bank_operations_by_contract": 12
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 102
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 96,
|
||||
"no_raw_rows": 6
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"empty_match": 6
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 96,
|
||||
"partial_non_blocking": 6
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T17:10:13",
|
||||
"overall_pass": true,
|
||||
"baseline": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27",
|
||||
"questions_total": 102,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"candidate": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_stress_102_16-59-46\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_16-59-46",
|
||||
"questions_total": 102,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"metric": "strict_pass_rate",
|
||||
"passed": true,
|
||||
"baseline": 1.0,
|
||||
"candidate": 1.0,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "route_pass_rate",
|
||||
"passed": true,
|
||||
"baseline": 1.0,
|
||||
"candidate": 1.0,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "execution_error_count",
|
||||
"passed": true,
|
||||
"baseline": 0,
|
||||
"candidate": 0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "false_factual_rate",
|
||||
"passed": true,
|
||||
"baseline": 0.0,
|
||||
"candidate": 0.0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "questions_total_match",
|
||||
"passed": true,
|
||||
"baseline": 102,
|
||||
"candidate": 102,
|
||||
"rule": "candidate == baseline"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T17:10:13",
|
||||
"total": 1,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"results": [
|
||||
{
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_stress_102_16-59-46",
|
||||
"valid": true,
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"metrics": {
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_16-59-46",
|
||||
"questions_total": 102,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_rate": 1.0,
|
||||
"http_error_count": 0,
|
||||
"rows_count": 102,
|
||||
"failures_count": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
# 2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46
|
||||
|
||||
Generated at: 2026-04-02T17:12:20
|
||||
Dry run: False
|
||||
Strict policy: route
|
||||
Overall: FAIL
|
||||
|
||||
## Packs
|
||||
### stress_102
|
||||
- run_id: 2026-04-02_Address_Nightly_stress_102_16-59-46
|
||||
- runner_ok: True
|
||||
- validator_ok: True
|
||||
- comparator_ok: True
|
||||
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\2026-04-02_Address_Nightly_stress_102_16-59-46
|
||||
|
||||
### followup_25
|
||||
- run_id: 2026-04-02_Address_Nightly_followup_25_17-10-13
|
||||
- runner_ok: True
|
||||
- validator_ok: True
|
||||
- comparator_ok: False
|
||||
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\2026-04-02_Address_Nightly_followup_25_17-10-13
|
||||
- errors:
|
||||
- comparator failed with exit code 1
|
||||
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"nightly_run_id": "2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46",
|
||||
"generated_at": "2026-04-02T17:12:20",
|
||||
"dry_run": false,
|
||||
"overall_ok": false,
|
||||
"strict_policy": "route",
|
||||
"packs": [
|
||||
{
|
||||
"pack": "stress_102",
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_16-59-46",
|
||||
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
|
||||
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_stress_102_16-59-46",
|
||||
"runner_ok": true,
|
||||
"validator_ok": true,
|
||||
"comparator_ok": true,
|
||||
"errors": [],
|
||||
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_stress_102_16-59-46_validator_report.json",
|
||||
"comparator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_stress_102_16-59-46_comparator_report.json"
|
||||
},
|
||||
{
|
||||
"pack": "followup_25",
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_17-10-13",
|
||||
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
|
||||
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_followup_25_17-10-13",
|
||||
"runner_ok": true,
|
||||
"validator_ok": true,
|
||||
"comparator_ok": false,
|
||||
"errors": [
|
||||
"comparator failed with exit code 1"
|
||||
],
|
||||
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_followup_25_17-10-13_validator_report.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Nightly_followup_25_17-44-41
|
||||
|
||||
Generated at: 2026-04-02T17:46:43
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 25
|
||||
- ok_200_count: 25
|
||||
- semantic_pass_count: 25
|
||||
- semantic_pass_rate: 1.0
|
||||
- route_pass_count: 25
|
||||
- route_pass_rate: 1.0
|
||||
- strict_pass_count: 25
|
||||
- strict_pass_rate: 1.0
|
||||
- factual_count: 23
|
||||
- partial_coverage_count: 2
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 14
|
||||
- avg_elapsed_ms: 4880.4
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
|
|
@ -0,0 +1 @@
|
|||
[]
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,29 @@
|
|||
# Response Audit: 2026-04-02_Address_Nightly_followup_25_17-44-41
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
|
||||
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F014 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой 62 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| F015 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | вернись на 2020-12-31 по 60 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F020 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по этому же договору | Собран список документов по договору (live address lane). |
|
||||
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_17-44-41",
|
||||
"generated_at": "2026-04-02T17:46:43",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 25,
|
||||
"ok_200_count": 25,
|
||||
"semantic_pass_count": 25,
|
||||
"semantic_pass_rate": 1.0,
|
||||
"route_pass_count": 25,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_count": 25,
|
||||
"strict_pass_rate": 1.0,
|
||||
"factual_count": 23,
|
||||
"partial_coverage_count": 2,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 14,
|
||||
"avg_elapsed_ms": 4880.4
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 23,
|
||||
"partial_coverage": 2
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_documents_by_counterparty": 3,
|
||||
"account_balance_snapshot": 9,
|
||||
"documents_forming_balance": 2,
|
||||
"bank_operations_by_counterparty": 2,
|
||||
"list_documents_by_contract": 3,
|
||||
"bank_operations_by_contract": 3,
|
||||
"open_items_by_counterparty_or_contract": 3
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 25
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 23,
|
||||
"no_raw_rows": 2
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"empty_match": 2
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 23,
|
||||
"partial_non_blocking": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T17:46:43",
|
||||
"overall_pass": true,
|
||||
"baseline": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5",
|
||||
"questions_total": 25,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"candidate": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_followup_25_17-44-41\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_17-44-41",
|
||||
"questions_total": 25,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"metric": "strict_pass_rate",
|
||||
"passed": true,
|
||||
"baseline": 1.0,
|
||||
"candidate": 1.0,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "route_pass_rate",
|
||||
"passed": true,
|
||||
"baseline": 1.0,
|
||||
"candidate": 1.0,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "execution_error_count",
|
||||
"passed": true,
|
||||
"baseline": 0,
|
||||
"candidate": 0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "false_factual_rate",
|
||||
"passed": true,
|
||||
"baseline": 0.0,
|
||||
"candidate": 0.0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "questions_total_match",
|
||||
"passed": true,
|
||||
"baseline": 25,
|
||||
"candidate": 25,
|
||||
"rule": "candidate == baseline"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T17:46:43",
|
||||
"total": 1,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"results": [
|
||||
{
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_followup_25_17-44-41",
|
||||
"valid": true,
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"metrics": {
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_17-44-41",
|
||||
"questions_total": 25,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_rate": 1.0,
|
||||
"http_error_count": 0,
|
||||
"rows_count": 25,
|
||||
"failures_count": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_Nightly_stress_102_17-34-13
|
||||
|
||||
Generated at: 2026-04-02T17:44:41
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_slang_stress_full_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 102
|
||||
- ok_200_count: 102
|
||||
- semantic_pass_count: 102
|
||||
- semantic_pass_rate: 1.0
|
||||
- route_pass_count: 102
|
||||
- route_pass_rate: 1.0
|
||||
- strict_pass_count: 102
|
||||
- strict_pass_rate: 1.0
|
||||
- factual_count: 96
|
||||
- partial_coverage_count: 6
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 80
|
||||
- avg_elapsed_ms: 6159.6
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
|
|
@ -0,0 +1 @@
|
|||
[]
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,106 @@
|
|||
# Response Audit: 2026-04-02_Address_Nightly_stress_102_17-34-13
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| S001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки за 2020 покаж пж | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | покеж все доки по свк за 20 год | Собран список документов по контрагенту (live address lane). |
|
||||
| S003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | дай список документов по свк за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие у свк есть доки за 2020? | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | че по свк по докам за 2020 год | Собран список документов по контрагенту (live address lane). |
|
||||
| S006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | ёпт покажи доки по свк за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S007 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля, доки свк 2020 вывали | Собран список документов по контрагенту (live address lane). |
|
||||
| S008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk docs for 2020 please | Собран список документов по контрагенту (live address lane). |
|
||||
| S009 | True | ok_or_factual | factual | list_documents_by_counterparty | None | docs by counterparty svk year 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S010 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по контрагенту свк покаж документы за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| S011 | True | ok_or_factual | factual | list_documents_by_counterparty | None | плс доки по свк 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S012 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк док за 2020 гони | Собран список документов по контрагенту (live address lane). |
|
||||
| S013 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк банковские операции за 2020 покаж | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S014 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк выписка банка 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S015 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | платежи по свк за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S016 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | оплаты по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S017 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк опер за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S018 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | че у свк по банку за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S019 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк списания/поступления за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S020 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops by svk for 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S021 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | transactions by counterparty svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S022 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | бля, по свк банковские платежки 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| S023 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо по счету 60.01 на дату 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S024 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по счету 60.01 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S025 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи остаток по 60.01 за май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S026 | True | ok_or_factual | factual | account_balance_snapshot | None | счет 60 остаток на май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S027 | True | ok_or_factual | factual | account_balance_snapshot | None | баланс account 60.01 as of 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S028 | True | ok_or_factual | factual | account_balance_snapshot | None | 60.01 saldo на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S029 | True | ok_or_factual | factual | account_balance_snapshot | None | сколько на счете 60 на конец 2020-05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S030 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | дай остаток 60.02 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| S031 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | епт, сальдо по счету 62.01 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| S032 | True | ok_or_factual | factual | account_balance_snapshot | None | плс остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S033 | True | ok_or_factual | factual | account_balance_snapshot | None | как там по счету 60.01 на 2020.07? | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S034 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60 на 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S035 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по счету 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S036 | True | ok_or_factual | factual | documents_forming_balance | None | из чего состоит остаток по счету 60 на 2020.05 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S037 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S038 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S039 | True | ok_or_factual | factual | documents_forming_balance | None | documents forming balance for account 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S040 | True | ok_or_factual | factual | documents_forming_balance | None | бля, какие доки формируют остаток 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S041 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | по счету 62.01 раскрой остаток документами на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| S042 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток по счету 51 на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| S043 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| S044 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по дог. 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| S045 | True | ok_or_factual | factual | list_documents_by_contract | None | какие документы по контракту 19/15 | Собран список документов по договору (live address lane). |
|
||||
| S046 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 year 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| S047 | True | ok_or_factual | factual | list_documents_by_contract | None | бля, покажи по договору 19/15 доки | Собран список документов по договору (live address lane). |
|
||||
| S048 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 документы | Собран список документов по договору (live address lane). |
|
||||
| S049 | True | ok_or_factual | factual | list_documents_by_contract | None | плс документы договор №19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S050 | True | ok_or_factual | factual | list_documents_by_contract | None | покеж документы по 19/15 | Собран список документов по договору (live address lane). |
|
||||
| S051 | True | ok_or_factual | factual | bank_operations_by_contract | None | банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S052 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежи по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S053 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S054 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| S055 | True | ok_or_factual | factual | bank_operations_by_contract | None | ёпт, покажи банк операции по дог 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| S056 | True | ok_or_factual | factual | bank_operations_by_contract | None | по контракту 19/15 платежки | Собран список банковских операций по договору (live address lane). |
|
||||
| S057 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S058 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S059 | True | ok_or_factual | factual | account_balance_snapshot | None | ок, теперь 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| S060 | True | ok_or_factual | factual | account_balance_snapshot | None | теперь на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки кинь за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по свк все документы за 20й год | Собран список документов по контрагенту (live address lane). |
|
||||
| X003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | пж вывали доки контрагент свк 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| X004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk poka docy za 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| X005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие доки по компании свк за 2020 | Собран список документов по контрагенту (live address lane). |
|
||||
| X006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля покаж свк документы 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк операции за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X008 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк выписку банка за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| X009 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк платежки за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X010 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| X011 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | транзакции по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
|
||||
| X012 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | ёпт по свк че по банку 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X013 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по 60.01 на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X014 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60.01 на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X015 | True | ok_or_factual | factual | account_balance_snapshot | None | что на счете 60 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X016 | True | ok_or_factual | factual | account_balance_snapshot | None | дай остаток 62.01 на 2020 май | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X017 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | saldo account 60 as of 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| X018 | True | ok_or_factual | factual | account_balance_snapshot | None | плиз остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X019 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | скока по 60.02 на конец 2020-12 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| X020 | True | ok_or_factual | factual | account_balance_snapshot | None | бля сальдо 60.01 на 2020-05-31 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X021 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X022 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X023 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X024 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X025 | True | ok_or_factual | factual | documents_forming_balance | None | docs forming balance 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X026 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | раскидай остаток 62.01 по докам на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
|
||||
| X027 | True | ok_or_factual | factual | documents_forming_balance | None | по счету 51 раскрой остаток документами на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X028 | True | ok_or_factual | factual | documents_forming_balance | None | бля из чего состоит остаток по 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
|
||||
| X029 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| X030 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы контракт 19/15 | Собран список документов по договору (live address lane). |
|
||||
| X031 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| X032 | True | ok_or_factual | factual | list_documents_by_contract | None | по дог 19/15 какие документы | Собран список документов по договору (live address lane). |
|
||||
| X033 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 выведи доки | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X034 | True | ok_or_factual | factual | list_documents_by_contract | None | нах покажи документы по 19/15 | Собран список документов по договору (live address lane). |
|
||||
| X035 | True | ok_or_factual | factual | bank_operations_by_contract | None | банк операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X036 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежки по дог 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X037 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по контракту 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X038 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
|
||||
| X039 | True | ok_or_factual | factual | bank_operations_by_contract | None | покажи банк опер по дог 19/15 пж | Собран список банковских операций по договору (live address lane). |
|
||||
| X040 | True | ok_or_factual | factual | bank_operations_by_contract | None | епт транзакции договор 19/15 | Собран список банковских операций по договору (live address lane). |
|
||||
| X041 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
| X042 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_17-34-13",
|
||||
"generated_at": "2026-04-02T17:44:41",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 102,
|
||||
"ok_200_count": 102,
|
||||
"semantic_pass_count": 102,
|
||||
"semantic_pass_rate": 1.0,
|
||||
"route_pass_count": 102,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_count": 102,
|
||||
"strict_pass_rate": 1.0,
|
||||
"factual_count": 96,
|
||||
"partial_coverage_count": 6,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 80,
|
||||
"avg_elapsed_ms": 6159.6
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 96,
|
||||
"partial_coverage": 6
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_documents_by_counterparty": 18,
|
||||
"bank_operations_by_counterparty": 16,
|
||||
"account_balance_snapshot": 26,
|
||||
"documents_forming_balance": 16,
|
||||
"list_documents_by_contract": 14,
|
||||
"bank_operations_by_contract": 12
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 102
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 96,
|
||||
"no_raw_rows": 6
|
||||
},
|
||||
"limited_reason_category": {
|
||||
"empty_match": 6
|
||||
},
|
||||
"route_health": {
|
||||
"ok_or_factual": 96,
|
||||
"partial_non_blocking": 6
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T17:44:41",
|
||||
"overall_pass": true,
|
||||
"baseline": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27",
|
||||
"questions_total": 102,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"candidate": {
|
||||
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_stress_102_17-34-13\\run_summary.json",
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_17-34-13",
|
||||
"questions_total": 102,
|
||||
"strict_pass_rate": 1.0,
|
||||
"route_pass_rate": 1.0,
|
||||
"execution_error_count": 0,
|
||||
"false_factual_rate": 0.0,
|
||||
"notes": [
|
||||
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
|
||||
"false_factual_rate derived from false_factual_count/questions_total"
|
||||
]
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"metric": "strict_pass_rate",
|
||||
"passed": true,
|
||||
"baseline": 1.0,
|
||||
"candidate": 1.0,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "route_pass_rate",
|
||||
"passed": true,
|
||||
"baseline": 1.0,
|
||||
"candidate": 1.0,
|
||||
"rule": "candidate >= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "execution_error_count",
|
||||
"passed": true,
|
||||
"baseline": 0,
|
||||
"candidate": 0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "false_factual_rate",
|
||||
"passed": true,
|
||||
"baseline": 0.0,
|
||||
"candidate": 0.0,
|
||||
"rule": "candidate <= baseline"
|
||||
},
|
||||
{
|
||||
"metric": "questions_total_match",
|
||||
"passed": true,
|
||||
"baseline": 102,
|
||||
"candidate": 102,
|
||||
"rule": "candidate == baseline"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"generated_at": "2026-04-02T17:44:41",
|
||||
"total": 1,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"results": [
|
||||
{
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_stress_102_17-34-13",
|
||||
"valid": true,
|
||||
"errors": [],
|
||||
"warnings": [],
|
||||
"metrics": {
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_17-34-13",
|
||||
"questions_total": 102,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_rate": 1.0,
|
||||
"http_error_count": 0,
|
||||
"rows_count": 102,
|
||||
"failures_count": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
# 2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00
|
||||
|
||||
Generated at: 2026-04-02T17:46:44
|
||||
Dry run: False
|
||||
Strict policy: route
|
||||
Overall: PASS
|
||||
|
||||
## Packs
|
||||
### stress_102
|
||||
- run_id: 2026-04-02_Address_Nightly_stress_102_17-34-13
|
||||
- runner_ok: True
|
||||
- validator_ok: True
|
||||
- comparator_ok: True
|
||||
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\2026-04-02_Address_Nightly_stress_102_17-34-13
|
||||
|
||||
### followup_25
|
||||
- run_id: 2026-04-02_Address_Nightly_followup_25_17-44-41
|
||||
- runner_ok: True
|
||||
- validator_ok: True
|
||||
- comparator_ok: True
|
||||
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\2026-04-02_Address_Nightly_followup_25_17-44-41
|
||||
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"nightly_run_id": "2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00",
|
||||
"generated_at": "2026-04-02T17:46:44",
|
||||
"dry_run": false,
|
||||
"overall_ok": true,
|
||||
"strict_policy": "route",
|
||||
"packs": [
|
||||
{
|
||||
"pack": "stress_102",
|
||||
"run_id": "2026-04-02_Address_Nightly_stress_102_17-34-13",
|
||||
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
|
||||
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_stress_102_17-34-13",
|
||||
"runner_ok": true,
|
||||
"validator_ok": true,
|
||||
"comparator_ok": true,
|
||||
"errors": [],
|
||||
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_stress_102_17-34-13_validator_report.json",
|
||||
"comparator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_stress_102_17-34-13_comparator_report.json"
|
||||
},
|
||||
{
|
||||
"pack": "followup_25",
|
||||
"run_id": "2026-04-02_Address_Nightly_followup_25_17-44-41",
|
||||
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
|
||||
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
|
||||
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_followup_25_17-44-41",
|
||||
"runner_ok": true,
|
||||
"validator_ok": true,
|
||||
"comparator_ok": true,
|
||||
"errors": [],
|
||||
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_followup_25_17-44-41_validator_report.json",
|
||||
"comparator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_followup_25_17-44-41_comparator_report.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick
|
||||
|
||||
Generated at: 2026-04-02T16:50:11
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_open_contracts_focus_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 3
|
||||
- ok_200_count: 3
|
||||
- semantic_pass_count: 3
|
||||
- semantic_pass_rate: 1.0
|
||||
- route_pass_count: 3
|
||||
- route_pass_rate: 1.0
|
||||
- strict_pass_count: 3
|
||||
- strict_pass_rate: 1.0
|
||||
- factual_count: 3
|
||||
- partial_coverage_count: 0
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 2
|
||||
- avg_elapsed_ms: 6561.7
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
|
|
@ -0,0 +1 @@
|
|||
[]
|
||||
|
|
@ -0,0 +1,504 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick",
|
||||
"generated_at": "2026-04-02T16:50:11",
|
||||
"summary": {
|
||||
"run_id": "2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick",
|
||||
"generated_at": "2026-04-02T16:50:11",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_open_contracts_focus_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 3,
|
||||
"ok_200_count": 3,
|
||||
"semantic_pass_count": 3,
|
||||
"semantic_pass_rate": 1.0,
|
||||
"route_pass_count": 3,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_count": 3,
|
||||
"strict_pass_rate": 1.0,
|
||||
"factual_count": 3,
|
||||
"partial_coverage_count": 0,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 2,
|
||||
"avg_elapsed_ms": 6561.7
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 3
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_open_contracts": 2,
|
||||
"open_items_by_counterparty_or_contract": 1
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 3
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 3
|
||||
},
|
||||
"limited_reason_category": {},
|
||||
"route_health": {
|
||||
"ok_or_factual": 3
|
||||
}
|
||||
}
|
||||
},
|
||||
"rows": [
|
||||
{
|
||||
"index": 1,
|
||||
"id": "OC001",
|
||||
"question": "Покажи незакрытые договоры на 2020-12-31",
|
||||
"session": null,
|
||||
"session_id": "asst-2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick-oc001",
|
||||
"status_code": 200,
|
||||
"ok": true,
|
||||
"elapsed_ms": 6465,
|
||||
"reply_type": "factual",
|
||||
"trace_id": "address-6KRuwoHvHf",
|
||||
"assistant_reply": "Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76).\nСтрок движения: 20.\nДоговорных кандидатов: 0.\nДоговорные якоря в live-строках не выделены; показаны связанные движения как fallback.\n1. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 127216.46\n2. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 235682.42\n3. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 337318.8\n4. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 91.09 / 91.02 | 10615989.53\n5. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 91.01 / 91.09 | 1614344.98\n6. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 90.09 / 90.02.1 | 6430415.34",
|
||||
"assistant_reply_first_line": "Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76).",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"actual_intent": "list_open_contracts",
|
||||
"intent_match": true,
|
||||
"expected_mode": "address_query",
|
||||
"actual_mode": "address_query",
|
||||
"mode_match": true,
|
||||
"expected_reply_type": "factual",
|
||||
"reply_match": true,
|
||||
"semantic_pass": true,
|
||||
"route_pass": true,
|
||||
"route_health": "ok_or_factual",
|
||||
"strict_policy": "route",
|
||||
"strict_pass": true,
|
||||
"selected_recipe": "address_open_contracts_candidates_v1",
|
||||
"missing_required_filters": [],
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 20,
|
||||
"rows_matched": 20,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"limited_reason_category": null,
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"debug_payload": {
|
||||
"trace_id": "address-6KRuwoHvHf",
|
||||
"prompt_version": "address_query_runtime_v1",
|
||||
"schema_version": "address_query_runtime_v1",
|
||||
"fallback_type": "none",
|
||||
"route_summary": null,
|
||||
"fragments": [],
|
||||
"requirements_extracted": [],
|
||||
"coverage_report": {
|
||||
"requirements_total": 0,
|
||||
"requirements_covered": 0,
|
||||
"requirements_uncovered": [],
|
||||
"requirements_partially_covered": [],
|
||||
"clarification_needed_for": [],
|
||||
"out_of_scope_requirements": []
|
||||
},
|
||||
"routes": [],
|
||||
"retrieval_status": [],
|
||||
"retrieval_results": [],
|
||||
"answer_grounding_check": {
|
||||
"status": "grounded",
|
||||
"route_subject_match": true,
|
||||
"missing_requirements": [],
|
||||
"reasons": [
|
||||
"address_action_detected",
|
||||
"address_entity_detected",
|
||||
"object_signal_detected",
|
||||
"open_contract_signal_detected"
|
||||
],
|
||||
"why_included_summary": [],
|
||||
"selection_reason_summary": []
|
||||
},
|
||||
"dropped_intent_segments": [],
|
||||
"detected_mode": "address_query",
|
||||
"detected_mode_confidence": "high",
|
||||
"query_shape": "OBJECT_LOOKUP",
|
||||
"query_shape_confidence": "medium",
|
||||
"detected_intent": "list_open_contracts",
|
||||
"detected_intent_confidence": "medium",
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"period_from": "2020-12-01",
|
||||
"period_to": "2020-12-31"
|
||||
},
|
||||
"missing_required_filters": [],
|
||||
"selected_recipe": "address_open_contracts_candidates_v1",
|
||||
"mcp_call_status_legacy": "matched_non_empty",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": true,
|
||||
"anchor_type": "unknown",
|
||||
"anchor_value_raw": null,
|
||||
"anchor_value_resolved": null,
|
||||
"resolver_confidence": "low",
|
||||
"ambiguity_count": 0,
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 20,
|
||||
"rows_after_recipe_filter": 20,
|
||||
"rows_materialized": 20,
|
||||
"rows_matched": 20,
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"materialization_drop_reason": "none",
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"limited_reason_category": null,
|
||||
"response_type": "FACTUAL_LIST",
|
||||
"execution_lane": "address_query",
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_attempted": true,
|
||||
"llm_provider_used": "local",
|
||||
"llm_decomposition_trace_id": "Cr3wXdOb-ZBI6K",
|
||||
"llm_decomposition_effective_message": "Показать незакрытые договоры по состоянию на конец декабря 2020 года.",
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"sanitized_user_message": "покажи незакрытые договоры на 2020-12-31",
|
||||
"tool_gate_decision": "run_address_lane",
|
||||
"tool_gate_reason": "address_mode_classifier_detected",
|
||||
"answer_structure_v11": null,
|
||||
"investigation_state_snapshot": null,
|
||||
"normalized": null,
|
||||
"normalizer_output": {
|
||||
"trace_id": "Cr3wXdOb-ZBI6K",
|
||||
"prompt_version": "normalizer_v2_0_2",
|
||||
"applied": true,
|
||||
"effective_message": "Показать незакрытые договоры по состоянию на конец декабря 2020 года."
|
||||
}
|
||||
},
|
||||
"error_code": null,
|
||||
"error_message": null
|
||||
},
|
||||
{
|
||||
"index": 2,
|
||||
"id": "OC002",
|
||||
"question": "Есть ли долг по договору 19/15 на 2020-07-31",
|
||||
"session": null,
|
||||
"session_id": "asst-2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick-oc002",
|
||||
"status_code": 200,
|
||||
"ok": true,
|
||||
"elapsed_ms": 7256,
|
||||
"reply_type": "factual",
|
||||
"trace_id": "address-DTm0Ml5bzU",
|
||||
"assistant_reply": "Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк.\nСобраны открытые позиции по указанному фильтру (контрагент/договор).\nСтрок отобрано: 7.\n1. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.01 / 90.01.1 | 43804.8\n2. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.01 / 90.01.1 | 9776\n3. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.01 / 90.01.1 | 73968\n4. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.01 / 90.01.1 | 94924.8\n5. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.01 / 90.01.1 | 54400\n6. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.02 / 62.01 | 276873.6",
|
||||
"assistant_reply_first_line": "Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк.",
|
||||
"expected_intent": "open_items_by_counterparty_or_contract",
|
||||
"actual_intent": "open_items_by_counterparty_or_contract",
|
||||
"intent_match": true,
|
||||
"expected_mode": "address_query",
|
||||
"actual_mode": "address_query",
|
||||
"mode_match": true,
|
||||
"expected_reply_type": null,
|
||||
"reply_match": true,
|
||||
"semantic_pass": true,
|
||||
"route_pass": true,
|
||||
"route_health": "ok_or_factual",
|
||||
"strict_policy": "route",
|
||||
"strict_pass": true,
|
||||
"selected_recipe": "address_open_items_by_party_or_contract_v1",
|
||||
"missing_required_filters": [],
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 1000,
|
||||
"rows_matched": 7,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"limited_reason_category": null,
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"debug_payload": {
|
||||
"trace_id": "address-DTm0Ml5bzU",
|
||||
"prompt_version": "address_query_runtime_v1",
|
||||
"schema_version": "address_query_runtime_v1",
|
||||
"fallback_type": "none",
|
||||
"route_summary": null,
|
||||
"fragments": [],
|
||||
"requirements_extracted": [],
|
||||
"coverage_report": {
|
||||
"requirements_total": 0,
|
||||
"requirements_covered": 0,
|
||||
"requirements_uncovered": [],
|
||||
"requirements_partially_covered": [],
|
||||
"clarification_needed_for": [],
|
||||
"out_of_scope_requirements": []
|
||||
},
|
||||
"routes": [],
|
||||
"retrieval_status": [],
|
||||
"retrieval_results": [],
|
||||
"answer_grounding_check": {
|
||||
"status": "grounded",
|
||||
"route_subject_match": true,
|
||||
"missing_requirements": [],
|
||||
"reasons": [
|
||||
"address_action_detected",
|
||||
"address_entity_detected",
|
||||
"verify_signal_detected",
|
||||
"open_items_signal_detected",
|
||||
"query_limit_auto_expanded_for_anchor_recovery"
|
||||
],
|
||||
"why_included_summary": [],
|
||||
"selection_reason_summary": []
|
||||
},
|
||||
"dropped_intent_segments": [],
|
||||
"detected_mode": "address_query",
|
||||
"detected_mode_confidence": "high",
|
||||
"query_shape": "VERIFY_FACTUAL",
|
||||
"query_shape_confidence": "medium",
|
||||
"detected_intent": "open_items_by_counterparty_or_contract",
|
||||
"detected_intent_confidence": "medium",
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"contract": "19/15",
|
||||
"as_of_date": "2020-07-31"
|
||||
},
|
||||
"missing_required_filters": [],
|
||||
"selected_recipe": "address_open_items_by_party_or_contract_v1",
|
||||
"mcp_call_status_legacy": "matched_non_empty",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": false,
|
||||
"anchor_type": "contract",
|
||||
"anchor_value_raw": "19/15",
|
||||
"anchor_value_resolved": "19/15",
|
||||
"resolver_confidence": "medium",
|
||||
"ambiguity_count": 0,
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"rows_fetched": 1000,
|
||||
"raw_rows_received": 1000,
|
||||
"rows_after_account_scope": 305,
|
||||
"rows_after_recipe_filter": 7,
|
||||
"rows_materialized": 305,
|
||||
"rows_matched": 7,
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"materialization_drop_reason": "none",
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"limited_reason_category": null,
|
||||
"response_type": "FACTUAL_LIST",
|
||||
"execution_lane": "address_query",
|
||||
"llm_decomposition_applied": true,
|
||||
"llm_decomposition_attempted": true,
|
||||
"llm_provider_used": "local",
|
||||
"llm_decomposition_trace_id": "BtyrTpKprBeOoN",
|
||||
"llm_decomposition_effective_message": "Проверить наличие долга по договору 19/15 на дату 2020-07-31.",
|
||||
"llm_decomposition_reason": "normalized_fragment_applied",
|
||||
"fallback_rule_hit": null,
|
||||
"sanitized_user_message": "есть ли долг по договору 19/15 на 2020-07-31",
|
||||
"tool_gate_decision": "run_address_lane",
|
||||
"tool_gate_reason": "address_mode_classifier_detected",
|
||||
"answer_structure_v11": null,
|
||||
"investigation_state_snapshot": null,
|
||||
"normalized": null,
|
||||
"normalizer_output": {
|
||||
"trace_id": "BtyrTpKprBeOoN",
|
||||
"prompt_version": "normalizer_v2_0_2",
|
||||
"applied": true,
|
||||
"effective_message": "Проверить наличие долга по договору 19/15 на дату 2020-07-31."
|
||||
}
|
||||
},
|
||||
"error_code": null,
|
||||
"error_message": null
|
||||
},
|
||||
{
|
||||
"index": 3,
|
||||
"id": "OC003",
|
||||
"question": "Show open contracts as of 2020-12-31",
|
||||
"session": null,
|
||||
"session_id": "asst-2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick-oc003",
|
||||
"status_code": 200,
|
||||
"ok": true,
|
||||
"elapsed_ms": 5964,
|
||||
"reply_type": "factual",
|
||||
"trace_id": "address-2oqxYvLmuv",
|
||||
"assistant_reply": "Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76).\nСтрок движения: 20.\nДоговорных кандидатов: 0.\nДоговорные якоря в live-строках не выделены; показаны связанные движения как fallback.\n1. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 127216.46\n2. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 235682.42\n3. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 337318.8\n4. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 91.09 / 91.02 | 10615989.53\n5. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 91.01 / 91.09 | 1614344.98\n6. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 90.09 / 90.02.1 | 6430415.34",
|
||||
"assistant_reply_first_line": "Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76).",
|
||||
"expected_intent": "list_open_contracts",
|
||||
"actual_intent": "list_open_contracts",
|
||||
"intent_match": true,
|
||||
"expected_mode": "address_query",
|
||||
"actual_mode": "address_query",
|
||||
"mode_match": true,
|
||||
"expected_reply_type": "factual",
|
||||
"reply_match": true,
|
||||
"semantic_pass": true,
|
||||
"route_pass": true,
|
||||
"route_health": "ok_or_factual",
|
||||
"strict_policy": "route",
|
||||
"strict_pass": true,
|
||||
"selected_recipe": "address_open_contracts_candidates_v1",
|
||||
"missing_required_filters": [],
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"rows_fetched": 20,
|
||||
"rows_matched": 20,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"limited_reason_category": null,
|
||||
"llm_decomposition_applied": false,
|
||||
"llm_decomposition_reason": "normalized_fragment_rejected_intent_drop",
|
||||
"fallback_rule_hit": null,
|
||||
"debug_payload": {
|
||||
"trace_id": "address-2oqxYvLmuv",
|
||||
"prompt_version": "address_query_runtime_v1",
|
||||
"schema_version": "address_query_runtime_v1",
|
||||
"fallback_type": "none",
|
||||
"route_summary": null,
|
||||
"fragments": [],
|
||||
"requirements_extracted": [],
|
||||
"coverage_report": {
|
||||
"requirements_total": 0,
|
||||
"requirements_covered": 0,
|
||||
"requirements_uncovered": [],
|
||||
"requirements_partially_covered": [],
|
||||
"clarification_needed_for": [],
|
||||
"out_of_scope_requirements": []
|
||||
},
|
||||
"routes": [],
|
||||
"retrieval_status": [],
|
||||
"retrieval_results": [],
|
||||
"answer_grounding_check": {
|
||||
"status": "grounded",
|
||||
"route_subject_match": true,
|
||||
"missing_requirements": [],
|
||||
"reasons": [
|
||||
"address_action_detected",
|
||||
"address_entity_detected",
|
||||
"object_signal_detected",
|
||||
"open_contract_signal_detected"
|
||||
],
|
||||
"why_included_summary": [],
|
||||
"selection_reason_summary": []
|
||||
},
|
||||
"dropped_intent_segments": [],
|
||||
"detected_mode": "address_query",
|
||||
"detected_mode_confidence": "high",
|
||||
"query_shape": "OBJECT_LOOKUP",
|
||||
"query_shape_confidence": "medium",
|
||||
"detected_intent": "list_open_contracts",
|
||||
"detected_intent_confidence": "medium",
|
||||
"extracted_filters": {
|
||||
"sort": "period_desc",
|
||||
"limit": 20,
|
||||
"as_of_date": "2020-12-31"
|
||||
},
|
||||
"missing_required_filters": [],
|
||||
"selected_recipe": "address_open_contracts_candidates_v1",
|
||||
"mcp_call_status_legacy": "matched_non_empty",
|
||||
"account_scope_mode": "preferred",
|
||||
"account_scope_fallback_applied": true,
|
||||
"anchor_type": "unknown",
|
||||
"anchor_value_raw": null,
|
||||
"anchor_value_resolved": null,
|
||||
"resolver_confidence": "low",
|
||||
"ambiguity_count": 0,
|
||||
"match_failure_stage": "none",
|
||||
"match_failure_reason": null,
|
||||
"mcp_call_status": "matched_non_empty",
|
||||
"rows_fetched": 20,
|
||||
"raw_rows_received": 20,
|
||||
"rows_after_account_scope": 20,
|
||||
"rows_after_recipe_filter": 20,
|
||||
"rows_materialized": 20,
|
||||
"rows_matched": 20,
|
||||
"raw_row_keys_sample": [
|
||||
"Период",
|
||||
"Регистратор",
|
||||
"СчетДт",
|
||||
"СчетКт",
|
||||
"Сумма",
|
||||
"Period",
|
||||
"Registrator",
|
||||
"AccountDt",
|
||||
"AccountKt",
|
||||
"Amount"
|
||||
],
|
||||
"materialization_drop_reason": "none",
|
||||
"account_token_raw": null,
|
||||
"account_token_normalized": null,
|
||||
"account_scope_fields_checked": [
|
||||
"account_dt",
|
||||
"account_kt",
|
||||
"registrator",
|
||||
"analytics"
|
||||
],
|
||||
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
|
||||
"account_scope_drop_reason": "not_applicable",
|
||||
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
|
||||
"limited_reason_category": null,
|
||||
"response_type": "FACTUAL_LIST",
|
||||
"execution_lane": "address_query",
|
||||
"llm_decomposition_applied": false,
|
||||
"llm_decomposition_attempted": true,
|
||||
"llm_provider_used": "local",
|
||||
"llm_decomposition_trace_id": "55wfOyVVuepsR7",
|
||||
"llm_decomposition_effective_message": "Show open contracts as of 2020-12-31",
|
||||
"llm_decomposition_reason": "normalized_fragment_rejected_intent_drop",
|
||||
"fallback_rule_hit": null,
|
||||
"sanitized_user_message": "show open contracts as of 2020-12-31",
|
||||
"tool_gate_decision": "run_address_lane",
|
||||
"tool_gate_reason": "address_mode_classifier_detected",
|
||||
"answer_structure_v11": null,
|
||||
"investigation_state_snapshot": null,
|
||||
"normalized": null,
|
||||
"normalizer_output": {
|
||||
"trace_id": "55wfOyVVuepsR7",
|
||||
"prompt_version": "normalizer_v2_0_2",
|
||||
"applied": false,
|
||||
"effective_message": "Show open contracts as of 2020-12-31"
|
||||
}
|
||||
},
|
||||
"error_code": null,
|
||||
"error_message": null
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
# Response Audit: 2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick
|
||||
|
||||
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| OC001 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
| OC002 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли долг по договору 19/15 на 2020-07-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
|
||||
| OC003 | True | ok_or_factual | factual | list_open_contracts | None | Show open contracts as of 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"run_id": "2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick",
|
||||
"generated_at": "2026-04-02T16:50:11",
|
||||
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_open_contracts_focus_2026-04-02.json",
|
||||
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
|
||||
"llm_provider": "local",
|
||||
"llm_model": "qwen2.5-14b-instruct-1m",
|
||||
"llm_base_url": "http://127.0.0.1:1234",
|
||||
"strict_policy": "route",
|
||||
"totals": {
|
||||
"questions_total": 3,
|
||||
"ok_200_count": 3,
|
||||
"semantic_pass_count": 3,
|
||||
"semantic_pass_rate": 1.0,
|
||||
"route_pass_count": 3,
|
||||
"route_pass_rate": 1.0,
|
||||
"strict_pass_count": 3,
|
||||
"strict_pass_rate": 1.0,
|
||||
"factual_count": 3,
|
||||
"partial_coverage_count": 0,
|
||||
"clarification_required_count": 0,
|
||||
"http_error_count": 0,
|
||||
"llm_decomposition_applied_count": 2,
|
||||
"avg_elapsed_ms": 6561.7
|
||||
},
|
||||
"distributions": {
|
||||
"reply_type": {
|
||||
"factual": 3
|
||||
},
|
||||
"actual_intent": {
|
||||
"list_open_contracts": 2,
|
||||
"open_items_by_counterparty_or_contract": 1
|
||||
},
|
||||
"actual_mode": {
|
||||
"address_query": 3
|
||||
},
|
||||
"mcp_call_status": {
|
||||
"matched_non_empty": 3
|
||||
},
|
||||
"limited_reason_category": {},
|
||||
"route_health": {
|
||||
"ok_or_factual": 3
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
# 2026-04-02_Address_RefDomain_Smoke_OpenItems_Quick
|
||||
|
||||
Generated at: 2026-04-02T16:51:16
|
||||
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_open_items_focus_2026-04-02.json
|
||||
Backend URL: http://127.0.0.1:8787/api/assistant/message
|
||||
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
|
||||
Strict policy: route
|
||||
|
||||
## Totals
|
||||
- questions_total: 7
|
||||
- ok_200_count: 7
|
||||
- semantic_pass_count: 7
|
||||
- semantic_pass_rate: 1.0
|
||||
- route_pass_count: 5
|
||||
- route_pass_rate: 0.7143
|
||||
- strict_pass_count: 5
|
||||
- strict_pass_rate: 0.7143
|
||||
- factual_count: 5
|
||||
- partial_coverage_count: 2
|
||||
- clarification_required_count: 0
|
||||
- http_error_count: 0
|
||||
- llm_decomposition_applied_count: 7
|
||||
- avg_elapsed_ms: 7616.4
|
||||
|
||||
## Files
|
||||
- run_summary.json
|
||||
- full_live_results.json
|
||||
- failures_only.json
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue