ййй
This commit is contained in:
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-api-health-endpoint",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 2,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Объясни что делает endpoint /health"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни что делает endpoint /health"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Объясни что делает endpoint /health"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Объясни что делает endpoint /health"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 2265,
|
||||
"tokens_in_estimate": 665
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+368
@@ -0,0 +1,368 @@
|
||||
# docs-v2-api-health-endpoint
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Объясни что делает endpoint /health
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 2,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни что делает endpoint /health"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни что делает endpoint /health"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни что делает endpoint /health"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни что делает endpoint /health"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 2265,
|
||||
"tokens_in_estimate": 665
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 1,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/health",
|
||||
"exact_anchor_match": true,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f",
|
||||
"a8a325e0815b3a2a870ba2825f3afb3f41056b4c091df4c3bb3418ffd20891dd",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/health"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/health-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /health",
|
||||
"Scenario"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 1,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 1,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 0,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 2265,
|
||||
"tokens_in_estimate": 665
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Объясни что делает endpoint /health",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Объясни что делает endpoint /health
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 1 | samples: HTTP API /health
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-api-send-endpoint",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 2,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как работает endpoint /send?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает endpoint /send?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как работает endpoint /send?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как работает endpoint /send?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 2309,
|
||||
"tokens_in_estimate": 676
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+367
@@ -0,0 +1,367 @@
|
||||
# docs-v2-api-send-endpoint
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Как работает endpoint /send?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 2,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает endpoint /send?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает endpoint /send?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает endpoint /send?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает endpoint /send?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 2309,
|
||||
"tokens_in_estimate": 676
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 1,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/send",
|
||||
"exact_anchor_match": true,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/send"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send",
|
||||
"Scenario"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 1,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 1,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 0,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 2309,
|
||||
"tokens_in_estimate": 676
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как работает endpoint /send?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как работает endpoint /send?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 1 | samples: HTTP API /send
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-component-control-channel",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Объясни как работает компонент TelegramControlChannel"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни как работает компонент TelegramControlChannel"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Объясни как работает компонент TelegramControlChannel"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Объясни как работает компонент TelegramControlChannel"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21517,
|
||||
"tokens_in_estimate": 5478
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+900
@@ -0,0 +1,900 @@
|
||||
# docs-v2-component-control-channel
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Объясни как работает компонент TelegramControlChannel
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни как работает компонент TelegramControlChannel"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни как работает компонент TelegramControlChannel"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни как работает компонент TelegramControlChannel"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни как работает компонент TelegramControlChannel"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21517,
|
||||
"tokens_in_estimate": 5478
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "component",
|
||||
"matched_anchor_value": "TelegramControlChannel",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Readme",
|
||||
"Сущность runtime health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /send",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 21517,
|
||||
"tokens_in_estimate": 5478
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Объясни как работает компонент TelegramControlChannel",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step HTTP control plane запущен.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "HTTP control plane запущен.",
|
||||
"fact_id": "b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity ControlActionSet",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "ControlActionSet",
|
||||
"fact_id": "bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "02530527e6e1d1e23316c9d25d0b30658d6c70063eb6e1d732d55c5ba29c9795",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Объясни как работает компонент TelegramControlChannel
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: COMPONENT_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /actions/{action}, Архитектура Telegram Notify App, Readme
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 6 | samples: api.control_actions_endpoint:parent, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-component-runtime-manager",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Какую роль в системе играет RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какую роль в системе играет RuntimeManager?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Какую роль в системе играет RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Какую роль в системе играет RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21507,
|
||||
"tokens_in_estimate": 5475
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+900
@@ -0,0 +1,900 @@
|
||||
# docs-v2-component-runtime-manager
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Какую роль в системе играет RuntimeManager?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какую роль в системе играет RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какую роль в системе играет RuntimeManager?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какую роль в системе играет RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какую роль в системе играет RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21507,
|
||||
"tokens_in_estimate": 5475
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Readme",
|
||||
"Сущность runtime health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /send",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 21507,
|
||||
"tokens_in_estimate": 5475
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Какую роль в системе играет RuntimeManager?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step HTTP control plane запущен.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "HTTP control plane запущен.",
|
||||
"fact_id": "b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity ControlActionSet",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "ControlActionSet",
|
||||
"fact_id": "bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "02530527e6e1d1e23316c9d25d0b30658d6c70063eb6e1d732d55c5ba29c9795",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Какую роль в системе играет RuntimeManager?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: COMPONENT_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /actions/{action}, Архитектура Telegram Notify App, Readme
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 6 | samples: api.control_actions_endpoint:parent, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-entity-runtime-health",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 26,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"runtime health"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что такое runtime health?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 20267,
|
||||
"tokens_in_estimate": 5165
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+865
@@ -0,0 +1,865 @@
|
||||
# docs-v2-entity-runtime-health
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что такое runtime health?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 26,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"runtime health"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что такое runtime health?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 20267,
|
||||
"tokens_in_estimate": 5165
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 0,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D3_ENTITY_CATALOG": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"domain.runtime_health"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"79bdb0a74713df6064008179ca8c5c186dc23e4e1c5e2c9607b0bdddeba50f93",
|
||||
"af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
|
||||
"77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.health_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"runtime health"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"RuntimeManager",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"WorkerHealth",
|
||||
"Сущность runtime health",
|
||||
"HTTP API /health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"HTTP API /send",
|
||||
"domain.runtime_health:parent",
|
||||
"domain.runtime_health:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"domain.runtime_health:used_by",
|
||||
"api.health_endpoint:Сценарий",
|
||||
"api.health_endpoint:Нефункциональные требования",
|
||||
"api.health_endpoint:Summary",
|
||||
"api.health_endpoint:Описание",
|
||||
"api.health_endpoint:Функциональные требования",
|
||||
"api.health_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"domain.runtime_health:parent",
|
||||
"domain.runtime_health:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"domain.runtime_health:used_by"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 0,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 20267,
|
||||
"tokens_in_estimate": 5165
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что такое runtime health?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:parent",
|
||||
"content": "domain.runtime_health parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "79bdb0a74713df6064008179ca8c5c186dc23e4e1c5e2c9607b0bdddeba50f93",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:part_of",
|
||||
"content": "domain.runtime_health part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:depends_on",
|
||||
"content": "api.health_endpoint depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:used_by",
|
||||
"content": "domain.runtime_health used_by api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "used_by",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что такое runtime health?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: ENTITY_EXPLAIN
|
||||
- documents: 6 | samples: Сущность runtime health, HTTP API /health, Цикл отправки уведомлений в Telegram
|
||||
- facts: 0
|
||||
- relations: 6 | samples: domain.runtime_health:parent, domain.runtime_health:part_of, api.health_endpoint:depends_on
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+86
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-entity-worker-status",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 4,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"WorkerStatus"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Объясни сущность WorkerStatus"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни сущность WorkerStatus"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Объясни сущность WorkerStatus"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Объясни сущность WorkerStatus"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 2555,
|
||||
"tokens_in_estimate": 737
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+384
@@ -0,0 +1,384 @@
|
||||
# docs-v2-entity-worker-status
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Объясни сущность WorkerStatus
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 4,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"WorkerStatus"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни сущность WorkerStatus"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни сущность WorkerStatus"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни сущность WorkerStatus"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни сущность WorkerStatus"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 2555,
|
||||
"tokens_in_estimate": 737
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 1,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "entity",
|
||||
"matched_anchor_value": "WorkerStatus",
|
||||
"exact_anchor_match": true,
|
||||
"docs_layers_requested": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D3_ENTITY_CATALOG": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"WorkerStatus"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"WorkerStatus"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"WorkerStatus",
|
||||
"logic.telegram_notification_loop:Details",
|
||||
"Сущность runtime health"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 2,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 1,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 1,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 2555,
|
||||
"tokens_in_estimate": 737
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Объясни сущность WorkerStatus",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Объясни сущность WorkerStatus
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: ENTITY_EXPLAIN
|
||||
- documents: 1 | samples: Сущность runtime health
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-general-overview",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 12,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что вообще описано в документации по этому сервису?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что вообще описано в документации по этому сервису?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что вообще описано в документации по этому сервису?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что вообще описано в документации по этому сервису?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_general_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_general_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 345,
|
||||
"user_chars": 7589,
|
||||
"tokens_in_estimate": 1984
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+493
@@ -0,0 +1,493 @@
|
||||
# docs-v2-general-overview
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что вообще описано в документации по этому сервису?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 12,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что вообще описано в документации по этому сервису?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что вообще описано в документации по этому сервису?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что вообще описано в документации по этому сервису?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что вообще описано в документации по этому сервису?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_general_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_general_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 345,
|
||||
"user_chars": 7589,
|
||||
"tokens_in_estimate": 1984
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 4,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 4,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/README.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Readme",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"HTTP API /send",
|
||||
"docs/README.md:Структура",
|
||||
"docs/README.md:Навигация",
|
||||
"docs/README.md:Правила и шаблоны",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"docs/README.md:Project Docs"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 4,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 8,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_general_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 345,
|
||||
"user_chars": 7589,
|
||||
"tokens_in_estimate": 1984
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты отвечаешь на общий вопрос по документации проекта.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные документы и факты
|
||||
- Не додумывай отсутствующие детали
|
||||
- Если данных недостаточно, скажи это прямо
|
||||
- Дай короткий понятный ответ без лишней структуры
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что вообще описано в документации по этому сервису?",
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что вообще описано в документации по этому сервису?
|
||||
- intent: GENERAL_QA
|
||||
- sub_intent: GENERIC_QA
|
||||
- documents: 4 | samples: Readme, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-negative-missing-entity",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 0,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "degraded",
|
||||
"path_scope": [],
|
||||
"doc_scope": [],
|
||||
"entity_candidates": [
|
||||
"PaymentTransaction"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "reject",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": "not_found_exact_anchor",
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что такое сущность PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что такое сущность PaymentTransaction?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что такое сущность PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что такое сущность PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "degraded",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 182,
|
||||
"tokens_in_estimate": 144
|
||||
}
|
||||
},
|
||||
"degraded_reason": "not_found_exact_anchor"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+307
@@ -0,0 +1,307 @@
|
||||
# docs-v2-negative-missing-entity
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что такое сущность PaymentTransaction?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 0,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "degraded",
|
||||
"path_scope": [],
|
||||
"doc_scope": [],
|
||||
"entity_candidates": [
|
||||
"PaymentTransaction"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "reject",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": "not_found_exact_anchor",
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое сущность PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что такое сущность PaymentTransaction?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое сущность PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое сущность PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "degraded",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 182,
|
||||
"tokens_in_estimate": 144
|
||||
}
|
||||
},
|
||||
"degraded_reason": "not_found_exact_anchor"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 0,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": false,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "entity",
|
||||
"matched_anchor_value": "PaymentTransaction",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D3_ENTITY_CATALOG": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"PaymentTransaction"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"PaymentTransaction"
|
||||
],
|
||||
"resolved_anchor_candidates": [],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [],
|
||||
"doc_paths": [],
|
||||
"doc_titles": [],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 0,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 0,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 0,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "reject",
|
||||
"gate_decision_reason": "not_found_exact_anchor",
|
||||
"gate_missing_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"gate_satisfied_requirements": [],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "degraded",
|
||||
"degrade_reason": "not_found_exact_anchor",
|
||||
"degraded_reason": "not_found_exact_anchor",
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 182,
|
||||
"tokens_in_estimate": 144
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что такое сущность PaymentTransaction?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"documents": [],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что такое сущность PaymentTransaction?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: ENTITY_EXPLAIN
|
||||
- documents: 0
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-openapi-fragment-send-request",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_FRAGMENT_GENERATE",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 1,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "structured_spec",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "partial",
|
||||
"prompt_used": "docs_openapi_fragment_answer",
|
||||
"llm_mode": "yaml",
|
||||
"degraded_reason": "fragment_payload_only",
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Сгенерируй request schema для endpoint /send"
|
||||
},
|
||||
"output": {
|
||||
"query": "Сгенерируй request schema для endpoint /send"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Сгенерируй request schema для endpoint /send"
|
||||
},
|
||||
"output": {
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_FRAGMENT_GENERATE",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Сгенерируй request schema для endpoint /send"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready_partial",
|
||||
"prompt_name": "docs_openapi_fragment_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_openapi_fragment_answer",
|
||||
"log_context": "graph.project_qa.docs.openapi",
|
||||
"prompt_stats": {
|
||||
"system_chars": 319,
|
||||
"user_chars": 2748,
|
||||
"tokens_in_estimate": 767
|
||||
}
|
||||
},
|
||||
"degraded_reason": "fragment_payload_only"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+383
@@ -0,0 +1,383 @@
|
||||
# docs-v2-openapi-fragment-send-request
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Сгенерируй request schema для endpoint /send
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_FRAGMENT_GENERATE",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 1,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "structured_spec",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "partial",
|
||||
"prompt_used": "docs_openapi_fragment_answer",
|
||||
"llm_mode": "yaml",
|
||||
"degraded_reason": "fragment_payload_only",
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Сгенерируй request schema для endpoint /send"
|
||||
},
|
||||
"output": {
|
||||
"query": "Сгенерируй request schema для endpoint /send"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Сгенерируй request schema для endpoint /send"
|
||||
},
|
||||
"output": {
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_FRAGMENT_GENERATE",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Сгенерируй request schema для endpoint /send"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready_partial",
|
||||
"prompt_name": "docs_openapi_fragment_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_openapi_fragment_answer",
|
||||
"log_context": "graph.project_qa.docs.openapi",
|
||||
"prompt_stats": {
|
||||
"system_chars": 319,
|
||||
"user_chars": 2748,
|
||||
"tokens_in_estimate": 767
|
||||
}
|
||||
},
|
||||
"degraded_reason": "fragment_payload_only"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_FRAGMENT_GENERATE",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 1,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [
|
||||
"method",
|
||||
"schema_fragment"
|
||||
],
|
||||
"openapi_status": {
|
||||
"has_path": true,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_openapi_fragment_answer",
|
||||
"llm_mode": "yaml",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/send",
|
||||
"exact_anchor_match": true,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 7,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/send"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 1,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 1,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 0,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": true,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": true
|
||||
}
|
||||
},
|
||||
"gate_decision": "partial",
|
||||
"gate_decision_reason": "fragment_payload_only",
|
||||
"gate_missing_requirements": [
|
||||
"http_method_found",
|
||||
"contract_fields_found",
|
||||
"status_codes_found"
|
||||
],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match",
|
||||
"path_found",
|
||||
"payload_description_found",
|
||||
"api_method_filter"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": true,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": true
|
||||
},
|
||||
"requested_fragment_type": "request_schema",
|
||||
"fragment_evidence_found": [
|
||||
"path",
|
||||
"payload_description"
|
||||
],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready_partial",
|
||||
"degrade_reason": "fragment_payload_only",
|
||||
"degraded_reason": "fragment_payload_only",
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_openapi_fragment_answer
|
||||
- log_context: graph.project_qa.docs.openapi
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 319,
|
||||
"user_chars": 2748,
|
||||
"tokens_in_estimate": 767
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты генерируешь часть OpenAPI schema по документации API.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
- api_contract
|
||||
|
||||
Правила:
|
||||
- Только schema
|
||||
- Без полного OpenAPI документа
|
||||
- Используй только данные из payload
|
||||
- Не придумывай поля
|
||||
- Верни ТОЛЬКО YAML без пояснений
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Сгенерируй request schema для endpoint /send",
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_FRAGMENT_GENERATE",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [],
|
||||
"api_contract": {
|
||||
"path": "/send",
|
||||
"method": "",
|
||||
"request_schema": null,
|
||||
"response_schema": null,
|
||||
"diagnostics": {
|
||||
"has_path": true,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false,
|
||||
"status_codes_found": false,
|
||||
"payload_description_found": true,
|
||||
"missing_required_fields": [
|
||||
"method",
|
||||
"schema_fragment"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Сгенерируй request schema для endpoint /send
|
||||
- intent: OPENAPI_GENERATION
|
||||
- sub_intent: OPENAPI_FRAGMENT_GENERATE
|
||||
- documents: 1 | samples: HTTP API /send
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
- api_contract:
|
||||
path: /send
|
||||
method: —
|
||||
has_request_schema: False
|
||||
has_response_schema: False
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-openapi-health",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_METHOD_GENERATE",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 1,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "structured_spec",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"OpenAPI"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "partial",
|
||||
"prompt_used": "docs_openapi_answer",
|
||||
"llm_mode": "yaml",
|
||||
"degraded_reason": "answered_with_gaps",
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Сгенерируй OpenAPI для endpoint /health по документации"
|
||||
},
|
||||
"output": {
|
||||
"query": "Сгенерируй OpenAPI для endpoint /health по документации"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Сгенерируй OpenAPI для endpoint /health по документации"
|
||||
},
|
||||
"output": {
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_METHOD_GENERATE",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Сгенерируй OpenAPI для endpoint /health по документации"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready_partial",
|
||||
"prompt_name": "docs_openapi_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_openapi_answer",
|
||||
"log_context": "graph.project_qa.docs.openapi",
|
||||
"prompt_stats": {
|
||||
"system_chars": 399,
|
||||
"user_chars": 2733,
|
||||
"tokens_in_estimate": 783
|
||||
}
|
||||
},
|
||||
"degraded_reason": "answered_with_gaps"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+395
@@ -0,0 +1,395 @@
|
||||
# docs-v2-openapi-health
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Сгенерируй OpenAPI для endpoint /health по документации
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_METHOD_GENERATE",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 1,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "structured_spec",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"OpenAPI"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "partial",
|
||||
"prompt_used": "docs_openapi_answer",
|
||||
"llm_mode": "yaml",
|
||||
"degraded_reason": "answered_with_gaps",
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Сгенерируй OpenAPI для endpoint /health по документации"
|
||||
},
|
||||
"output": {
|
||||
"query": "Сгенерируй OpenAPI для endpoint /health по документации"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Сгенерируй OpenAPI для endpoint /health по документации"
|
||||
},
|
||||
"output": {
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_METHOD_GENERATE",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Сгенерируй OpenAPI для endpoint /health по документации"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready_partial",
|
||||
"prompt_name": "docs_openapi_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_openapi_answer",
|
||||
"log_context": "graph.project_qa.docs.openapi",
|
||||
"prompt_stats": {
|
||||
"system_chars": 399,
|
||||
"user_chars": 2733,
|
||||
"tokens_in_estimate": 783
|
||||
}
|
||||
},
|
||||
"degraded_reason": "answered_with_gaps"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_METHOD_GENERATE",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 1,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [
|
||||
"method",
|
||||
"request_schema",
|
||||
"response_schema"
|
||||
],
|
||||
"openapi_status": {
|
||||
"has_path": true,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_openapi_answer",
|
||||
"llm_mode": "yaml",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/health",
|
||||
"exact_anchor_match": true,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 7,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f",
|
||||
"a8a325e0815b3a2a870ba2825f3afb3f41056b4c091df4c3bb3418ffd20891dd",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"OpenAPI"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/health",
|
||||
"OpenAPI"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/health-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /health"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 1,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 1,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 0,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": true,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": true,
|
||||
"payload_description": true
|
||||
}
|
||||
},
|
||||
"gate_decision": "partial",
|
||||
"gate_decision_reason": "answered_with_gaps",
|
||||
"gate_missing_requirements": [
|
||||
"http_method_found",
|
||||
"contract_fields_found"
|
||||
],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match",
|
||||
"path_found",
|
||||
"status_codes_found",
|
||||
"payload_description_found",
|
||||
"api_method_filter"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": true,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": true,
|
||||
"payload_description": true
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready_partial",
|
||||
"degrade_reason": "answered_with_gaps",
|
||||
"degraded_reason": "answered_with_gaps",
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_openapi_answer
|
||||
- log_context: graph.project_qa.docs.openapi
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 399,
|
||||
"user_chars": 2733,
|
||||
"tokens_in_estimate": 783
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты генерируешь OpenAPI спецификацию по документации API.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
- api_contract
|
||||
|
||||
Правила:
|
||||
- Используй только данные из документации
|
||||
- Не придумывай поля
|
||||
- Если данных нет, не заполняй
|
||||
- Верни ТОЛЬКО YAML без пояснений
|
||||
|
||||
Формат:
|
||||
paths:
|
||||
/path:
|
||||
method:
|
||||
summary: ...
|
||||
requestBody:
|
||||
responses:
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Сгенерируй OpenAPI для endpoint /health по документации",
|
||||
"intent": "OPENAPI_GENERATION",
|
||||
"sub_intent": "OPENAPI_METHOD_GENERATE",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [],
|
||||
"api_contract": {
|
||||
"path": "/health",
|
||||
"method": "",
|
||||
"request_schema": null,
|
||||
"response_schema": null,
|
||||
"diagnostics": {
|
||||
"has_path": true,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false,
|
||||
"status_codes_found": true,
|
||||
"payload_description_found": true,
|
||||
"missing_required_fields": [
|
||||
"method",
|
||||
"request_schema",
|
||||
"response_schema"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Сгенерируй OpenAPI для endpoint /health по документации
|
||||
- intent: OPENAPI_GENERATION
|
||||
- sub_intent: OPENAPI_METHOD_GENERATE
|
||||
- documents: 1 | samples: HTTP API /health
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
- api_contract:
|
||||
path: /health
|
||||
method: —
|
||||
has_request_schema: False
|
||||
has_response_schema: False
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-related-docs-architecture-overview",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 5,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"architecture.telegram_notify_app"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Какие дочерние документы есть у overview архитектуры сервиса?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какие дочерние документы есть у overview архитектуры сервиса?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Какие дочерние документы есть у overview архитектуры сервиса?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Какие дочерние документы есть у overview архитектуры сервиса?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 3236,
|
||||
"tokens_in_estimate": 908
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+372
@@ -0,0 +1,372 @@
|
||||
# docs-v2-related-docs-architecture-overview
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Какие дочерние документы есть у overview архитектуры сервиса?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 5,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"architecture.telegram_notify_app"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие дочерние документы есть у overview архитектуры сервиса?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какие дочерние документы есть у overview архитектуры сервиса?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие дочерние документы есть у overview архитектуры сервиса?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие дочерние документы есть у overview архитектуры сервиса?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 3236,
|
||||
"tokens_in_estimate": 908
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 0,
|
||||
"facts_found": 0,
|
||||
"relations_found": 3,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "workflow",
|
||||
"matched_anchor_value": "архитектуры",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"305bab0c6567d93a2b453a9d70b676f9ecd8de083ef36f5cf3398747c25ebf94",
|
||||
"7bd0428d23e9b20f7d65202cc269e45b3d1e7aed7b5df4a35581fd88677be29b",
|
||||
"0eb7f73fcda8556439e06f5eeb5ce064ae32b6cd3129353f5b1b4eb3db626d88",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"145ccbb861a8fb621286ec9c888ce69677168d35c7871c70537e888ce3a5b910"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 0,
|
||||
"top_ids": [],
|
||||
"skipped": true,
|
||||
"reason": "relation_primary_sufficient"
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 2,
|
||||
"top_ids": [
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"architecture.telegram_notify_app"
|
||||
],
|
||||
"anchor_candidates": [
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"architecture.telegram_notify_app"
|
||||
],
|
||||
"selected_anchor": "architecture.telegram_notify_app_overview",
|
||||
"anchor_selection_reason": "relation_neighbor",
|
||||
"anchor_match_type": "semantic_fallback",
|
||||
"doc_ids": [
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"architecture.telegram_notify_app"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"architecture.telegram_notify_app:parent",
|
||||
"architecture.telegram_notify_app:Summary",
|
||||
"architecture.telegram_notify_app:Details"
|
||||
],
|
||||
"relation_hits_count": 3,
|
||||
"relation_targets": [
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"architecture.telegram_notify_app:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 2,
|
||||
"fallback_used": true,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 0,
|
||||
"facts": 0,
|
||||
"relations": 3,
|
||||
"chunks": 2,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "relation_evidence_available",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 3236,
|
||||
"tokens_in_estimate": 908
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Какие дочерние документы есть у overview архитектуры сервиса?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"documents": [],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.send_message_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "305bab0c6567d93a2b453a9d70b676f9ecd8de083ef36f5cf3398747c25ebf94",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "7bd0428d23e9b20f7d65202cc269e45b3d1e7aed7b5df4a35581fd88677be29b",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:parent",
|
||||
"content": "architecture.telegram_notify_app parent docs_root",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "docs_root",
|
||||
"doc_version": null,
|
||||
"relation_id": "e01922b36e3cc60d9349f89e43fcd4a92c6a01394b0028d6b6d56801b258645d",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Какие дочерние документы есть у overview архитектуры сервиса?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: RELATED_DOCS_EXPLAIN
|
||||
- documents: 0
|
||||
- facts: 0
|
||||
- relations: 3 | samples: architecture.telegram_notify_app:child, architecture.telegram_notify_app:related_api, architecture.telegram_notify_app:parent
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-related-docs-health",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 14,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Какие документы связаны с endpoint /health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какие документы связаны с endpoint /health?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Какие документы связаны с endpoint /health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Какие документы связаны с endpoint /health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 7998,
|
||||
"tokens_in_estimate": 2098
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+516
@@ -0,0 +1,516 @@
|
||||
# docs-v2-related-docs-health
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Какие документы связаны с endpoint /health?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 14,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы связаны с endpoint /health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какие документы связаны с endpoint /health?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы связаны с endpoint /health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы связаны с endpoint /health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 7998,
|
||||
"tokens_in_estimate": 2098
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 0,
|
||||
"facts_found": 0,
|
||||
"relations_found": 8,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/health",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 0,
|
||||
"top_ids": [],
|
||||
"skipped": true,
|
||||
"reason": "relation_primary_sufficient"
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/health"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"api.control_actions_endpoint"
|
||||
],
|
||||
"anchor_candidates": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"selected_anchor": "api.health_endpoint",
|
||||
"anchor_selection_reason": "doc_id matches requested endpoint slug",
|
||||
"anchor_match_type": "exact_path",
|
||||
"doc_ids": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.send_message_endpoint:parent",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 8,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.send_message_endpoint:parent",
|
||||
"api.control_actions_endpoint:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 6,
|
||||
"fallback_used": true,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 0,
|
||||
"facts": 0,
|
||||
"relations": 8,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "relation_evidence_available",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 7998,
|
||||
"tokens_in_estimate": 2098
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Какие документы связаны с endpoint /health?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"documents": [],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:depends_on",
|
||||
"content": "api.health_endpoint depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:parent",
|
||||
"content": "api.send_message_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"source_id": "api.send_message_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "33eb0aa97f06d0afcaa4c230b5f5b73fa2fbfa5861ea9367b6c92f8a6fe0c054",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Какие документы связаны с endpoint /health?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: RELATED_DOCS_EXPLAIN
|
||||
- documents: 0
|
||||
- facts: 0
|
||||
- relations: 8 | samples: api.control_actions_endpoint:part_of, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-system-flow-health-check",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 23,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как происходит получение health состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как происходит получение health состояния runtime?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как происходит получение health состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как происходит получение health состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 22272,
|
||||
"tokens_in_estimate": 5667
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+909
@@ -0,0 +1,909 @@
|
||||
# docs-v2-system-flow-health-check
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Как происходит получение health состояния runtime?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 23,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как происходит получение health состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как происходит получение health состояния runtime?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как происходит получение health состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как происходит получение health состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 22272,
|
||||
"tokens_in_estimate": 5667
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 0,
|
||||
"relations_found": 8,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4",
|
||||
"8595d7b82fecdb7ef579fa8961cda6799bb21970061e5bc221d4dd7a3d53fd04",
|
||||
"af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.health_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Сущность runtime health",
|
||||
"HTTP API /health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"HTTP API /send",
|
||||
"Scenario",
|
||||
"domain.runtime_health:used_by",
|
||||
"domain.runtime_health:related_logic",
|
||||
"domain.runtime_health:part_of",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"domain.runtime_health:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.health_endpoint:Сценарий",
|
||||
"api.health_endpoint:Нефункциональные требования",
|
||||
"api.health_endpoint:Summary",
|
||||
"api.health_endpoint:Описание",
|
||||
"api.health_endpoint:Функциональные требования",
|
||||
"api.health_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 8,
|
||||
"relation_targets": [
|
||||
"domain.runtime_health:used_by",
|
||||
"domain.runtime_health:related_logic",
|
||||
"domain.runtime_health:part_of",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"domain.runtime_health:parent",
|
||||
"api.control_actions_endpoint:related_api"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 0,
|
||||
"relations": 8,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 22272,
|
||||
"tokens_in_estimate": 5667
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как происходит получение health состояния runtime?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:used_by",
|
||||
"content": "domain.runtime_health used_by api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "used_by",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:related_logic",
|
||||
"content": "domain.runtime_health related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "8595d7b82fecdb7ef579fa8961cda6799bb21970061e5bc221d4dd7a3d53fd04",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:part_of",
|
||||
"content": "domain.runtime_health part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:depends_on",
|
||||
"content": "api.health_endpoint depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:parent",
|
||||
"content": "domain.runtime_health parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "79bdb0a74713df6064008179ca8c5c186dc23e4e1c5e2c9607b0bdddeba50f93",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как происходит получение health состояния runtime?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: SYSTEM_FLOW_EXPLAIN
|
||||
- documents: 6 | samples: Сущность runtime health, HTTP API /health, Цикл отправки уведомлений в Telegram
|
||||
- facts: 0
|
||||
- relations: 8 | samples: domain.runtime_health:used_by, domain.runtime_health:related_logic, domain.runtime_health:part_of
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "docs-v2-system-flow-telegram-loop",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "full_chain",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 18,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Объясни как работает цикл отправки уведомлений в Telegram"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни как работает цикл отправки уведомлений в Telegram"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Объясни как работает цикл отправки уведомлений в Telegram"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Объясни как работает цикл отправки уведомлений в Telegram"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 17592,
|
||||
"tokens_in_estimate": 4497
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+785
@@ -0,0 +1,785 @@
|
||||
# docs-v2-system-flow-telegram-loop
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v2.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: full_chain
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Объясни как работает цикл отправки уведомлений в Telegram
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 18,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни как работает цикл отправки уведомлений в Telegram"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни как работает цикл отправки уведомлений в Telegram"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни как работает цикл отправки уведомлений в Telegram"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни как работает цикл отправки уведомлений в Telegram"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 17592,
|
||||
"tokens_in_estimate": 4497
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 0,
|
||||
"relations_found": 3,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"architecture.telegram_notify_app",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"305bab0c6567d93a2b453a9d70b676f9ecd8de083ef36f5cf3398747c25ebf94",
|
||||
"7bd0428d23e9b20f7d65202cc269e45b3d1e7aed7b5df4a35581fd88677be29b",
|
||||
"0eb7f73fcda8556439e06f5eeb5ce064ae32b6cd3129353f5b1b4eb3db626d88",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"145ccbb861a8fb621286ec9c888ce69677168d35c7871c70537e888ce3a5b910"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"logic.telegram_notification_loop",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/README.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/README.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Архитектура Telegram Notify App",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /send",
|
||||
"Сущность runtime health",
|
||||
"HTTP API /health",
|
||||
"HTTP API /actions/{action}",
|
||||
"Scenario",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"architecture.telegram_notify_app:parent",
|
||||
"logic.telegram_notification_loop:Summary",
|
||||
"logic.telegram_notification_loop:Details",
|
||||
"architecture.telegram_notify_app:Summary",
|
||||
"architecture.telegram_notify_app:Details",
|
||||
"docs/README.md:Навигация",
|
||||
"api.health_endpoint:Функциональные требования"
|
||||
],
|
||||
"relation_hits_count": 3,
|
||||
"relation_targets": [
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"architecture.telegram_notify_app:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 0,
|
||||
"relations": 3,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 17592,
|
||||
"tokens_in_estimate": 4497
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Объясни как работает цикл отправки уведомлений в Telegram",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.send_message_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "305bab0c6567d93a2b453a9d70b676f9ecd8de083ef36f5cf3398747c25ebf94",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "7bd0428d23e9b20f7d65202cc269e45b3d1e7aed7b5df4a35581fd88677be29b",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:parent",
|
||||
"content": "architecture.telegram_notify_app parent docs_root",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "docs_root",
|
||||
"doc_version": null,
|
||||
"relation_id": "e01922b36e3cc60d9349f89e43fcd4a92c6a01394b0028d6b6d56801b258645d",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Объясни как работает цикл отправки уведомлений в Telegram
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: SYSTEM_FLOW_EXPLAIN
|
||||
- documents: 6 | samples: Архитектура Telegram Notify App, Цикл отправки уведомлений в Telegram, HTTP API /send
|
||||
- facts: 0
|
||||
- relations: 3 | samples: architecture.telegram_notify_app:child, architecture.telegram_notify_app:related_api, architecture.telegram_notify_app:parent
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
@@ -0,0 +1,20 @@
|
||||
# pipeline_setup_v3 summary
|
||||
|
||||
Passed: 14/14
|
||||
|
||||
| File | Case | Mode | Query | Actual sub-intent | RAG layers | Tokens | Pass |
|
||||
|------|------|------|-------|-------------------|------------|--------|------|
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-system-flow-telegram-loop | full_chain | Объясни как работает цикл отправки уведомлений в Telegram | SYSTEM_FLOW_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D4_WORKFLOW_INDEX:3, D5_RELATION_GRAPH:3 | 4497 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-system-flow-health-check | full_chain | Как происходит получение health состояния runtime? | SYSTEM_FLOW_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D4_WORKFLOW_INDEX:3, D5_RELATION_GRAPH:8 | 5667 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-component-control-channel | full_chain | Объясни как работает компонент TelegramControlChannel | COMPONENT_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D5_RELATION_GRAPH:6 | 5478 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-component-runtime-manager | full_chain | Какую роль в системе играет RuntimeManager? | COMPONENT_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D5_RELATION_GRAPH:6 | 5475 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-api-health-endpoint | full_chain | Объясни что делает endpoint /health | API_METHOD_EXPLAIN | D1_DOCUMENT_CATALOG:1, D4_WORKFLOW_INDEX:1 | 665 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-api-send-endpoint | full_chain | Как работает endpoint /send? | API_METHOD_EXPLAIN | D1_DOCUMENT_CATALOG:1, D4_WORKFLOW_INDEX:1 | 676 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-entity-runtime-health | full_chain | Что такое runtime health? | ENTITY_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D3_ENTITY_CATALOG:8, D5_RELATION_GRAPH:6 | 5165 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-entity-worker-status | full_chain | Объясни сущность WorkerStatus | ENTITY_EXPLAIN | D0_DOC_CHUNKS:1, D1_DOCUMENT_CATALOG:1, D3_ENTITY_CATALOG:2 | 737 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-related-docs-health | full_chain | Какие документы связаны с endpoint /health? | RELATED_DOCS_EXPLAIN | D0_DOC_CHUNKS:6, D5_RELATION_GRAPH:8 | 2098 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-related-docs-architecture-overview | full_chain | Какие дочерние документы есть у overview архитектуры сервиса? | RELATED_DOCS_EXPLAIN | D0_DOC_CHUNKS:2, D5_RELATION_GRAPH:3 | 908 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-openapi-health | full_chain | Сгенерируй OpenAPI для endpoint /health по документации | OPENAPI_METHOD_GENERATE | D1_DOCUMENT_CATALOG:1 | 783 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-openapi-fragment-send-request | full_chain | Сгенерируй request schema для endpoint /send | OPENAPI_FRAGMENT_GENERATE | D1_DOCUMENT_CATALOG:1 | 767 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-general-overview | full_chain | Что вообще описано в документации по этому сервису? | GENERIC_QA | D0_DOC_CHUNKS:8, D1_DOCUMENT_CATALOG:4 | 1984 | ✓ |
|
||||
| full_chain_docs_intents_v2.yaml | docs-v2-negative-missing-entity | full_chain | Что такое сущность PaymentTransaction? | ENTITY_EXPLAIN | — | 144 | ✓ |
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-health-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 10,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает /health?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 4201,
|
||||
"tokens_in_estimate": 1149
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+429
@@ -0,0 +1,429 @@
|
||||
# v3-api-health-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что делает /health?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 10,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает /health?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 4201,
|
||||
"tokens_in_estimate": 1149
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 1,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/health",
|
||||
"exact_anchor_match": true,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"docs/README.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"logic.telegram_notification_loop"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"1cff54331a52b7a92946e7afabe7e45d7e3ec693b59546f9666e494396593bc3",
|
||||
"0d923b02d15cef527d51740b7a09378a7dc74fb58db27cd059a8658ad11601a5",
|
||||
"3d3b6fcc21144cb68657be099291db0ae36d61d32d6d72fd5b7c3cb81f379877",
|
||||
"0b70cbff38a527cecfb53d3f72d573e9da1826cc75bd4cb92357e1de10988204",
|
||||
"ce6d44c30418b0b171433a144f78d4bbf53b7a060d9b7cd42b9feecc8ca3044e"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.health_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/health"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/health-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /health",
|
||||
"Scenario",
|
||||
"api.health_endpoint:Сценарий",
|
||||
"api.health_endpoint:workflow_step",
|
||||
"api.health_endpoint:mentions_entity",
|
||||
"api.health_endpoint:Нефункциональные требования",
|
||||
"api.health_endpoint:Summary",
|
||||
"api.health_endpoint:Описание",
|
||||
"api.health_endpoint:Функциональные требования",
|
||||
"api.health_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 7,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 1,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 4201,
|
||||
"tokens_in_estimate": 1149
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что делает /health?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:workflow_step",
|
||||
"content": "api.health_endpoint workflow_step Предусловия:**",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Предусловия:**",
|
||||
"fact_id": "1cff54331a52b7a92946e7afabe7e45d7e3ec693b59546f9666e494396593bc3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:mentions_entity",
|
||||
"content": "api.health_endpoint mentions_entity TelegramControlChannel",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "TelegramControlChannel",
|
||||
"fact_id": "3d3b6fcc21144cb68657be099291db0ae36d61d32d6d72fd5b7c3cb81f379877",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что делает /health?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 1 | samples: HTTP API /health
|
||||
- facts: 2 | samples: api.health_endpoint:workflow_step, api.health_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-health-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает health endpoint?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 16622,
|
||||
"tokens_in_estimate": 4254
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+754
@@ -0,0 +1,754 @@
|
||||
# v3-api-health-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Как работает health endpoint?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает health endpoint?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 16622,
|
||||
"tokens_in_estimate": 4254
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "topic",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f",
|
||||
"a8a325e0815b3a2a870ba2825f3afb3f41056b4c091df4c3bb3418ffd20891dd",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"Сущность runtime health",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"Scenario",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 16622,
|
||||
"tokens_in_estimate": 4254
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как работает health endpoint?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step Название:** Выполнение control action runtime",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Название:** Выполнение control action runtime",
|
||||
"fact_id": "f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity JSONResponse",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "JSONResponse",
|
||||
"fact_id": "b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как работает health endpoint?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /send, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-health-3",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши endpoint health"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 16614,
|
||||
"tokens_in_estimate": 4252
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+754
@@ -0,0 +1,754 @@
|
||||
# v3-api-health-3
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Опиши endpoint health
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши endpoint health"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 16614,
|
||||
"tokens_in_estimate": 4252
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "topic",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f",
|
||||
"a8a325e0815b3a2a870ba2825f3afb3f41056b4c091df4c3bb3418ffd20891dd",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"Сущность runtime health",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"Scenario",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 16614,
|
||||
"tokens_in_estimate": 4252
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Опиши endpoint health",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step Название:** Выполнение control action runtime",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Название:** Выполнение control action runtime",
|
||||
"fact_id": "f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity JSONResponse",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "JSONResponse",
|
||||
"fact_id": "b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Опиши endpoint health
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /send, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-send-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 10,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает /send?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 4384,
|
||||
"tokens_in_estimate": 1195
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+428
@@ -0,0 +1,428 @@
|
||||
# v3-api-send-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что делает /send?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 10,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает /send?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 4384,
|
||||
"tokens_in_estimate": 1195
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 1,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/send",
|
||||
"exact_anchor_match": true,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"docs/README.md"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"6bf0a662808009874a108d0c97f7cca7fc4ff7a3a3d66e0947b31bf813cfdf4d",
|
||||
"dc979c31d511a14d3af89f5f5c493fcfc0c9f2090dc16fb20ff874f4b3566221",
|
||||
"149c4e0d3d34b3faba055b1495d54818fadc882af633da70035b82190c1bd327",
|
||||
"480d85819e9298d4078f8a3bd6cfccb9c0fe2a03695b87f65f82f9aa8e2097b0",
|
||||
"7aefee9ff6110088aad1891da66fc9085eb3f77d832605a3da565deecb96e850"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/send"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send",
|
||||
"Scenario",
|
||||
"api.send_message_endpoint:Сценарий",
|
||||
"api.send_message_endpoint:workflow_step",
|
||||
"api.send_message_endpoint:mentions_entity",
|
||||
"api.send_message_endpoint:Нефункциональные требования",
|
||||
"api.send_message_endpoint:Summary",
|
||||
"api.send_message_endpoint:Описание",
|
||||
"api.send_message_endpoint:Функциональные требования",
|
||||
"api.send_message_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 7,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 1,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 4384,
|
||||
"tokens_in_estimate": 1195
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что делает /send?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:workflow_step",
|
||||
"content": "api.send_message_endpoint workflow_step Telegram credentials доступны в переменных окружения.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Telegram credentials доступны в переменных окружения.",
|
||||
"fact_id": "6bf0a662808009874a108d0c97f7cca7fc4ff7a3a3d66e0947b31bf813cfdf4d",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:mentions_entity",
|
||||
"content": "api.send_message_endpoint mentions_entity TelegramNotifyWorker",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "TelegramNotifyWorker",
|
||||
"fact_id": "149c4e0d3d34b3faba055b1495d54818fadc882af633da70035b82190c1bd327",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что делает /send?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 1 | samples: HTTP API /send
|
||||
- facts: 2 | samples: api.send_message_endpoint:workflow_step, api.send_message_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-send-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает send endpoint?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 14988,
|
||||
"tokens_in_estimate": 3846
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+726
@@ -0,0 +1,726 @@
|
||||
# v3-api-send-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Как работает send endpoint?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает send endpoint?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 14988,
|
||||
"tokens_in_estimate": 3846
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "topic",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Readme",
|
||||
"Сущность runtime health",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"Scenario",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 14988,
|
||||
"tokens_in_estimate": 3846
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как работает send endpoint?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step Название:** Выполнение control action runtime",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Название:** Выполнение control action runtime",
|
||||
"fact_id": "f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity ControlActionSet",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "ControlActionSet",
|
||||
"fact_id": "bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как работает send endpoint?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /send, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-send-3",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"docs/README.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Опиши endpoint отправки сообщений"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши endpoint отправки сообщений"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Опиши endpoint отправки сообщений"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Опиши endpoint отправки сообщений"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 14994,
|
||||
"tokens_in_estimate": 3847
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+726
@@ -0,0 +1,726 @@
|
||||
# v3-api-send-3
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Опиши endpoint отправки сообщений
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"docs/README.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши endpoint отправки сообщений"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши endpoint отправки сообщений"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши endpoint отправки сообщений"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши endpoint отправки сообщений"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 14994,
|
||||
"tokens_in_estimate": 3847
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "topic",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"docs/README.md",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/README.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"docs/README.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"Readme",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Сущность runtime health",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"Scenario",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 14994,
|
||||
"tokens_in_estimate": 3847
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Опиши endpoint отправки сообщений",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step Название:** Выполнение control action runtime",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Название:** Выполнение control action runtime",
|
||||
"fact_id": "f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity ControlActionSet",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "ControlActionSet",
|
||||
"fact_id": "bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Опиши endpoint отправки сообщений
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /send, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-component-control-channel-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как работает TelegramControlChannel?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает TelegramControlChannel?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как работает TelegramControlChannel?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как работает TelegramControlChannel?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21500,
|
||||
"tokens_in_estimate": 5474
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+900
@@ -0,0 +1,900 @@
|
||||
# v3-component-control-channel-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Как работает TelegramControlChannel?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает TelegramControlChannel?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает TelegramControlChannel?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает TelegramControlChannel?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает TelegramControlChannel?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21500,
|
||||
"tokens_in_estimate": 5474
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Readme",
|
||||
"Сущность runtime health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /send",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 21500,
|
||||
"tokens_in_estimate": 5474
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как работает TelegramControlChannel?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step HTTP control plane запущен.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "HTTP control plane запущен.",
|
||||
"fact_id": "b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity ControlActionSet",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "ControlActionSet",
|
||||
"fact_id": "bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "02530527e6e1d1e23316c9d25d0b30658d6c70063eb6e1d732d55c5ba29c9795",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как работает TelegramControlChannel?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: COMPONENT_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /actions/{action}, Архитектура Telegram Notify App, Readme
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 6 | samples: api.control_actions_endpoint:parent, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-component-control-channel-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Роль TelegramControlChannel в системе"
|
||||
},
|
||||
"output": {
|
||||
"query": "Роль TelegramControlChannel в системе"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Роль TelegramControlChannel в системе"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Роль TelegramControlChannel в системе"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21501,
|
||||
"tokens_in_estimate": 5474
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+900
@@ -0,0 +1,900 @@
|
||||
# v3-component-control-channel-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Роль TelegramControlChannel в системе
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Роль TelegramControlChannel в системе"
|
||||
},
|
||||
"output": {
|
||||
"query": "Роль TelegramControlChannel в системе"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Роль TelegramControlChannel в системе"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Роль TelegramControlChannel в системе"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21501,
|
||||
"tokens_in_estimate": 5474
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"TelegramControlChannel"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Readme",
|
||||
"Сущность runtime health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /send",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 21501,
|
||||
"tokens_in_estimate": 5474
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Роль TelegramControlChannel в системе",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step HTTP control plane запущен.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "HTTP control plane запущен.",
|
||||
"fact_id": "b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity ControlActionSet",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "ControlActionSet",
|
||||
"fact_id": "bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "02530527e6e1d1e23316c9d25d0b30658d6c70063eb6e1d732d55c5ba29c9795",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Роль TelegramControlChannel в системе
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: COMPONENT_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /actions/{action}, Архитектура Telegram Notify App, Readme
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 6 | samples: api.control_actions_endpoint:parent, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-component-runtime-manager-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что делает RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает RuntimeManager?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что делает RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что делает RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21490,
|
||||
"tokens_in_estimate": 5471
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+900
@@ -0,0 +1,900 @@
|
||||
# v3-component-runtime-manager-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что делает RuntimeManager?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает RuntimeManager?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21490,
|
||||
"tokens_in_estimate": 5471
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Readme",
|
||||
"Сущность runtime health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /send",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 21490,
|
||||
"tokens_in_estimate": 5471
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что делает RuntimeManager?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step HTTP control plane запущен.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "HTTP control plane запущен.",
|
||||
"fact_id": "b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity ControlActionSet",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "ControlActionSet",
|
||||
"fact_id": "bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "02530527e6e1d1e23316c9d25d0b30658d6c70063eb6e1d732d55c5ba29c9795",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что делает RuntimeManager?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: COMPONENT_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /actions/{action}, Архитектура Telegram Notify App, Readme
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 6 | samples: api.control_actions_endpoint:parent, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-component-runtime-manager-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как устроен RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как устроен RuntimeManager?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как устроен RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как устроен RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21491,
|
||||
"tokens_in_estimate": 5471
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+900
@@ -0,0 +1,900 @@
|
||||
# v3-component-runtime-manager-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Как устроен RuntimeManager?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как устроен RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как устроен RuntimeManager?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как устроен RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как устроен RuntimeManager?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21491,
|
||||
"tokens_in_estimate": 5471
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Readme",
|
||||
"Сущность runtime health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /send",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 21491,
|
||||
"tokens_in_estimate": 5471
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как устроен RuntimeManager?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step HTTP control plane запущен.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "HTTP control plane запущен.",
|
||||
"fact_id": "b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity ControlActionSet",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "ControlActionSet",
|
||||
"fact_id": "bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "02530527e6e1d1e23316c9d25d0b30658d6c70063eb6e1d732d55c5ba29c9795",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как устроен RuntimeManager?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: COMPONENT_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /actions/{action}, Архитектура Telegram Notify App, Readme
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 6 | samples: api.control_actions_endpoint:parent, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-component-runtime-manager-3",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Опиши компонент RuntimeManager"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши компонент RuntimeManager"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Опиши компонент RuntimeManager"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Опиши компонент RuntimeManager"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21494,
|
||||
"tokens_in_estimate": 5472
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+900
@@ -0,0 +1,900 @@
|
||||
# v3-component-runtime-manager-3
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Опиши компонент RuntimeManager
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 20,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши компонент RuntimeManager"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши компонент RuntimeManager"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши компонент RuntimeManager"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши компонент RuntimeManager"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 21494,
|
||||
"tokens_in_estimate": 5472
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "component",
|
||||
"matched_anchor_value": "RuntimeManager",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"RuntimeManager"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Readme",
|
||||
"Сущность runtime health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /send",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 21494,
|
||||
"tokens_in_estimate": 5472
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Опиши компонент RuntimeManager",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step HTTP control plane запущен.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "HTTP control plane запущен.",
|
||||
"fact_id": "b480201013a7e5231146f665773ebc54af37c28135f407c6b758304c74561645",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity ControlActionSet",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "ControlActionSet",
|
||||
"fact_id": "bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.control_actions_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "02530527e6e1d1e23316c9d25d0b30658d6c70063eb6e1d732d55c5ba29c9795",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Опиши компонент RuntimeManager
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: COMPONENT_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /actions/{action}, Архитектура Telegram Notify App, Readme
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 6 | samples: api.control_actions_endpoint:parent, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-entity-runtime-health-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 26,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"runtime health"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что такое runtime health?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 20267,
|
||||
"tokens_in_estimate": 5165
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+865
@@ -0,0 +1,865 @@
|
||||
# v3-entity-runtime-health-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что такое runtime health?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 26,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"runtime health"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что такое runtime health?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое runtime health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 20267,
|
||||
"tokens_in_estimate": 5165
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 0,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D3_ENTITY_CATALOG": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"domain.runtime_health"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"79bdb0a74713df6064008179ca8c5c186dc23e4e1c5e2c9607b0bdddeba50f93",
|
||||
"af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
|
||||
"77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.health_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"runtime health"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"RuntimeManager",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"WorkerHealth",
|
||||
"Сущность runtime health",
|
||||
"HTTP API /health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"HTTP API /send",
|
||||
"domain.runtime_health:parent",
|
||||
"domain.runtime_health:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"domain.runtime_health:used_by",
|
||||
"api.health_endpoint:Сценарий",
|
||||
"api.health_endpoint:Нефункциональные требования",
|
||||
"api.health_endpoint:Summary",
|
||||
"api.health_endpoint:Описание",
|
||||
"api.health_endpoint:Функциональные требования",
|
||||
"api.health_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"domain.runtime_health:parent",
|
||||
"domain.runtime_health:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"domain.runtime_health:used_by"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 0,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 20267,
|
||||
"tokens_in_estimate": 5165
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что такое runtime health?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:parent",
|
||||
"content": "domain.runtime_health parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "79bdb0a74713df6064008179ca8c5c186dc23e4e1c5e2c9607b0bdddeba50f93",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:part_of",
|
||||
"content": "domain.runtime_health part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:depends_on",
|
||||
"content": "api.health_endpoint depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:used_by",
|
||||
"content": "domain.runtime_health used_by api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "used_by",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что такое runtime health?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: ENTITY_EXPLAIN
|
||||
- documents: 6 | samples: Сущность runtime health, HTTP API /health, Цикл отправки уведомлений в Telegram
|
||||
- facts: 0
|
||||
- relations: 6 | samples: domain.runtime_health:parent, domain.runtime_health:part_of, api.health_endpoint:depends_on
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-entity-runtime-health-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": false,
|
||||
"mismatches": [
|
||||
"sub_intent: expected ENTITY_EXPLAIN, got GENERIC_QA"
|
||||
],
|
||||
"actual": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 12,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"runtime health"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Объясни runtime health"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни runtime health"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Объясни runtime health"
|
||||
},
|
||||
"output": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Объясни runtime health"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_general_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_general_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 345,
|
||||
"user_chars": 9449,
|
||||
"tokens_in_estimate": 2449
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+528
@@ -0,0 +1,528 @@
|
||||
# v3-entity-runtime-health-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: False
|
||||
|
||||
## Query
|
||||
Объясни runtime health
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 12,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"runtime health"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни runtime health"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни runtime health"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни runtime health"
|
||||
},
|
||||
"output": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни runtime health"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_general_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_general_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 345,
|
||||
"user_chars": 9449,
|
||||
"tokens_in_estimate": 2449
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 4,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 4,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"api.health_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"runtime health"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Сущность runtime health",
|
||||
"HTTP API /health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /actions/{action}",
|
||||
"api.health_endpoint:Функциональные требования",
|
||||
"api.health_endpoint:Выходные параметры",
|
||||
"api.health_endpoint:Описание",
|
||||
"api.health_endpoint:Сценарий",
|
||||
"api.health_endpoint:Нефункциональные требования",
|
||||
"api.health_endpoint:Входные параметры",
|
||||
"api.health_endpoint:Summary",
|
||||
"api.health_endpoint:Пример ответа"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 4,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 8,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_general_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 345,
|
||||
"user_chars": 9449,
|
||||
"tokens_in_estimate": 2449
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты отвечаешь на общий вопрос по документации проекта.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные документы и факты
|
||||
- Не додумывай отсутствующие детали
|
||||
- Если данных недостаточно, скажи это прямо
|
||||
- Дай короткий понятный ответ без лишней структуры
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Объясни runtime health",
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Объясни runtime health
|
||||
- intent: GENERAL_QA
|
||||
- sub_intent: GENERIC_QA
|
||||
- documents: 4 | samples: Сущность runtime health, HTTP API /health, Цикл отправки уведомлений в Telegram
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- sub_intent: expected ENTITY_EXPLAIN, got GENERIC_QA
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-entity-worker-status-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 26,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"docs/README.md",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"WorkerStatus"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что такое WorkerStatus?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что такое WorkerStatus?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что такое WorkerStatus?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что такое WorkerStatus?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 18776,
|
||||
"tokens_in_estimate": 4793
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+849
@@ -0,0 +1,849 @@
|
||||
# v3-entity-worker-status-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что такое WorkerStatus?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 26,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"docs/README.md",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"WorkerStatus"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое WorkerStatus?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что такое WorkerStatus?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое WorkerStatus?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое WorkerStatus?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 18776,
|
||||
"tokens_in_estimate": 4793
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 0,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D3_ENTITY_CATALOG": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"WorkerStatus"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"WorkerStatus"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/README.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"docs/README.md",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"WorkerStatus",
|
||||
"JSONResponse",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth",
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramControlChannel",
|
||||
"Readme",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"HTTP API /send",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Сущность runtime health",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"logic.telegram_notification_loop:Details",
|
||||
"docs/README.md:Навигация",
|
||||
"docs/README.md:Правила и шаблоны",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"docs/README.md:Структура"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.control_actions_endpoint:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 0,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 18776,
|
||||
"tokens_in_estimate": 4793
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что такое WorkerStatus?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что такое WorkerStatus?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: ENTITY_EXPLAIN
|
||||
- documents: 6 | samples: Readme, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 0
|
||||
- relations: 6 | samples: api.control_actions_endpoint:part_of, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-entity-worker-status-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": false,
|
||||
"mismatches": [
|
||||
"sub_intent: expected ENTITY_EXPLAIN, got GENERIC_QA"
|
||||
],
|
||||
"actual": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 12,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Опиши статус воркера"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши статус воркера"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Опиши статус воркера"
|
||||
},
|
||||
"output": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Опиши статус воркера"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_general_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_general_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 345,
|
||||
"user_chars": 7558,
|
||||
"tokens_in_estimate": 1976
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+493
@@ -0,0 +1,493 @@
|
||||
# v3-entity-worker-status-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: False
|
||||
|
||||
## Query
|
||||
Опиши статус воркера
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 12,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши статус воркера"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши статус воркера"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши статус воркера"
|
||||
},
|
||||
"output": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши статус воркера"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_general_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_general_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 345,
|
||||
"user_chars": 7558,
|
||||
"tokens_in_estimate": 1976
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 4,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 4,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/README.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Readme",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"HTTP API /send",
|
||||
"docs/README.md:Структура",
|
||||
"docs/README.md:Навигация",
|
||||
"docs/README.md:Правила и шаблоны",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"docs/README.md:Project Docs"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 4,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 8,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_general_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 345,
|
||||
"user_chars": 7558,
|
||||
"tokens_in_estimate": 1976
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты отвечаешь на общий вопрос по документации проекта.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные документы и факты
|
||||
- Не додумывай отсутствующие детали
|
||||
- Если данных недостаточно, скажи это прямо
|
||||
- Дай короткий понятный ответ без лишней структуры
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Опиши статус воркера",
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Опиши статус воркера
|
||||
- intent: GENERAL_QA
|
||||
- sub_intent: GENERIC_QA
|
||||
- documents: 4 | samples: Readme, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- sub_intent: expected ENTITY_EXPLAIN, got GENERIC_QA
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-general-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": false,
|
||||
"mismatches": [
|
||||
"sub_intent: expected GENERIC_QA, got COMPONENT_EXPLAIN"
|
||||
],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 19,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что есть в документации?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что есть в документации?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что есть в документации?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что есть в документации?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 19762,
|
||||
"tokens_in_estimate": 5039
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+859
@@ -0,0 +1,859 @@
|
||||
# v3-general-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: False
|
||||
|
||||
## Query
|
||||
Что есть в документации?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 19,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что есть в документации?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что есть в документации?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что есть в документации?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что есть в документации?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 19762,
|
||||
"tokens_in_estimate": 5039
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 1,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"2f539384881f5f776bf4cef22c00669e53e0fd0761b3d62fa53593254a272f5a",
|
||||
"5a27c821aa4efea9f2a7c883b57d1f53ec3af31348abd220bc09f47fbca73e93",
|
||||
"0102eac8e4f8b452b0351a4aa8dca63e4774beadac71eba483708d7a90ff1cc0",
|
||||
"43fc2c29bf6f353fa55f1b8a05c903dbd1a0e8067b026b9455043669ceca37d9",
|
||||
"a31bbca2eb31ffb6655bcec7ff07b8cf2b6c7416610cf58dfc1e0c737df12fe1"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/README.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Readme",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"HTTP API /send",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Сущность runtime health",
|
||||
"docs/README.md:doc_list_item",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"docs/README.md:Структура",
|
||||
"docs/README.md:Навигация",
|
||||
"docs/README.md:Правила и шаблоны",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"docs/README.md:Project Docs"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.control_actions_endpoint:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 1,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 1,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 19762,
|
||||
"tokens_in_estimate": 5039
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что есть в документации?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/README.md",
|
||||
"title": "docs/README.md:doc_list_item",
|
||||
"content": "docs/README.md doc_list_item `documentation/api/` — документация HTTP API control plane.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Структура",
|
||||
"doc_id": null,
|
||||
"object": "`documentation/api/` — документация HTTP API control plane.",
|
||||
"fact_id": "2f539384881f5f776bf4cef22c00669e53e0fd0761b3d62fa53593254a272f5a",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"predicate": "doc_list_item",
|
||||
"object_ref": null,
|
||||
"subject_id": "docs/README.md",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/README.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что есть в документации?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: COMPONENT_EXPLAIN
|
||||
- documents: 6 | samples: Readme, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 1 | samples: docs/README.md:doc_list_item
|
||||
- relations: 6 | samples: api.control_actions_endpoint:part_of, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- sub_intent: expected GENERIC_QA, got COMPONENT_EXPLAIN
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-general-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": false,
|
||||
"mismatches": [
|
||||
"sub_intent: expected GENERIC_QA, got COMPONENT_EXPLAIN"
|
||||
],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 19,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Какая структура документации?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какая структура документации?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Какая структура документации?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Какая структура документации?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 19767,
|
||||
"tokens_in_estimate": 5040
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+859
@@ -0,0 +1,859 @@
|
||||
# v3-general-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: False
|
||||
|
||||
## Query
|
||||
Какая структура документации?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 19,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какая структура документации?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какая структура документации?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какая структура документации?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какая структура документации?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 19767,
|
||||
"tokens_in_estimate": 5040
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 1,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"2f539384881f5f776bf4cef22c00669e53e0fd0761b3d62fa53593254a272f5a",
|
||||
"5a27c821aa4efea9f2a7c883b57d1f53ec3af31348abd220bc09f47fbca73e93",
|
||||
"0102eac8e4f8b452b0351a4aa8dca63e4774beadac71eba483708d7a90ff1cc0",
|
||||
"43fc2c29bf6f353fa55f1b8a05c903dbd1a0e8067b026b9455043669ceca37d9",
|
||||
"a31bbca2eb31ffb6655bcec7ff07b8cf2b6c7416610cf58dfc1e0c737df12fe1"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/README.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Readme",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"HTTP API /send",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Сущность runtime health",
|
||||
"docs/README.md:doc_list_item",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"docs/README.md:Структура",
|
||||
"docs/README.md:Навигация",
|
||||
"docs/README.md:Правила и шаблоны",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"docs/README.md:Project Docs"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.control_actions_endpoint:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 1,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 1,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 19767,
|
||||
"tokens_in_estimate": 5040
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Какая структура документации?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "COMPONENT_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/README.md",
|
||||
"title": "docs/README.md:doc_list_item",
|
||||
"content": "docs/README.md doc_list_item `documentation/api/` — документация HTTP API control plane.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Структура",
|
||||
"doc_id": null,
|
||||
"object": "`documentation/api/` — документация HTTP API control plane.",
|
||||
"fact_id": "2f539384881f5f776bf4cef22c00669e53e0fd0761b3d62fa53593254a272f5a",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"predicate": "doc_list_item",
|
||||
"object_ref": null,
|
||||
"subject_id": "docs/README.md",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/README.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Какая структура документации?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: COMPONENT_EXPLAIN
|
||||
- documents: 6 | samples: Readme, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 1 | samples: docs/README.md:doc_list_item
|
||||
- relations: 6 | samples: api.control_actions_endpoint:part_of, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- sub_intent: expected GENERIC_QA, got COMPONENT_EXPLAIN
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-general-3",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 12,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "С чего начать читать документацию?"
|
||||
},
|
||||
"output": {
|
||||
"query": "С чего начать читать документацию?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "С чего начать читать документацию?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "С чего начать читать документацию?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_general_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_general_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 345,
|
||||
"user_chars": 7572,
|
||||
"tokens_in_estimate": 1980
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+493
@@ -0,0 +1,493 @@
|
||||
# v3-general-3
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
С чего начать читать документацию?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 12,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "С чего начать читать документацию?"
|
||||
},
|
||||
"output": {
|
||||
"query": "С чего начать читать документацию?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "С чего начать читать документацию?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "С чего начать читать документацию?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_general_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_general_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 345,
|
||||
"user_chars": 7572,
|
||||
"tokens_in_estimate": 1980
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 4,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 4,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/README.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Readme",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"HTTP API /send",
|
||||
"docs/README.md:Структура",
|
||||
"docs/README.md:Навигация",
|
||||
"docs/README.md:Правила и шаблоны",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"docs/README.md:Project Docs"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 4,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 8,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_general_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 345,
|
||||
"user_chars": 7572,
|
||||
"tokens_in_estimate": 1980
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты отвечаешь на общий вопрос по документации проекта.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные документы и факты
|
||||
- Не додумывай отсутствующие детали
|
||||
- Если данных недостаточно, скажи это прямо
|
||||
- Дай короткий понятный ответ без лишней структуры
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "С чего начать читать документацию?",
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: С чего начать читать документацию?
|
||||
- intent: GENERAL_QA
|
||||
- sub_intent: GENERIC_QA
|
||||
- documents: 4 | samples: Readme, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-negative-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 26,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"docs/README.md",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"PaymentTransaction"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что такое PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что такое PaymentTransaction?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что такое PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что такое PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 18782,
|
||||
"tokens_in_estimate": 4794
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+841
@@ -0,0 +1,841 @@
|
||||
# v3-negative-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что такое PaymentTransaction?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 26,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"docs/README.md",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [
|
||||
"PaymentTransaction"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что такое PaymentTransaction?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что такое PaymentTransaction?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 18782,
|
||||
"tokens_in_estimate": 4794
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 0,
|
||||
"relations_found": 6,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D3_ENTITY_CATALOG": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"PaymentTransaction"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"PaymentTransaction"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/README.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"docs/README.md",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"ControlActionSet",
|
||||
"JSONResponse",
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth",
|
||||
"TelegramControlAppFactory",
|
||||
"Readme",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"HTTP API /send",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Сущность runtime health",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"docs/README.md:Структура",
|
||||
"docs/README.md:Навигация",
|
||||
"docs/README.md:Правила и шаблоны",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"docs/README.md:Project Docs"
|
||||
],
|
||||
"relation_hits_count": 6,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.control_actions_endpoint:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 0,
|
||||
"relations": 6,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 18782,
|
||||
"tokens_in_estimate": 4794
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что такое PaymentTransaction?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что такое PaymentTransaction?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: ENTITY_EXPLAIN
|
||||
- documents: 6 | samples: Readme, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 0
|
||||
- relations: 6 | samples: api.control_actions_endpoint:part_of, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-negative-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 0,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "degraded",
|
||||
"path_scope": [],
|
||||
"doc_scope": [],
|
||||
"entity_candidates": [
|
||||
"UnknownEntity"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "reject",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": "not_found_exact_anchor",
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Объясни сущность UnknownEntity"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни сущность UnknownEntity"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Объясни сущность UnknownEntity"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Объясни сущность UnknownEntity"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "degraded",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 174,
|
||||
"tokens_in_estimate": 142
|
||||
}
|
||||
},
|
||||
"degraded_reason": "not_found_exact_anchor"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+307
@@ -0,0 +1,307 @@
|
||||
# v3-negative-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Объясни сущность UnknownEntity
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 0,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "degraded",
|
||||
"path_scope": [],
|
||||
"doc_scope": [],
|
||||
"entity_candidates": [
|
||||
"UnknownEntity"
|
||||
],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "reject",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": "not_found_exact_anchor",
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни сущность UnknownEntity"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни сущность UnknownEntity"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни сущность UnknownEntity"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни сущность UnknownEntity"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "degraded",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 174,
|
||||
"tokens_in_estimate": 142
|
||||
}
|
||||
},
|
||||
"degraded_reason": "not_found_exact_anchor"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 0,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": false,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "entity",
|
||||
"matched_anchor_value": "UnknownEntity",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D3_ENTITY_CATALOG",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D3_ENTITY_CATALOG": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [
|
||||
"UnknownEntity"
|
||||
],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"UnknownEntity"
|
||||
],
|
||||
"resolved_anchor_candidates": [],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [],
|
||||
"doc_paths": [],
|
||||
"doc_titles": [],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 0,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 0,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 0,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "reject",
|
||||
"gate_decision_reason": "not_found_exact_anchor",
|
||||
"gate_missing_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"gate_satisfied_requirements": [],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "degraded",
|
||||
"degrade_reason": "not_found_exact_anchor",
|
||||
"degraded_reason": "not_found_exact_anchor",
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 174,
|
||||
"tokens_in_estimate": 142
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Объясни сущность UnknownEntity",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "ENTITY_EXPLAIN",
|
||||
"documents": [],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Объясни сущность UnknownEntity
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: ENTITY_EXPLAIN
|
||||
- documents: 0
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-negative-3",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 0,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "degraded",
|
||||
"path_scope": [],
|
||||
"doc_scope": [],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "reject",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": "not_found_exact_anchor",
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что делает endpoint /unknown?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает endpoint /unknown?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что делает endpoint /unknown?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что делает endpoint /unknown?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "degraded",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 177,
|
||||
"tokens_in_estimate": 143
|
||||
}
|
||||
},
|
||||
"degraded_reason": "not_found_exact_anchor"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+303
@@ -0,0 +1,303 @@
|
||||
# v3-negative-3
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что делает endpoint /unknown?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 0,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "degraded",
|
||||
"path_scope": [],
|
||||
"doc_scope": [],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "reject",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": "not_found_exact_anchor",
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает endpoint /unknown?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает endpoint /unknown?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает endpoint /unknown?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает endpoint /unknown?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "degraded",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 177,
|
||||
"tokens_in_estimate": 143
|
||||
}
|
||||
},
|
||||
"degraded_reason": "not_found_exact_anchor"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 0,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": false,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/unknown",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"docs/README.md",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/unknown"
|
||||
],
|
||||
"resolved_anchor_candidates": [],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [],
|
||||
"doc_paths": [],
|
||||
"doc_titles": [],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 0,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 0,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 0,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "reject",
|
||||
"gate_decision_reason": "not_found_exact_anchor",
|
||||
"gate_missing_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"gate_satisfied_requirements": [],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "degraded",
|
||||
"degrade_reason": "not_found_exact_anchor",
|
||||
"degraded_reason": "not_found_exact_anchor",
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 177,
|
||||
"tokens_in_estimate": 143
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что делает endpoint /unknown?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что делает endpoint /unknown?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 0
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-related-architecture-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 14,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Какие документы связаны с архитектурой?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какие документы связаны с архитектурой?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Какие документы связаны с архитектурой?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Какие документы связаны с архитектурой?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 7994,
|
||||
"tokens_in_estimate": 2097
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+513
@@ -0,0 +1,513 @@
|
||||
# v3-related-architecture-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Какие документы связаны с архитектурой?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 14,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы связаны с архитектурой?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какие документы связаны с архитектурой?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы связаны с архитектурой?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы связаны с архитектурой?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 7994,
|
||||
"tokens_in_estimate": 2097
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 0,
|
||||
"facts_found": 0,
|
||||
"relations_found": 8,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 0,
|
||||
"top_ids": [],
|
||||
"skipped": true,
|
||||
"reason": "relation_primary_sufficient"
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"api.control_actions_endpoint"
|
||||
],
|
||||
"anchor_candidates": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"selected_anchor": "api.control_actions_endpoint",
|
||||
"anchor_selection_reason": "relation_neighbor",
|
||||
"anchor_match_type": "semantic_fallback",
|
||||
"doc_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.send_message_endpoint:parent",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 8,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.send_message_endpoint:parent",
|
||||
"api.control_actions_endpoint:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 6,
|
||||
"fallback_used": true,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 0,
|
||||
"facts": 0,
|
||||
"relations": 8,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "relation_evidence_available",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 7994,
|
||||
"tokens_in_estimate": 2097
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Какие документы связаны с архитектурой?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"documents": [],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:depends_on",
|
||||
"content": "api.health_endpoint depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:parent",
|
||||
"content": "api.send_message_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"source_id": "api.send_message_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "33eb0aa97f06d0afcaa4c230b5f5b73fa2fbfa5861ea9367b6c92f8a6fe0c054",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Какие документы связаны с архитектурой?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: RELATED_DOCS_EXPLAIN
|
||||
- documents: 0
|
||||
- facts: 0
|
||||
- relations: 8 | samples: api.control_actions_endpoint:part_of, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-related-health-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 14,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.control_actions_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что связано с /health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что связано с /health?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что связано с /health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что связано с /health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 7884,
|
||||
"tokens_in_estimate": 2070
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+516
@@ -0,0 +1,516 @@
|
||||
# v3-related-health-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что связано с /health?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 14,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.control_actions_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что связано с /health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что связано с /health?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что связано с /health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что связано с /health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 7884,
|
||||
"tokens_in_estimate": 2070
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 0,
|
||||
"facts_found": 0,
|
||||
"relations_found": 8,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/health",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4",
|
||||
"8595d7b82fecdb7ef579fa8961cda6799bb21970061e5bc221d4dd7a3d53fd04",
|
||||
"af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 0,
|
||||
"top_ids": [],
|
||||
"skipped": true,
|
||||
"reason": "relation_primary_sufficient"
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/health"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.control_actions_endpoint"
|
||||
],
|
||||
"anchor_candidates": [
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.control_actions_endpoint"
|
||||
],
|
||||
"selected_anchor": "api.health_endpoint",
|
||||
"anchor_selection_reason": "doc_id matches requested endpoint slug",
|
||||
"anchor_match_type": "exact_path",
|
||||
"doc_ids": [
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.control_actions_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"domain.runtime_health:used_by",
|
||||
"domain.runtime_health:related_logic",
|
||||
"domain.runtime_health:part_of",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"domain.runtime_health:parent",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 8,
|
||||
"relation_targets": [
|
||||
"domain.runtime_health:used_by",
|
||||
"domain.runtime_health:related_logic",
|
||||
"domain.runtime_health:part_of",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"domain.runtime_health:parent",
|
||||
"api.control_actions_endpoint:related_api"
|
||||
],
|
||||
"fallback_doc_hits_count": 6,
|
||||
"fallback_used": true,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 0,
|
||||
"facts": 0,
|
||||
"relations": 8,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "relation_evidence_available",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 7884,
|
||||
"tokens_in_estimate": 2070
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что связано с /health?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"documents": [],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:used_by",
|
||||
"content": "domain.runtime_health used_by api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "used_by",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:related_logic",
|
||||
"content": "domain.runtime_health related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "8595d7b82fecdb7ef579fa8961cda6799bb21970061e5bc221d4dd7a3d53fd04",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:part_of",
|
||||
"content": "domain.runtime_health part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:depends_on",
|
||||
"content": "api.health_endpoint depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:parent",
|
||||
"content": "domain.runtime_health parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "79bdb0a74713df6064008179ca8c5c186dc23e4e1c5e2c9607b0bdddeba50f93",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что связано с /health?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: RELATED_DOCS_EXPLAIN
|
||||
- documents: 0
|
||||
- facts: 0
|
||||
- relations: 8 | samples: domain.runtime_health:used_by, domain.runtime_health:related_logic, domain.runtime_health:part_of
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-related-health-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 14,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Какие документы относятся к health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какие документы относятся к health endpoint?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Какие документы относятся к health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Какие документы относятся к health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 7999,
|
||||
"tokens_in_estimate": 2098
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+513
@@ -0,0 +1,513 @@
|
||||
# v3-related-health-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Какие документы относятся к health endpoint?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 14,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы относятся к health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какие документы относятся к health endpoint?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы относятся к health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы относятся к health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 7999,
|
||||
"tokens_in_estimate": 2098
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 0,
|
||||
"facts_found": 0,
|
||||
"relations_found": 8,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "topic",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 0,
|
||||
"top_ids": [],
|
||||
"skipped": true,
|
||||
"reason": "relation_primary_sufficient"
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"api.control_actions_endpoint"
|
||||
],
|
||||
"anchor_candidates": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"selected_anchor": "api.control_actions_endpoint",
|
||||
"anchor_selection_reason": "relation_neighbor",
|
||||
"anchor_match_type": "semantic_fallback",
|
||||
"doc_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.send_message_endpoint:parent",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 8,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.send_message_endpoint:parent",
|
||||
"api.control_actions_endpoint:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 6,
|
||||
"fallback_used": true,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 0,
|
||||
"facts": 0,
|
||||
"relations": 8,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "relation_evidence_available",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 7999,
|
||||
"tokens_in_estimate": 2098
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Какие документы относятся к health endpoint?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"documents": [],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:depends_on",
|
||||
"content": "api.health_endpoint depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:parent",
|
||||
"content": "api.send_message_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"source_id": "api.send_message_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "33eb0aa97f06d0afcaa4c230b5f5b73fa2fbfa5861ea9367b6c92f8a6fe0c054",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Какие документы относятся к health endpoint?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: RELATED_DOCS_EXPLAIN
|
||||
- documents: 0
|
||||
- facts: 0
|
||||
- relations: 8 | samples: api.control_actions_endpoint:part_of, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-related-send-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 14,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Какие документы связаны с /send?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какие документы связаны с /send?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Какие документы связаны с /send?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Какие документы связаны с /send?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 8086,
|
||||
"tokens_in_estimate": 2120
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+521
@@ -0,0 +1,521 @@
|
||||
# v3-related-send-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Какие документы связаны с /send?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 14,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы связаны с /send?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Какие документы связаны с /send?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы связаны с /send?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Какие документы связаны с /send?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 8086,
|
||||
"tokens_in_estimate": 2120
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 0,
|
||||
"facts_found": 0,
|
||||
"relations_found": 8,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "graph_summary",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/send",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D5_RELATION_GRAPH",
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D5_RELATION_GRAPH"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"33eb0aa97f06d0afcaa4c230b5f5b73fa2fbfa5861ea9367b6c92f8a6fe0c054",
|
||||
"53dbf99d1ed72fb30e988fa7080e6ec3d0028d2a1e896e4e818f2492cc161bf5",
|
||||
"a5c452b6685216d12fc857cd5b10a19b347655b1f1fd9f59d64fd413e93e36a5",
|
||||
"d3d3ce25ca6434582c9bbb8f94ab89c7a2a497f46f1124f7e335c217281d42d9",
|
||||
"305bab0c6567d93a2b453a9d70b676f9ecd8de083ef36f5cf3398747c25ebf94"
|
||||
]
|
||||
},
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 0,
|
||||
"top_ids": [],
|
||||
"skipped": true,
|
||||
"reason": "relation_primary_sufficient"
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.health_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/send"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"selected_anchor": "api.send_message_endpoint",
|
||||
"anchor_selection_reason": "doc_id matches requested endpoint slug",
|
||||
"anchor_match_type": "exact_path",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/health-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"api.send_message_endpoint:parent",
|
||||
"api.send_message_endpoint:depends_on",
|
||||
"api.send_message_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"logic.telegram_notification_loop:related_api",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:Summary",
|
||||
"api.health_endpoint:Описание",
|
||||
"api.health_endpoint:Сценарий",
|
||||
"api.health_endpoint:Функциональные требования",
|
||||
"api.health_endpoint:Нефункциональные требования",
|
||||
"api.health_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 8,
|
||||
"relation_targets": [
|
||||
"api.send_message_endpoint:parent",
|
||||
"api.send_message_endpoint:depends_on",
|
||||
"api.send_message_endpoint:part_of",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"logic.telegram_notification_loop:related_api",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.health_endpoint:part_of"
|
||||
],
|
||||
"fallback_doc_hits_count": 6,
|
||||
"fallback_used": true,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 0,
|
||||
"facts": 0,
|
||||
"relations": 8,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "relation_evidence_available",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 8086,
|
||||
"tokens_in_estimate": 2120
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Какие документы связаны с /send?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "RELATED_DOCS_EXPLAIN",
|
||||
"documents": [],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:parent",
|
||||
"content": "api.send_message_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"source_id": "api.send_message_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "33eb0aa97f06d0afcaa4c230b5f5b73fa2fbfa5861ea9367b6c92f8a6fe0c054",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:depends_on",
|
||||
"content": "api.send_message_endpoint depends_on logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"source_id": "api.send_message_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "53dbf99d1ed72fb30e988fa7080e6ec3d0028d2a1e896e4e818f2492cc161bf5",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:part_of",
|
||||
"content": "api.send_message_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"source_id": "api.send_message_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "a5c452b6685216d12fc857cd5b10a19b347655b1f1fd9f59d64fd413e93e36a5",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.send_message_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "d3d3ce25ca6434582c9bbb8f94ab89c7a2a497f46f1124f7e335c217281d42d9",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.send_message_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "305bab0c6567d93a2b453a9d70b676f9ecd8de083ef36f5cf3398747c25ebf94",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "logic.telegram_notification_loop:related_api",
|
||||
"content": "logic.telegram_notification_loop related_api api.send_message_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"source_id": "logic.telegram_notification_loop",
|
||||
"target_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "6b692f308b472d540c199a26362f4ec8d35e1e6859c1141518e0d6667148e981",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:depends_on",
|
||||
"content": "api.health_endpoint depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Какие документы связаны с /send?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: RELATED_DOCS_EXPLAIN
|
||||
- documents: 0
|
||||
- facts: 0
|
||||
- relations: 8 | samples: api.send_message_endpoint:parent, api.send_message_endpoint:depends_on, api.send_message_endpoint:part_of
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-system-flow-health-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": false,
|
||||
"mismatches": [
|
||||
"sub_intent: expected SYSTEM_FLOW_EXPLAIN, got GENERIC_QA"
|
||||
],
|
||||
"actual": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 12,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как работает health check runtime?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает health check runtime?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как работает health check runtime?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как работает health check runtime?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_general_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_general_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 345,
|
||||
"user_chars": 9461,
|
||||
"tokens_in_estimate": 2452
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+524
@@ -0,0 +1,524 @@
|
||||
# v3-system-flow-health-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: False
|
||||
|
||||
## Query
|
||||
Как работает health check runtime?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 12,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает health check runtime?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает health check runtime?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает health check runtime?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает health check runtime?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_general_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_general_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 345,
|
||||
"user_chars": 9461,
|
||||
"tokens_in_estimate": 2452
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 4,
|
||||
"facts_found": 0,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_general_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 4,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"api.health_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Сущность runtime health",
|
||||
"HTTP API /health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /actions/{action}",
|
||||
"api.health_endpoint:Функциональные требования",
|
||||
"api.health_endpoint:Выходные параметры",
|
||||
"api.health_endpoint:Описание",
|
||||
"api.health_endpoint:Сценарий",
|
||||
"api.health_endpoint:Нефункциональные требования",
|
||||
"api.health_endpoint:Входные параметры",
|
||||
"api.health_endpoint:Summary",
|
||||
"api.health_endpoint:Пример ответа"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 4,
|
||||
"facts": 0,
|
||||
"relations": 0,
|
||||
"chunks": 8,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_general_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 345,
|
||||
"user_chars": 9461,
|
||||
"tokens_in_estimate": 2452
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты отвечаешь на общий вопрос по документации проекта.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные документы и факты
|
||||
- Не додумывай отсутствующие детали
|
||||
- Если данных недостаточно, скажи это прямо
|
||||
- Дай короткий понятный ответ без лишней структуры
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как работает health check runtime?",
|
||||
"intent": "GENERAL_QA",
|
||||
"sub_intent": "GENERIC_QA",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как работает health check runtime?
|
||||
- intent: GENERAL_QA
|
||||
- sub_intent: GENERIC_QA
|
||||
- documents: 4 | samples: Сущность runtime health, HTTP API /health, Цикл отправки уведомлений в Telegram
|
||||
- facts: 0
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- sub_intent: expected SYSTEM_FLOW_EXPLAIN, got GENERIC_QA
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-system-flow-health-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 23,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"api.send_message_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как происходит проверка состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как происходит проверка состояния runtime?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как происходит проверка состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как происходит проверка состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 22363,
|
||||
"tokens_in_estimate": 5689
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+915
@@ -0,0 +1,915 @@
|
||||
# v3-system-flow-health-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Как происходит проверка состояния runtime?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 23,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"api.send_message_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как происходит проверка состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как происходит проверка состояния runtime?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как происходит проверка состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как происходит проверка состояния runtime?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 22363,
|
||||
"tokens_in_estimate": 5689
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 0,
|
||||
"relations_found": 8,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"8595d7b82fecdb7ef579fa8961cda6799bb21970061e5bc221d4dd7a3d53fd04",
|
||||
"801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4",
|
||||
"af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
|
||||
"79bdb0a74713df6064008179ca8c5c186dc23e4e1c5e2c9607b0bdddeba50f93",
|
||||
"77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/README.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"domain.runtime_health",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"api.send_message_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/README.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Сущность runtime health",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /health",
|
||||
"HTTP API /actions/{action}",
|
||||
"Архитектура Telegram Notify App",
|
||||
"HTTP API /send",
|
||||
"Scenario",
|
||||
"domain.runtime_health:related_logic",
|
||||
"domain.runtime_health:used_by",
|
||||
"domain.runtime_health:part_of",
|
||||
"domain.runtime_health:parent",
|
||||
"api.health_endpoint:depends_on",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:depends_on",
|
||||
"api.health_endpoint:part_of",
|
||||
"domain.runtime_health:Details",
|
||||
"domain.runtime_health:Summary",
|
||||
"docs/README.md:Навигация",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Сценарий"
|
||||
],
|
||||
"relation_hits_count": 8,
|
||||
"relation_targets": [
|
||||
"domain.runtime_health:related_logic",
|
||||
"domain.runtime_health:used_by",
|
||||
"domain.runtime_health:part_of",
|
||||
"domain.runtime_health:parent",
|
||||
"api.health_endpoint:depends_on",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:depends_on",
|
||||
"api.health_endpoint:part_of"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 0,
|
||||
"relations": 8,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 22363,
|
||||
"tokens_in_estimate": 5689
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как происходит проверка состояния runtime?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:related_logic",
|
||||
"content": "domain.runtime_health related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "8595d7b82fecdb7ef579fa8961cda6799bb21970061e5bc221d4dd7a3d53fd04",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:used_by",
|
||||
"content": "domain.runtime_health used_by api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "801650f8bcbfbfbefd35c14447bfef7b3c3827313db790efa7faf47db860f8c4",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "used_by",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:part_of",
|
||||
"content": "domain.runtime_health part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "af2a4f7c1b677b908410ba720915405e10dbd0870e30a3c6e3aa2468550ddf0e",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "domain.runtime_health:parent",
|
||||
"content": "domain.runtime_health parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"source_id": "domain.runtime_health",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "79bdb0a74713df6064008179ca8c5c186dc23e4e1c5e2c9607b0bdddeba50f93",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:depends_on",
|
||||
"content": "api.health_endpoint depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "4e0bbeb8e97e25091a30412d8631b1d9f6bb58b5694d8b7cc632af69a9262ea8",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:depends_on",
|
||||
"content": "architecture.telegram_notify_app depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "228d9012df1811fd2ef79178ff79c3cbc85271cf2755b15a627ea320e8f442a5",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как происходит проверка состояния runtime?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: SYSTEM_FLOW_EXPLAIN
|
||||
- documents: 6 | samples: Сущность runtime health, Цикл отправки уведомлений в Telegram, HTTP API /health
|
||||
- facts: 0
|
||||
- relations: 8 | samples: domain.runtime_health:related_logic, domain.runtime_health:used_by, domain.runtime_health:part_of
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-system-flow-telegram-loop-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 23,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Объясни цикл отправки уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни цикл отправки уведомлений"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Объясни цикл отправки уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Объясни цикл отправки уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 20708,
|
||||
"tokens_in_estimate": 5276
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+882
@@ -0,0 +1,882 @@
|
||||
# v3-system-flow-telegram-loop-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Объясни цикл отправки уведомлений
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 23,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни цикл отправки уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"query": "Объясни цикл отправки уведомлений"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни цикл отправки уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Объясни цикл отправки уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 20708,
|
||||
"tokens_in_estimate": 5276
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 0,
|
||||
"relations_found": 8,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "none",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"docs/README.md",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/README.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Readme",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"HTTP API /send",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Сущность runtime health",
|
||||
"Scenario",
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.send_message_endpoint:parent",
|
||||
"api.control_actions_endpoint:parent",
|
||||
"docs/README.md:Структура",
|
||||
"docs/README.md:Навигация",
|
||||
"docs/README.md:Правила и шаблоны",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"docs/README.md:Project Docs"
|
||||
],
|
||||
"relation_hits_count": 8,
|
||||
"relation_targets": [
|
||||
"api.control_actions_endpoint:part_of",
|
||||
"api.control_actions_endpoint:related_api",
|
||||
"api.control_actions_endpoint:related_logic",
|
||||
"api.health_endpoint:parent",
|
||||
"api.health_endpoint:part_of",
|
||||
"api.health_endpoint:depends_on",
|
||||
"api.send_message_endpoint:parent",
|
||||
"api.control_actions_endpoint:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 0,
|
||||
"relations": 8,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 20708,
|
||||
"tokens_in_estimate": 5276
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Объясни цикл отправки уведомлений",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:part_of",
|
||||
"content": "api.control_actions_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "5f4909bde905cd3d294ad307074a05e4ae4deefcafe6272cd2d0436e73acb8dd",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_api",
|
||||
"content": "api.control_actions_endpoint related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "711fb2edb82dd222deaba3c91768b18cbbd453009235823282813c6e867dc2c1",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:related_logic",
|
||||
"content": "api.control_actions_endpoint related_logic logic.telegram_notification_loop",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "logic.telegram_notification_loop",
|
||||
"doc_version": null,
|
||||
"relation_id": "eec79f7a02b804337e791ef231784862ae26e0599eb20224790e9d4f085fa9c0",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_logic",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:parent",
|
||||
"content": "api.health_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "c718b1939621233295ccaf6e8203e7fd94f3dd1bfb88f10c51bc5e33d53a24aa",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:part_of",
|
||||
"content": "api.health_endpoint part_of architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "616f5cbf25da83cb51d8d0741a7fc351620c9ca2c6513fa2094b4aa476f0912a",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "part_of",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:depends_on",
|
||||
"content": "api.health_endpoint depends_on domain.runtime_health",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"source_id": "api.health_endpoint",
|
||||
"target_id": "domain.runtime_health",
|
||||
"doc_version": null,
|
||||
"relation_id": "77f5d358ab85b3d92018b6b51da7c39773148dfd346686e8832a45370c841160",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "depends_on",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:parent",
|
||||
"content": "api.send_message_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"source_id": "api.send_message_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "33eb0aa97f06d0afcaa4c230b5f5b73fa2fbfa5861ea9367b6c92f8a6fe0c054",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:parent",
|
||||
"content": "api.control_actions_endpoint parent architecture.telegram_notify_app",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"source_id": "api.control_actions_endpoint",
|
||||
"target_id": "architecture.telegram_notify_app",
|
||||
"doc_version": null,
|
||||
"relation_id": "afec31fd062e392dcd9699a92c7ab61fd4b1273c1a2b16702b23d55d8d0c47ac",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Объясни цикл отправки уведомлений
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: SYSTEM_FLOW_EXPLAIN
|
||||
- documents: 6 | samples: Readme, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 0
|
||||
- relations: 8 | samples: api.control_actions_endpoint:part_of, api.control_actions_endpoint:related_api, api.control_actions_endpoint:related_logic
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-system-flow-telegram-loop-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 18,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как работает процесс отправки уведомлений в Telegram?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает процесс отправки уведомлений в Telegram?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как работает процесс отправки уведомлений в Telegram?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как работает процесс отправки уведомлений в Telegram?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 17588,
|
||||
"tokens_in_estimate": 4496
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+785
@@ -0,0 +1,785 @@
|
||||
# v3-system-flow-telegram-loop-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Как работает процесс отправки уведомлений в Telegram?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 18,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает процесс отправки уведомлений в Telegram?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает процесс отправки уведомлений в Telegram?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает процесс отправки уведомлений в Telegram?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает процесс отправки уведомлений в Telegram?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 17588,
|
||||
"tokens_in_estimate": 4496
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 0,
|
||||
"relations_found": 3,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "workflow",
|
||||
"matched_anchor_value": "отправки",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"architecture.telegram_notify_app",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"305bab0c6567d93a2b453a9d70b676f9ecd8de083ef36f5cf3398747c25ebf94",
|
||||
"7bd0428d23e9b20f7d65202cc269e45b3d1e7aed7b5df4a35581fd88677be29b",
|
||||
"0eb7f73fcda8556439e06f5eeb5ce064ae32b6cd3129353f5b1b4eb3db626d88",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"145ccbb861a8fb621286ec9c888ce69677168d35c7871c70537e888ce3a5b910"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"logic.telegram_notification_loop",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/README.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/README.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Архитектура Telegram Notify App",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /send",
|
||||
"Сущность runtime health",
|
||||
"HTTP API /health",
|
||||
"HTTP API /actions/{action}",
|
||||
"Scenario",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"architecture.telegram_notify_app:parent",
|
||||
"logic.telegram_notification_loop:Summary",
|
||||
"logic.telegram_notification_loop:Details",
|
||||
"architecture.telegram_notify_app:Summary",
|
||||
"architecture.telegram_notify_app:Details",
|
||||
"docs/README.md:Навигация",
|
||||
"api.health_endpoint:Функциональные требования"
|
||||
],
|
||||
"relation_hits_count": 3,
|
||||
"relation_targets": [
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"architecture.telegram_notify_app:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 0,
|
||||
"relations": 3,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 17588,
|
||||
"tokens_in_estimate": 4496
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как работает процесс отправки уведомлений в Telegram?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.send_message_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "305bab0c6567d93a2b453a9d70b676f9ecd8de083ef36f5cf3398747c25ebf94",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "7bd0428d23e9b20f7d65202cc269e45b3d1e7aed7b5df4a35581fd88677be29b",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:parent",
|
||||
"content": "architecture.telegram_notify_app parent docs_root",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "docs_root",
|
||||
"doc_version": null,
|
||||
"relation_id": "e01922b36e3cc60d9349f89e43fcd4a92c6a01394b0028d6b6d56801b258645d",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как работает процесс отправки уведомлений в Telegram?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: SYSTEM_FLOW_EXPLAIN
|
||||
- documents: 6 | samples: Архитектура Telegram Notify App, Цикл отправки уведомлений в Telegram, HTTP API /send
|
||||
- facts: 0
|
||||
- relations: 3 | samples: architecture.telegram_notify_app:child, architecture.telegram_notify_app:related_api, architecture.telegram_notify_app:parent
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-system-flow-telegram-loop-3",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 18,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Опиши workflow Telegram уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши workflow Telegram уведомлений"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Опиши workflow Telegram уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Опиши workflow Telegram уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 17570,
|
||||
"tokens_in_estimate": 4491
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+785
@@ -0,0 +1,785 @@
|
||||
# v3-system-flow-telegram-loop-3
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Опиши workflow Telegram уведомлений
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 18,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": null
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши workflow Telegram уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши workflow Telegram уведомлений"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши workflow Telegram уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши workflow Telegram уведомлений"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 17570,
|
||||
"tokens_in_estimate": 4491
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 0,
|
||||
"relations_found": 3,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "workflow",
|
||||
"matched_anchor_value": "Telegram",
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D5_RELATION_GRAPH",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"architecture.telegram_notify_app",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D5_RELATION_GRAPH": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"305bab0c6567d93a2b453a9d70b676f9ecd8de083ef36f5cf3398747c25ebf94",
|
||||
"7bd0428d23e9b20f7d65202cc269e45b3d1e7aed7b5df4a35581fd88677be29b",
|
||||
"0eb7f73fcda8556439e06f5eeb5ce064ae32b6cd3129353f5b1b4eb3db626d88",
|
||||
"ae34fe4b3cd2b47632b13b1e32303e842b57948aa21160abe8d9b478995e1d74",
|
||||
"145ccbb861a8fb621286ec9c888ce69677168d35c7871c70537e888ce3a5b910"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"logic.telegram_notification_loop",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/README.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop",
|
||||
"api.send_message_endpoint",
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"docs/README.md"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/README.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"Архитектура Telegram Notify App",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"HTTP API /send",
|
||||
"Сущность runtime health",
|
||||
"HTTP API /health",
|
||||
"HTTP API /actions/{action}",
|
||||
"Scenario",
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"architecture.telegram_notify_app:parent",
|
||||
"logic.telegram_notification_loop:Summary",
|
||||
"logic.telegram_notification_loop:Details",
|
||||
"architecture.telegram_notify_app:Summary",
|
||||
"architecture.telegram_notify_app:Details",
|
||||
"docs/README.md:Навигация",
|
||||
"api.health_endpoint:Сценарий"
|
||||
],
|
||||
"relation_hits_count": 3,
|
||||
"relation_targets": [
|
||||
"architecture.telegram_notify_app:child",
|
||||
"architecture.telegram_notify_app:related_api",
|
||||
"architecture.telegram_notify_app:parent"
|
||||
],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 0,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 0,
|
||||
"relations": 3,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 17570,
|
||||
"tokens_in_estimate": 4491
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Опиши workflow Telegram уведомлений",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "SYSTEM_FLOW_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [],
|
||||
"relations": [
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:child",
|
||||
"content": "architecture.telegram_notify_app child api.send_message_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.children",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "305bab0c6567d93a2b453a9d70b676f9ecd8de083ef36f5cf3398747c25ebf94",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "child",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:related_api",
|
||||
"content": "architecture.telegram_notify_app related_api api.health_endpoint",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.links",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"relation_id": "7bd0428d23e9b20f7d65202cc269e45b3d1e7aed7b5df4a35581fd88677be29b",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "related_api",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D5_RELATION_GRAPH",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "architecture.telegram_notify_app:parent",
|
||||
"content": "architecture.telegram_notify_app parent docs_root",
|
||||
"metadata": {
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.parent",
|
||||
"doc_id": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"source_id": "architecture.telegram_notify_app",
|
||||
"target_id": "docs_root",
|
||||
"doc_version": null,
|
||||
"relation_id": "e01922b36e3cc60d9349f89e43fcd4a92c6a01394b0028d6b6d56801b258645d",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"relation_type": "parent",
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Опиши workflow Telegram уведомлений
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: SYSTEM_FLOW_EXPLAIN
|
||||
- documents: 6 | samples: Архитектура Telegram Notify App, Цикл отправки уведомлений в Telegram, HTTP API /send
|
||||
- facts: 0
|
||||
- relations: 3 | samples: architecture.telegram_notify_app:child, architecture.telegram_notify_app:related_api, architecture.telegram_notify_app:parent
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
@@ -0,0 +1,43 @@
|
||||
# pipeline_setup_v3 summary
|
||||
|
||||
Passed: 25/30
|
||||
|
||||
| File | Case | Mode | Query | Actual sub-intent | RAG layers | Tokens | Pass |
|
||||
|------|------|------|-------|-------------------|------------|--------|------|
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-system-flow-telegram-loop-1 | pre_llm | Объясни цикл отправки уведомлений | SYSTEM_FLOW_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D4_WORKFLOW_INDEX:3, D5_RELATION_GRAPH:8 | 5276 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-system-flow-telegram-loop-2 | pre_llm | Как работает процесс отправки уведомлений в Telegram? | SYSTEM_FLOW_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D4_WORKFLOW_INDEX:3, D5_RELATION_GRAPH:3 | 4496 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-system-flow-telegram-loop-3 | pre_llm | Опиши workflow Telegram уведомлений | SYSTEM_FLOW_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D4_WORKFLOW_INDEX:3, D5_RELATION_GRAPH:3 | 4491 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-system-flow-health-1 | pre_llm | Как работает health check runtime? | GENERIC_QA | D0_DOC_CHUNKS:8, D1_DOCUMENT_CATALOG:4 | 2452 | ✗ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-system-flow-health-2 | pre_llm | Как происходит проверка состояния runtime? | SYSTEM_FLOW_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D4_WORKFLOW_INDEX:3, D5_RELATION_GRAPH:8 | 5689 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-component-runtime-manager-1 | pre_llm | Что делает RuntimeManager? | COMPONENT_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D5_RELATION_GRAPH:6 | 5471 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-component-runtime-manager-2 | pre_llm | Как устроен RuntimeManager? | COMPONENT_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D5_RELATION_GRAPH:6 | 5471 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-component-runtime-manager-3 | pre_llm | Опиши компонент RuntimeManager | COMPONENT_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D5_RELATION_GRAPH:6 | 5472 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-component-control-channel-1 | pre_llm | Как работает TelegramControlChannel? | COMPONENT_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D5_RELATION_GRAPH:6 | 5474 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-component-control-channel-2 | pre_llm | Роль TelegramControlChannel в системе | COMPONENT_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D5_RELATION_GRAPH:6 | 5474 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-api-health-1 | pre_llm | Что делает /health? | API_METHOD_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:1, D2_FACT_INDEX:2, D4_WORKFLOW_INDEX:1 | 1149 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-api-health-2 | pre_llm | Как работает health endpoint? | API_METHOD_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D4_WORKFLOW_INDEX:3 | 4254 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-api-health-3 | pre_llm | Опиши endpoint health | API_METHOD_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D4_WORKFLOW_INDEX:3 | 4252 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-api-send-1 | pre_llm | Что делает /send? | API_METHOD_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:1, D2_FACT_INDEX:2, D4_WORKFLOW_INDEX:1 | 1195 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-api-send-2 | pre_llm | Как работает send endpoint? | API_METHOD_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D4_WORKFLOW_INDEX:3 | 3846 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-api-send-3 | pre_llm | Опиши endpoint отправки сообщений | API_METHOD_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:2, D4_WORKFLOW_INDEX:3 | 3847 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-entity-runtime-health-1 | pre_llm | Что такое runtime health? | ENTITY_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D3_ENTITY_CATALOG:8, D5_RELATION_GRAPH:6 | 5165 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-entity-runtime-health-2 | pre_llm | Объясни runtime health | GENERIC_QA | D0_DOC_CHUNKS:8, D1_DOCUMENT_CATALOG:4 | 2449 | ✗ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-entity-worker-status-1 | pre_llm | Что такое WorkerStatus? | ENTITY_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D3_ENTITY_CATALOG:8, D5_RELATION_GRAPH:6 | 4793 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-entity-worker-status-2 | pre_llm | Опиши статус воркера | GENERIC_QA | D0_DOC_CHUNKS:8, D1_DOCUMENT_CATALOG:4 | 1976 | ✗ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-related-health-1 | pre_llm | Что связано с /health? | RELATED_DOCS_EXPLAIN | D0_DOC_CHUNKS:6, D5_RELATION_GRAPH:8 | 2070 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-related-health-2 | pre_llm | Какие документы относятся к health endpoint? | RELATED_DOCS_EXPLAIN | D0_DOC_CHUNKS:6, D5_RELATION_GRAPH:8 | 2098 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-related-send-1 | pre_llm | Какие документы связаны с /send? | RELATED_DOCS_EXPLAIN | D0_DOC_CHUNKS:6, D5_RELATION_GRAPH:8 | 2120 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-related-architecture-1 | pre_llm | Какие документы связаны с архитектурой? | RELATED_DOCS_EXPLAIN | D0_DOC_CHUNKS:6, D5_RELATION_GRAPH:8 | 2097 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-general-1 | pre_llm | Что есть в документации? | COMPONENT_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:1, D5_RELATION_GRAPH:6 | 5039 | ✗ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-general-2 | pre_llm | Какая структура документации? | COMPONENT_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D2_FACT_INDEX:1, D5_RELATION_GRAPH:6 | 5040 | ✗ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-general-3 | pre_llm | С чего начать читать документацию? | GENERIC_QA | D0_DOC_CHUNKS:8, D1_DOCUMENT_CATALOG:4 | 1980 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-negative-1 | pre_llm | Что такое PaymentTransaction? | ENTITY_EXPLAIN | D0_DOC_CHUNKS:6, D1_DOCUMENT_CATALOG:6, D3_ENTITY_CATALOG:8, D5_RELATION_GRAPH:6 | 4794 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-negative-2 | pre_llm | Объясни сущность UnknownEntity | ENTITY_EXPLAIN | — | 142 | ✓ |
|
||||
| full_chain_docs_intents_v3-3x.yaml | v3-negative-3 | pre_llm | Что делает endpoint /unknown? | API_METHOD_EXPLAIN | — | 143 | ✓ |
|
||||
|
||||
## Failures
|
||||
- **v3-system-flow-health-1**: sub_intent: expected SYSTEM_FLOW_EXPLAIN, got GENERIC_QA
|
||||
- **v3-entity-runtime-health-2**: sub_intent: expected ENTITY_EXPLAIN, got GENERIC_QA
|
||||
- **v3-entity-worker-status-2**: sub_intent: expected ENTITY_EXPLAIN, got GENERIC_QA
|
||||
- **v3-general-1**: sub_intent: expected GENERIC_QA, got COMPONENT_EXPLAIN
|
||||
- **v3-general-2**: sub_intent: expected GENERIC_QA, got COMPONENT_EXPLAIN
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-health-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 10,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает /health?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 4201,
|
||||
"tokens_in_estimate": 1149
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+429
@@ -0,0 +1,429 @@
|
||||
# v3-api-health-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что делает /health?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 10,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает /health?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /health?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 4201,
|
||||
"tokens_in_estimate": 1149
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 1,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/health",
|
||||
"exact_anchor_match": true,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"domain.runtime_health",
|
||||
"api.health_endpoint",
|
||||
"docs/README.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"logic.telegram_notification_loop"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"1cff54331a52b7a92946e7afabe7e45d7e3ec693b59546f9666e494396593bc3",
|
||||
"0d923b02d15cef527d51740b7a09378a7dc74fb58db27cd059a8658ad11601a5",
|
||||
"3d3b6fcc21144cb68657be099291db0ae36d61d32d6d72fd5b7c3cb81f379877",
|
||||
"0b70cbff38a527cecfb53d3f72d573e9da1826cc75bd4cb92357e1de10988204",
|
||||
"ce6d44c30418b0b171433a144f78d4bbf53b7a060d9b7cd42b9feecc8ca3044e"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.health_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/health"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.health_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/health-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /health",
|
||||
"Scenario",
|
||||
"api.health_endpoint:Сценарий",
|
||||
"api.health_endpoint:workflow_step",
|
||||
"api.health_endpoint:mentions_entity",
|
||||
"api.health_endpoint:Нефункциональные требования",
|
||||
"api.health_endpoint:Summary",
|
||||
"api.health_endpoint:Описание",
|
||||
"api.health_endpoint:Функциональные требования",
|
||||
"api.health_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 7,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 1,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 4201,
|
||||
"tokens_in_estimate": 1149
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что делает /health?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:workflow_step",
|
||||
"content": "api.health_endpoint workflow_step Предусловия:**",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Предусловия:**",
|
||||
"fact_id": "1cff54331a52b7a92946e7afabe7e45d7e3ec693b59546f9666e494396593bc3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "api.health_endpoint:mentions_entity",
|
||||
"content": "api.health_endpoint mentions_entity TelegramControlChannel",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "TelegramControlChannel",
|
||||
"fact_id": "3d3b6fcc21144cb68657be099291db0ae36d61d32d6d72fd5b7c3cb81f379877",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.health_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что делает /health?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 1 | samples: HTTP API /health
|
||||
- facts: 2 | samples: api.health_endpoint:workflow_step, api.health_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-health-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает health endpoint?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 16622,
|
||||
"tokens_in_estimate": 4254
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+754
@@ -0,0 +1,754 @@
|
||||
# v3-api-health-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Как работает health endpoint?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает health endpoint?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает health endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 16622,
|
||||
"tokens_in_estimate": 4254
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "topic",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f",
|
||||
"a8a325e0815b3a2a870ba2825f3afb3f41056b4c091df4c3bb3418ffd20891dd",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"Сущность runtime health",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"Scenario",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 16622,
|
||||
"tokens_in_estimate": 4254
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как работает health endpoint?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step Название:** Выполнение control action runtime",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Название:** Выполнение control action runtime",
|
||||
"fact_id": "f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity JSONResponse",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "JSONResponse",
|
||||
"fact_id": "b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как работает health endpoint?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /send, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-health-3",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши endpoint health"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 16614,
|
||||
"tokens_in_estimate": 4252
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+754
@@ -0,0 +1,754 @@
|
||||
# v3-api-health-3
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Опиши endpoint health
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"query": "Опиши endpoint health"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Опиши endpoint health"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 16614,
|
||||
"tokens_in_estimate": 4252
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "topic",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f",
|
||||
"a8a325e0815b3a2a870ba2825f3afb3f41056b4c091df4c3bb3418ffd20891dd",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"logic.telegram_notification_loop",
|
||||
"docs/documentation/logic/telegram-notification-loop.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"domain.runtime_health",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"logic.telegram_notification_loop"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/documentation/logic/telegram-notification-loop.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"Сущность runtime health",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Цикл отправки уведомлений в Telegram",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"Scenario",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 16614,
|
||||
"tokens_in_estimate": 4252
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Опиши endpoint health",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"content": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"metadata": {
|
||||
"name": "telegram_notification_loop",
|
||||
"tags": [
|
||||
"logic",
|
||||
"telegram",
|
||||
"worker",
|
||||
"scheduling"
|
||||
],
|
||||
"type": "logic_block",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Цикл отправки уведомлений в Telegram",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "0f62f9b4dab261ca4ca34575ff5d84411a22c90b780c52eda388782b94f08470",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramSendService",
|
||||
"WorkerHealth",
|
||||
"WorkerStatus"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "logic.telegram_notification_loop",
|
||||
"source_path": "docs/documentation/logic/telegram-notification-loop.md",
|
||||
"summary_text": "`TelegramNotifyWorker` после старта runtime запускает отдельный поток, сразу делает первую попытку отправки сообщения и затем повторяет отправку через заданный интервал. При ошибках доставки или отсутствии credentials worker не останавливает сервис, а переводит собственное состояние в `degraded`. Этот workflow определяет основной полезный цикл приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step Название:** Выполнение control action runtime",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Название:** Выполнение control action runtime",
|
||||
"fact_id": "f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity JSONResponse",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "JSONResponse",
|
||||
"fact_id": "b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Опиши endpoint health
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /send, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-send-1",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 10,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает /send?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 4384,
|
||||
"tokens_in_estimate": 1195
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+428
@@ -0,0 +1,428 @@
|
||||
# v3-api-send-1
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Что делает /send?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 10,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Что делает /send?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Что делает /send?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 4384,
|
||||
"tokens_in_estimate": 1195
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 1,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "endpoint",
|
||||
"matched_anchor_value": "/send",
|
||||
"exact_anchor_match": true,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"docs/README.md"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"6bf0a662808009874a108d0c97f7cca7fc4ff7a3a3d66e0947b31bf813cfdf4d",
|
||||
"dc979c31d511a14d3af89f5f5c493fcfc0c9f2090dc16fb20ff874f4b3566221",
|
||||
"149c4e0d3d34b3faba055b1495d54818fadc882af633da70035b82190c1bd327",
|
||||
"480d85819e9298d4078f8a3bd6cfccb9c0fe2a03695b87f65f82f9aa8e2097b0",
|
||||
"7aefee9ff6110088aad1891da66fc9085eb3f77d832605a3da565deecb96e850"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [
|
||||
"/send"
|
||||
],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send",
|
||||
"Scenario",
|
||||
"api.send_message_endpoint:Сценарий",
|
||||
"api.send_message_endpoint:workflow_step",
|
||||
"api.send_message_endpoint:mentions_entity",
|
||||
"api.send_message_endpoint:Нефункциональные требования",
|
||||
"api.send_message_endpoint:Summary",
|
||||
"api.send_message_endpoint:Описание",
|
||||
"api.send_message_endpoint:Функциональные требования",
|
||||
"api.send_message_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 7,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 1,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty",
|
||||
"exact_anchor_match"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 4384,
|
||||
"tokens_in_estimate": 1195
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Что делает /send?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:workflow_step",
|
||||
"content": "api.send_message_endpoint workflow_step Telegram credentials доступны в переменных окружения.",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Telegram credentials доступны в переменных окружения.",
|
||||
"fact_id": "6bf0a662808009874a108d0c97f7cca7fc4ff7a3a3d66e0947b31bf813cfdf4d",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "api.send_message_endpoint:mentions_entity",
|
||||
"content": "api.send_message_endpoint mentions_entity TelegramNotifyWorker",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "TelegramNotifyWorker",
|
||||
"fact_id": "149c4e0d3d34b3faba055b1495d54818fadc882af633da70035b82190c1bd327",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.send_message_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Что делает /send?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 1 | samples: HTTP API /send
|
||||
- facts: 2 | samples: api.send_message_endpoint:workflow_step, api.send_message_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"meta": {
|
||||
"case_id": "v3-api-send-2",
|
||||
"source_file": "/Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml",
|
||||
"runner": "agent_runtime",
|
||||
"mode": "pre_llm",
|
||||
"passed": true,
|
||||
"mismatches": [],
|
||||
"actual": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
},
|
||||
"pipeline_steps": [
|
||||
{
|
||||
"step": "input_query",
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает send endpoint?"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "router",
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": "docs_pipeline",
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 14988,
|
||||
"tokens_in_estimate": 3846
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+726
@@ -0,0 +1,726 @@
|
||||
# v3-api-send-2
|
||||
|
||||
- source_file: /Users/alex/Dev_projects_v2/ai driven app process/v2/agent/tests/pipeline_setup_v3/cases/suite_03_docs/full_chain_docs_intents_v3-3x.yaml
|
||||
- runner: agent_runtime
|
||||
- mode: pre_llm
|
||||
- passed: True
|
||||
|
||||
## Query
|
||||
Как работает send endpoint?
|
||||
|
||||
## Actual
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START",
|
||||
"rag_count": 17,
|
||||
"llm_answer": "",
|
||||
"answer_mode": "answered",
|
||||
"path_scope": [],
|
||||
"doc_scope": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"entity_candidates": [],
|
||||
"symbol_candidates": [],
|
||||
"layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"filters": {
|
||||
"doc_type": "api_method"
|
||||
},
|
||||
"pipeline_mode": "pre_llm_only",
|
||||
"gate_decision": "allow",
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": true
|
||||
}
|
||||
|
||||
## Pipeline Steps
|
||||
### input_query
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"query": "Как работает send endpoint?"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### router
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"graph_id": "DocsQAGraph",
|
||||
"conversation_mode": "START"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### docs_pipeline
|
||||
```json
|
||||
{
|
||||
"input": {
|
||||
"query": "Как работает send endpoint?"
|
||||
},
|
||||
"output": {
|
||||
"answer_mode": "ready",
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"llm_request": {
|
||||
"prompt_name": "docs_explain_answer",
|
||||
"log_context": "graph.project_qa.docs.answer",
|
||||
"prompt_stats": {
|
||||
"system_chars": 393,
|
||||
"user_chars": 14988,
|
||||
"tokens_in_estimate": 3846
|
||||
}
|
||||
},
|
||||
"degraded_reason": ""
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Diagnostics
|
||||
{
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"layers_used": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"documents_found": 6,
|
||||
"facts_found": 2,
|
||||
"relations_found": 0,
|
||||
"openapi_fields_extracted": 0,
|
||||
"missing_required_fields": [],
|
||||
"openapi_status": {
|
||||
"has_path": false,
|
||||
"has_method": false,
|
||||
"has_request": false,
|
||||
"has_response": false
|
||||
},
|
||||
"prompt_used": "docs_explain_answer",
|
||||
"llm_mode": "prose",
|
||||
"output_valid": true,
|
||||
"matched_intent_source": "deterministic",
|
||||
"matched_anchor_type": "topic",
|
||||
"matched_anchor_value": null,
|
||||
"exact_anchor_match": false,
|
||||
"docs_layers_requested": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"docs_layers_with_hits": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"planned_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"executed_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"non_empty_layers": [
|
||||
"D1_DOCUMENT_CATALOG",
|
||||
"D2_FACT_INDEX",
|
||||
"D4_WORKFLOW_INDEX",
|
||||
"D0_DOC_CHUNKS"
|
||||
],
|
||||
"layer_diagnostics": {
|
||||
"D1_DOCUMENT_CATALOG": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/README.md"
|
||||
]
|
||||
},
|
||||
"D2_FACT_INDEX": {
|
||||
"hits": 8,
|
||||
"top_ids": [
|
||||
"f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"b8e44c3adb74aaa6c91ae8815fa091289e58dd3990a3a1b63e850c62075aea75",
|
||||
"bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"54bbcbac242f1c85ec3280236ed5841998a8a3a548ff16cbf0b5acafbff469e3",
|
||||
"b6bfad59b3bf00f199b5ef90c1208af19664de700413e7354468a93a4abaaa2f"
|
||||
]
|
||||
},
|
||||
"D4_WORKFLOW_INDEX": {
|
||||
"hits": 3,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"api.send_message_endpoint"
|
||||
]
|
||||
},
|
||||
"D0_DOC_CHUNKS": {
|
||||
"hits": 6,
|
||||
"top_ids": [
|
||||
"api.control_actions_endpoint"
|
||||
]
|
||||
}
|
||||
},
|
||||
"query_entity_candidates": [],
|
||||
"resolved_entity_candidates": [],
|
||||
"query_anchor_candidates": [],
|
||||
"resolved_anchor_candidates": [
|
||||
"api.send_message_endpoint",
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"api.control_actions_endpoint",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"api.health_endpoint",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"architecture.telegram_notify_app",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"anchor_candidates": [],
|
||||
"selected_anchor": null,
|
||||
"anchor_selection_reason": "",
|
||||
"anchor_match_type": "",
|
||||
"doc_ids": [
|
||||
"api.send_message_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.actions_endpoint",
|
||||
"api.health_endpoint",
|
||||
"architecture.telegram_notify_app",
|
||||
"architecture.telegram_notify_app_overview",
|
||||
"docs/README.md",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_paths": [
|
||||
"docs/documentation/api/send-message-endpoint.md",
|
||||
"docs/documentation/api/control-actions-endpoint.md",
|
||||
"docs/documentation/api/health-endpoint.md",
|
||||
"docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"docs/README.md",
|
||||
"docs/documentation/domain/runtime-health-entity.md"
|
||||
],
|
||||
"doc_titles": [
|
||||
"HTTP API /send",
|
||||
"HTTP API /actions/{action}",
|
||||
"HTTP API /health",
|
||||
"Архитектура Telegram Notify App",
|
||||
"Readme",
|
||||
"Сущность runtime health",
|
||||
"api.control_actions_endpoint:workflow_step",
|
||||
"api.control_actions_endpoint:mentions_entity",
|
||||
"Scenario",
|
||||
"api.control_actions_endpoint:Функциональные требования",
|
||||
"api.control_actions_endpoint:Нефункциональные требования",
|
||||
"api.control_actions_endpoint:Сценарий",
|
||||
"api.control_actions_endpoint:Summary",
|
||||
"api.control_actions_endpoint:Описание",
|
||||
"api.control_actions_endpoint:Входные параметры"
|
||||
],
|
||||
"relation_hits_count": 0,
|
||||
"relation_targets": [],
|
||||
"fallback_doc_hits_count": 12,
|
||||
"fallback_used": false,
|
||||
"fact_hits": 2,
|
||||
"entity_hits": 0,
|
||||
"evidence_summary": {
|
||||
"documents": 6,
|
||||
"facts": 2,
|
||||
"relations": 0,
|
||||
"chunks": 6,
|
||||
"entity_hits": 0,
|
||||
"openapi_signals": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
}
|
||||
},
|
||||
"gate_decision": "allow",
|
||||
"gate_decision_reason": "evidence_sufficient",
|
||||
"gate_missing_requirements": [],
|
||||
"gate_satisfied_requirements": [
|
||||
"retrieval_non_empty"
|
||||
],
|
||||
"openapi_evidence": {
|
||||
"path_found": false,
|
||||
"method_found": false,
|
||||
"request_schema": false,
|
||||
"response_schema": false,
|
||||
"status_codes": false,
|
||||
"payload_description": false
|
||||
},
|
||||
"requested_fragment_type": null,
|
||||
"fragment_evidence_found": [],
|
||||
"fragment_missing_requirements": [],
|
||||
"answer_mode": "ready",
|
||||
"degrade_reason": null,
|
||||
"degraded_reason": null,
|
||||
"code_intents_stubbed": false
|
||||
}
|
||||
|
||||
## LLM Request
|
||||
- prompt_name: docs_explain_answer
|
||||
- log_context: graph.project_qa.docs.answer
|
||||
|
||||
### Prompt Stats
|
||||
```json
|
||||
{
|
||||
"system_chars": 393,
|
||||
"user_chars": 14988,
|
||||
"tokens_in_estimate": 3846
|
||||
}
|
||||
```
|
||||
|
||||
### System Prompt
|
||||
```text
|
||||
Ты объясняешь документацию системы.
|
||||
|
||||
На вход приходит JSON с полями:
|
||||
- question
|
||||
- intent
|
||||
- sub_intent
|
||||
- documents
|
||||
- facts
|
||||
- relations
|
||||
|
||||
Правила:
|
||||
- Используй только предоставленные факты
|
||||
- Не додумывай
|
||||
- Если данных недостаточно, скажи это явно
|
||||
- Объясняй структурировано
|
||||
|
||||
Формат ответа:
|
||||
1. Краткое описание
|
||||
2. Основные элементы
|
||||
3. Как это работает
|
||||
4. Связи с другими частями системы (если есть)
|
||||
```
|
||||
|
||||
### User Prompt
|
||||
```json
|
||||
{
|
||||
"question": "Как работает send endpoint?",
|
||||
"intent": "DOCUMENTATION_EXPLAIN",
|
||||
"sub_intent": "API_METHOD_EXPLAIN",
|
||||
"documents": [
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"title": "HTTP API /send",
|
||||
"content": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"metadata": {
|
||||
"name": "send_message_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"telegram",
|
||||
"manual-send"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /send",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "5fbf2e33510b0676a3a53b957a4569bd3c2c31fb7719546602c573421ccaa32d",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlAppFactory",
|
||||
"TelegramSendService",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.send_message_endpoint",
|
||||
"source_path": "docs/documentation/api/send-message-endpoint.md",
|
||||
"summary_text": "Endpoint `/send` выполняет ручную отправку сообщения в Telegram через `TelegramSendService`. Он используется для операторской проверки доставки и для отправки уведомлений вне периодического worker loop. Endpoint работает поверх тех же credentials и того же delivery path, что и фоновая отправка.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"content": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"metadata": {
|
||||
"name": "control_actions_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"control-plane",
|
||||
"lifecycle"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /actions/{action}",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"ControlActionSet",
|
||||
"JSONResponse"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.control_actions_endpoint",
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"summary_text": "Endpoint `/actions/{action}` управляет control actions runtime и поддерживает `start`, `stop` и `status`. Для долгих операций `start` и `stop` допускается ответ HTTP 202, если действие еще выполняется. Endpoint используется для operator-driven управления жизненным циклом worker'а через HTTP API.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/api/health-endpoint.md",
|
||||
"title": "HTTP API /health",
|
||||
"content": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"metadata": {
|
||||
"name": "health_endpoint",
|
||||
"tags": [
|
||||
"api",
|
||||
"health",
|
||||
"control-plane"
|
||||
],
|
||||
"type": "api_method",
|
||||
"layer": "application",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "HTTP API /health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b5a533a8076e2e9d36995eee29aeade260080bdca2ec8e21fe28f08574b983f",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"TelegramControlChannel",
|
||||
"TelegramNotifyWorker",
|
||||
"RuntimeManager",
|
||||
"WorkerHealth"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "api.health_endpoint",
|
||||
"source_path": "docs/documentation/api/health-endpoint.md",
|
||||
"summary_text": "Endpoint `/health` возвращает агрегированный health payload runtime. Если общий статус равен `ok`, API отвечает с HTTP 200; для состояний деградации или неготовности возвращается HTTP 503 с тем же payload. Endpoint служит основной точкой внешней проверки состояния приложения.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"content": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"metadata": {
|
||||
"name": "telegram_notify_app_overview",
|
||||
"tags": [
|
||||
"architecture",
|
||||
"telegram",
|
||||
"plba",
|
||||
"runtime"
|
||||
],
|
||||
"type": "architecture_overview",
|
||||
"layer": "system",
|
||||
"links": [
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.control_actions_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_api",
|
||||
"target": "api.send_message_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
},
|
||||
{
|
||||
"type": "depends_on",
|
||||
"target": "domain.runtime_health"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Архитектура Telegram Notify App",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "docs_root",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "8b1cc9f823e55bddbc825466d10a0fdb4ca4354ac02d91f9e2aef7b7d2ec8256",
|
||||
"children": [
|
||||
"api.health_endpoint",
|
||||
"api.control_actions_endpoint",
|
||||
"api.send_message_endpoint",
|
||||
"logic.telegram_notification_loop",
|
||||
"domain.runtime_health"
|
||||
],
|
||||
"doc_kind": "spec",
|
||||
"entities": [
|
||||
"TelegramNotifyModule",
|
||||
"TelegramNotifyWorker",
|
||||
"TelegramControlChannel",
|
||||
"TelegramSendService",
|
||||
"RuntimeManager"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "architecture.telegram_notify_app",
|
||||
"source_path": "docs/documentation/architecture/telegram-notify-app-overview.md",
|
||||
"summary_text": "`test_echo_app` — сервис на базе PLBA runtime, который поднимает HTTP control plane и запускает фоновый воркер для периодической отправки уведомлений в Telegram. Приложение использует YAML-конфиг для runtime-настроек и переменные окружения для Telegram credentials. Основной контур системы состоит из runtime manager, control channel, send service и worker loop.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/README.md",
|
||||
"title": "Readme",
|
||||
"content": "Readme",
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"tags": [],
|
||||
"type": "",
|
||||
"layer": "",
|
||||
"links": [],
|
||||
"owner": null,
|
||||
"title": "Readme",
|
||||
"doc_id": null,
|
||||
"module": "",
|
||||
"parent": null,
|
||||
"status": null,
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "81d952f1a6ea85b76f75e0e57f33b8fa4b2bf3cb7db11b91b90171aeedd655a6",
|
||||
"children": [],
|
||||
"doc_kind": "readme",
|
||||
"entities": [],
|
||||
"updated_at": null,
|
||||
"doc_version": null,
|
||||
"document_id": "docs/README.md",
|
||||
"source_path": "docs/README.md",
|
||||
"summary_text": "",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D1_DOCUMENT_CATALOG",
|
||||
"path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"title": "Сущность runtime health",
|
||||
"content": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"metadata": {
|
||||
"name": "runtime_health",
|
||||
"tags": [
|
||||
"domain",
|
||||
"health",
|
||||
"observability"
|
||||
],
|
||||
"type": "domain_entity",
|
||||
"layer": "domain",
|
||||
"links": [
|
||||
{
|
||||
"type": "part_of",
|
||||
"target": "architecture.telegram_notify_app"
|
||||
},
|
||||
{
|
||||
"type": "used_by",
|
||||
"target": "api.health_endpoint"
|
||||
},
|
||||
{
|
||||
"type": "related_logic",
|
||||
"target": "logic.telegram_notification_loop"
|
||||
}
|
||||
],
|
||||
"owner": null,
|
||||
"title": "Сущность runtime health",
|
||||
"doc_id": null,
|
||||
"module": "telegram_notify_app",
|
||||
"parent": "architecture.telegram_notify_app",
|
||||
"status": "draft",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "37d4dcf470ea3de95d59e44786006e369a3ea11bf5dbf4c88877696e9183ee87",
|
||||
"children": [],
|
||||
"doc_kind": "misc",
|
||||
"entities": [
|
||||
"WorkerHealth",
|
||||
"WorkerStatus",
|
||||
"TelegramNotifyWorker"
|
||||
],
|
||||
"updated_at": "2026-03-20",
|
||||
"doc_version": null,
|
||||
"document_id": "domain.runtime_health",
|
||||
"source_path": "docs/documentation/domain/runtime-health-entity.md",
|
||||
"summary_text": "`runtime health` — доменная модель наблюдаемости сервиса, которая описывает общее состояние runtime и состояние отдельных компонентов. Для `test_echo_app` главным объектом наблюдения является компонент `telegram_notify`, у которого важны статус, время старта и количество успешных отправок. Эта модель используется для внешнего health-monitoring и внутренней диагностики.",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"facts": [
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:workflow_step",
|
||||
"content": "api.control_actions_endpoint workflow_step Название:** Выполнение control action runtime",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "Сценарий",
|
||||
"doc_id": null,
|
||||
"object": "Название:** Выполнение control action runtime",
|
||||
"fact_id": "f85d982c272a2ee6baeadc433221a20e684cd8ef01cb4788d6f76d05ca56d6d0",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "workflow_step",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"layer": "D2_FACT_INDEX",
|
||||
"path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"title": "api.control_actions_endpoint:mentions_entity",
|
||||
"content": "api.control_actions_endpoint mentions_entity ControlActionSet",
|
||||
"metadata": {
|
||||
"tags": [],
|
||||
"owner": null,
|
||||
"anchor": "frontmatter.entities",
|
||||
"doc_id": null,
|
||||
"object": "ControlActionSet",
|
||||
"fact_id": "bafb867ffed41c9db637df98d6cd5f6722d7747bbebc6c03e6f0d0caf3b7f9f3",
|
||||
"repo_id": "test_echo_app",
|
||||
"section": null,
|
||||
"blob_sha": "a251c550a23249ef1a74389c93aaccd4c5ae88ef621efad2aa018fcd132cce7e",
|
||||
"predicate": "mentions_entity",
|
||||
"object_ref": null,
|
||||
"subject_id": "api.control_actions_endpoint",
|
||||
"doc_version": null,
|
||||
"source_path": "docs/documentation/api/control-actions-endpoint.md",
|
||||
"artifact_type": null,
|
||||
"last_modified": null,
|
||||
"staleness_score": null,
|
||||
"system_component": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"relations": []
|
||||
}
|
||||
```
|
||||
|
||||
### User Prompt Overview
|
||||
- question: Как работает send endpoint?
|
||||
- intent: DOCUMENTATION_EXPLAIN
|
||||
- sub_intent: API_METHOD_EXPLAIN
|
||||
- documents: 6 | samples: HTTP API /send, HTTP API /actions/{action}, HTTP API /health
|
||||
- facts: 2 | samples: api.control_actions_endpoint:workflow_step, api.control_actions_endpoint:mentions_entity
|
||||
- relations: 0
|
||||
|
||||
## Mismatches
|
||||
- none
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user