Files
huanghuoguoguo 5ec41f15a1 test(ci): add a 60-second core smoke gate and regression jobs (#2711)
* test(tools): add deterministic lbctl regression job

* test(tools): simulate persistent multi-group conversations

* test(tools): add finite core smoke with terminal run and file oracles

* test(tools): expand smoke coverage across execution stages

* ci: add a timed real core smoke and lightweight tool checks

* fix(ci): keep infrastructure failures visible in smoke verdicts
2026-10-23 16:24:26 +08:00

112 lines
5.9 KiB
JSON

{
"version": 1,
"cli": {"executable": "lbctl", "config": "./lbctl.yaml"},
"vars": {
"plugin_dir": "/path/to/plugin-zips",
"mock_base_url": "http://127.0.0.1:18080/v1",
"embedding_base_url": "http://127.0.0.1:15410/v1",
"core_health": "http://127.0.0.1:5300/healthz"
},
"plugins": [
{"source": "local", "file": "${plugin_dir}/LocalAgent.zip"},
{"source": "local", "file": "${plugin_dir}/LangRAG.zip"},
{"source": "local", "file": "${plugin_dir}/GeneralParsers.zip"}
],
"resources": [
{"id": "mock_provider", "kind": "provider", "body": {
"name": "regression mock", "requester": "openai-chat-completions",
"base_url": "${mock_base_url}", "api_keys": ["test-only"]
}},
{"id": "embedding_provider", "kind": "provider", "body": {
"name": "regression embedding", "requester": "openai-chat-completions",
"base_url": "${embedding_base_url}", "api_keys": ["test-only"]
}},
{"id": "chat_model", "kind": "model", "type": "llm", "body": {
"name": "mock-chat", "provider_uuid": "${mock_provider}",
"abilities": ["func_call"], "context_length": 8192,
"extra_args": {"request_policy": {"retries": 0}}
}},
{"id": "box_model", "kind": "model", "type": "llm", "body": {
"name": "mock-box", "provider_uuid": "${mock_provider}",
"abilities": ["func_call"], "context_length": 8192,
"extra_args": {"request_policy": {"retries": 0}}
}},
{"id": "rag_model", "kind": "model", "type": "llm", "body": {
"name": "mock-rag", "provider_uuid": "${mock_provider}",
"abilities": ["func_call"], "context_length": 8192,
"extra_args": {"request_policy": {"retries": 0}}
}},
{"id": "embedding_model", "kind": "model", "type": "embedding", "body": {
"name": "all-MiniLM-L6-v2", "provider_uuid": "${embedding_provider}"
}},
{"id": "knowledge_base", "kind": "knowledge-base", "body": {
"name": "regression parser golden", "knowledge_engine_plugin_id": "langbot-team/LangRAG",
"creation_settings": {"embedding_model_uuid": "${embedding_model}", "index_type": "chunk", "chunk_size": 512, "overlap": 50},
"retrieval_settings": {"search_type": "vector", "top_k": 5, "query_rewrite": "off", "rerank": "off"}
}, "documents": [{
"file": "../../skills/skills/langbot-testing/fixtures/rag/parser-golden.html",
"parser_plugin_id": "langbot-team/GeneralParsers"
}]},
{"id": "chat_pipeline", "kind": "pipeline", "body": {
"name": "regression chat", "description": "Normal deterministic chat",
"config": {
"ai": {
"runner": {"id": "plugin:langbot-team/LocalAgent/default", "expire-time": 0},
"runner_config": {"plugin:langbot-team/LocalAgent/default": {
"model": {"primary": "${chat_model}", "fallbacks": []},
"prompt": [{"role": "system", "content": "You are a QA regression assistant."}],
"knowledge-bases": [], "box-enabled": false, "timeout": 30
}}
},
"safety": {"rate-limit": {"limitation": 10000}},
"output": {"force-delay": {"min": 0, "max": 0}}
}
}},
{"id": "box_pipeline", "kind": "pipeline", "body": {
"name": "regression Box", "description": "Real Box write and read",
"config": {
"ai": {
"runner": {"id": "plugin:langbot-team/LocalAgent/default", "expire-time": 0},
"runner_config": {"plugin:langbot-team/LocalAgent/default": {
"model": {"primary": "${box_model}", "fallbacks": []},
"prompt": [{"role": "system", "content": "You are a QA regression assistant."}],
"knowledge-bases": [], "box-enabled": true, "box-session-id-template": "{global}",
"timeout": 30, "max-tool-iterations": 5
}}
},
"safety": {"rate-limit": {"limitation": 10000}},
"output": {"force-delay": {"min": 0, "max": 0}}
}
}},
{"id": "rag_pipeline", "kind": "pipeline", "body": {
"name": "regression RAG", "description": "Retrieved model input oracle",
"config": {
"ai": {
"runner": {"id": "plugin:langbot-team/LocalAgent/default", "expire-time": 0},
"runner_config": {"plugin:langbot-team/LocalAgent/default": {
"model": {"primary": "${rag_model}", "fallbacks": []},
"prompt": [{"role": "system", "content": "You are a QA regression assistant."}],
"knowledge-bases": ["${knowledge_base}"], "box-enabled": false,
"timeout": 30, "retrieval-top-k": 5
}}
},
"safety": {"rate-limit": {"limitation": 10000}},
"output": {"force-delay": {"min": 0, "max": 0}}
}
}}
],
"cases": [
{"name": "chat", "weight": 2, "args": ["pipeline", "run", "${chat_pipeline}", "--message", "Run the normal QA scenario", "--timeout", "90s"], "expect": "LANGBOT_CHAT_OK"},
{"name": "box", "weight": 1, "args": ["pipeline", "run", "${box_pipeline}", "--message", "Run the normal QA scenario", "--timeout", "90s"], "expect": "LANGBOT_BOX_OK"},
{"name": "rag_chat", "weight": 1, "args": ["pipeline", "run", "${rag_pipeline}", "--message", "What is the documented parser-rag sentinel?", "--timeout", "90s"], "expect": "LANGBOT_RAG_OK"},
{"name": "rag_retrieve", "weight": 1, "args": ["knowledge-base", "retrieve", "${knowledge_base}"], "body": {"query": "What is the parser-rag golden sentinel and parser-engine pair?", "retrieval_settings": {"search_type": "vector", "top_k": 5}}, "expect": "aurora-parser-rag-9137"}
],
"phases": [{"name": "normal", "duration_seconds": 600, "rps": 2, "workers": 4, "cooldown_seconds": 30}],
"observe": {
"health": {"core": "${core_health}", "mock": "http://127.0.0.1:18080/healthz", "box": "http://127.0.0.1:5410/readyz"},
"pids": {}, "pid_files": {}, "containers": []
},
"cleanup": "on-success",
"thresholds": {"min_rps_ratio": 0.95, "max_p95_seconds": {"chat": 3, "box": 6, "rag_chat": 4, "rag_retrieve": 1}}
}