chATLAS_Chains 0.3.1__tar.gz → 0.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/PKG-INFO +38 -11
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/README.md +37 -10
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/advanced.py +4 -4
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/conversational_graph.py +3 -3
- chatlas_chains-0.3.3/chATLAS_Chains/lia/SYSTEM_GUIDANCE.md +186 -0
- chatlas_chains-0.3.3/chATLAS_Chains/lia/TERMINOLOGY_GLOSSARY.md +118 -0
- chatlas_chains-0.3.3/chATLAS_Chains/lia/__init__.py +21 -0
- chatlas_chains-0.3.3/chATLAS_Chains/lia/guidance.py +268 -0
- chatlas_chains-0.3.3/chATLAS_Chains/lia/statement.schema.json +107 -0
- chatlas_chains-0.3.3/chATLAS_Chains/lia/statements.json +912 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/llm/model_selection.py +16 -47
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/llm/runnables.py +12 -6
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/query/query_rewriting.py +2 -2
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/router.py +27 -11
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains.egg-info/PKG-INFO +38 -11
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains.egg-info/SOURCES.txt +8 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/pyproject.toml +4 -1
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_chains.py +6 -6
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_conversational.py +15 -8
- chatlas_chains-0.3.3/tests/test_lia.py +115 -0
- chatlas_chains-0.3.3/tests/test_lia_litellm.py +29 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_llm_runnables.py +3 -3
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_model_selection.py +19 -1
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_router.py +76 -11
- chatlas_chains-0.3.3/tests/test_router_litellm.py +101 -0
- chatlas_chains-0.3.1/tests/test_router_litellm.py +0 -42
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/LICENSE +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/__init__.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/__init__.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/basic.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/basic_graph.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/enhanced_agentic_graph.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/websearch_retrieval_chain.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/documents/rerank.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/documents/rrf.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/llm/__init__.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/llm/groq.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/log.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/prompt/__init__.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/prompt/doc_joiners.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/prompt/starters.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/search/__init__.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/search/basic.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/utils/__init__.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/utils/doc_utils.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/vectorstore.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains.egg-info/dependency_links.txt +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains.egg-info/requires.txt +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains.egg-info/top_level.txt +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/setup.cfg +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/__init__.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/conftest.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_chat_model_kwargs.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_groq.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_rrf.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_search.py +0 -0
- {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chATLAS_Chains
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: A modular Python package for implementing Retrieval Augmented Generation chains for the chATLAS project.
|
|
5
5
|
Author-email: Joe Egan <joseph.caimin.egan@cern.ch>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -66,9 +66,33 @@ ssh -L 3000:cs-513-ml003:3000 $LXPLUS_USERNAME@lxplus.cern.ch
|
|
|
66
66
|
export CHATLAS_GROQ_BASE_URL="http://localhost:3000"
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
3. Using
|
|
69
|
+
3. Using chat models through [CERN AI Gateway](https://ml.docs.cern.ch/aigw/gettingstarted/).
|
|
70
|
+
The key variable retains its historical name so existing CI and OpenShift
|
|
71
|
+
configuration does not need to be renamed.
|
|
70
72
|
```bash
|
|
71
|
-
export CHATLAS_CHAINS_LITELLM_KEY="your
|
|
73
|
+
export CHATLAS_CHAINS_LITELLM_KEY="your CERN AI Gateway key"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
4. Optional proxy for LLM HTTP requests when direct endpoint access is unavailable.
|
|
77
|
+
```bash
|
|
78
|
+
export CHATLAS_PROXY="http://127.0.0.1:7890"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Leading in ATLAS Guidance
|
|
82
|
+
|
|
83
|
+
`chATLAS_Chains.lia.answer_lia_request` provides the bounded `/LIA` feedback
|
|
84
|
+
statement helper. It uses the approved 70-item catalogue and terminology
|
|
85
|
+
glossary, selects at most three statement records, never consumes conversation
|
|
86
|
+
history, and never performs document retrieval. Rating requests are refused
|
|
87
|
+
deterministically, while gateway failures use an approved catalogue-based
|
|
88
|
+
fallback. Frontend architecture and operational details are documented in
|
|
89
|
+
[`../chATLAS_Frontend/docs/LIA_GUIDANCE.md`](../chATLAS_Frontend/docs/LIA_GUIDANCE.md).
|
|
90
|
+
|
|
91
|
+
```python
|
|
92
|
+
from chATLAS_Chains.lia import answer_lia_request
|
|
93
|
+
|
|
94
|
+
response = answer_lia_request('/LIA What does "I see opportunity in uncertainty" mean?')
|
|
95
|
+
print(response.text)
|
|
72
96
|
```
|
|
73
97
|
|
|
74
98
|
## Supported Chains
|
|
@@ -81,7 +105,7 @@ More details [here](chATLAS_Chains/chains/README.md)
|
|
|
81
105
|
## Prompt Routing
|
|
82
106
|
|
|
83
107
|
`chATLAS_Chains.router.route_user_prompt` classifies a raw user prompt before it enters the main RAG flow.
|
|
84
|
-
The router defaults to CERN
|
|
108
|
+
The router defaults to CERN AI Gateway and returns a validated `RouterDecision` with:
|
|
85
109
|
|
|
86
110
|
- `route`: one of `hep_atlas`, `person_lookup`, `dangerous`, `out_of_scope`,
|
|
87
111
|
or `unknown`
|
|
@@ -101,7 +125,7 @@ decision = route_user_prompt(
|
|
|
101
125
|
"Who is Jane Doe?",
|
|
102
126
|
chat_model_kwargs={
|
|
103
127
|
"service_provider": "litellm",
|
|
104
|
-
"proxy": "socks5h://localhost:1080", # optional when
|
|
128
|
+
"proxy": "socks5h://localhost:1080", # optional when direct access is unavailable
|
|
105
129
|
},
|
|
106
130
|
)
|
|
107
131
|
|
|
@@ -123,17 +147,20 @@ continue through the normal selected workflow.
|
|
|
123
147
|
|
|
124
148
|
Router context uses a hybrid policy: the current user prompt is authoritative,
|
|
125
149
|
and recent conversation context is only a bounded disambiguation aid for
|
|
126
|
-
follow-ups such as "What about Run 3?".
|
|
127
|
-
|
|
128
|
-
|
|
150
|
+
follow-ups such as "What about Run 3?". It keeps up to five previous
|
|
151
|
+
user/assistant turns, caps prior user messages at 600 characters and assistant
|
|
152
|
+
messages at 400 characters, drops assistant answers over 1,000 raw characters,
|
|
153
|
+
and caps retained history at 4,000 characters.
|
|
129
154
|
|
|
130
|
-
For live
|
|
155
|
+
For live AI Gateway calls, set the legacy-named credential:
|
|
131
156
|
|
|
132
157
|
```sh
|
|
133
|
-
export CHATLAS_CHAINS_LITELLM_KEY="your
|
|
158
|
+
export CHATLAS_CHAINS_LITELLM_KEY="your CERN AI Gateway key"
|
|
134
159
|
```
|
|
135
160
|
|
|
136
|
-
|
|
161
|
+
Malformed model output is retried once with a strict JSON instruction. If the
|
|
162
|
+
gateway is unavailable or the retry is still invalid, the router raises an
|
|
163
|
+
error; the frontend logs it and fails open into the selected UI mode.
|
|
137
164
|
|
|
138
165
|
### Model Configuration in Chains
|
|
139
166
|
|
|
@@ -40,9 +40,33 @@ ssh -L 3000:cs-513-ml003:3000 $LXPLUS_USERNAME@lxplus.cern.ch
|
|
|
40
40
|
export CHATLAS_GROQ_BASE_URL="http://localhost:3000"
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
3. Using
|
|
43
|
+
3. Using chat models through [CERN AI Gateway](https://ml.docs.cern.ch/aigw/gettingstarted/).
|
|
44
|
+
The key variable retains its historical name so existing CI and OpenShift
|
|
45
|
+
configuration does not need to be renamed.
|
|
44
46
|
```bash
|
|
45
|
-
export CHATLAS_CHAINS_LITELLM_KEY="your
|
|
47
|
+
export CHATLAS_CHAINS_LITELLM_KEY="your CERN AI Gateway key"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
4. Optional proxy for LLM HTTP requests when direct endpoint access is unavailable.
|
|
51
|
+
```bash
|
|
52
|
+
export CHATLAS_PROXY="http://127.0.0.1:7890"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Leading in ATLAS Guidance
|
|
56
|
+
|
|
57
|
+
`chATLAS_Chains.lia.answer_lia_request` provides the bounded `/LIA` feedback
|
|
58
|
+
statement helper. It uses the approved 70-item catalogue and terminology
|
|
59
|
+
glossary, selects at most three statement records, never consumes conversation
|
|
60
|
+
history, and never performs document retrieval. Rating requests are refused
|
|
61
|
+
deterministically, while gateway failures use an approved catalogue-based
|
|
62
|
+
fallback. Frontend architecture and operational details are documented in
|
|
63
|
+
[`../chATLAS_Frontend/docs/LIA_GUIDANCE.md`](../chATLAS_Frontend/docs/LIA_GUIDANCE.md).
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from chATLAS_Chains.lia import answer_lia_request
|
|
67
|
+
|
|
68
|
+
response = answer_lia_request('/LIA What does "I see opportunity in uncertainty" mean?')
|
|
69
|
+
print(response.text)
|
|
46
70
|
```
|
|
47
71
|
|
|
48
72
|
## Supported Chains
|
|
@@ -55,7 +79,7 @@ More details [here](chATLAS_Chains/chains/README.md)
|
|
|
55
79
|
## Prompt Routing
|
|
56
80
|
|
|
57
81
|
`chATLAS_Chains.router.route_user_prompt` classifies a raw user prompt before it enters the main RAG flow.
|
|
58
|
-
The router defaults to CERN
|
|
82
|
+
The router defaults to CERN AI Gateway and returns a validated `RouterDecision` with:
|
|
59
83
|
|
|
60
84
|
- `route`: one of `hep_atlas`, `person_lookup`, `dangerous`, `out_of_scope`,
|
|
61
85
|
or `unknown`
|
|
@@ -75,7 +99,7 @@ decision = route_user_prompt(
|
|
|
75
99
|
"Who is Jane Doe?",
|
|
76
100
|
chat_model_kwargs={
|
|
77
101
|
"service_provider": "litellm",
|
|
78
|
-
"proxy": "socks5h://localhost:1080", # optional when
|
|
102
|
+
"proxy": "socks5h://localhost:1080", # optional when direct access is unavailable
|
|
79
103
|
},
|
|
80
104
|
)
|
|
81
105
|
|
|
@@ -97,17 +121,20 @@ continue through the normal selected workflow.
|
|
|
97
121
|
|
|
98
122
|
Router context uses a hybrid policy: the current user prompt is authoritative,
|
|
99
123
|
and recent conversation context is only a bounded disambiguation aid for
|
|
100
|
-
follow-ups such as "What about Run 3?".
|
|
101
|
-
|
|
102
|
-
|
|
124
|
+
follow-ups such as "What about Run 3?". It keeps up to five previous
|
|
125
|
+
user/assistant turns, caps prior user messages at 600 characters and assistant
|
|
126
|
+
messages at 400 characters, drops assistant answers over 1,000 raw characters,
|
|
127
|
+
and caps retained history at 4,000 characters.
|
|
103
128
|
|
|
104
|
-
For live
|
|
129
|
+
For live AI Gateway calls, set the legacy-named credential:
|
|
105
130
|
|
|
106
131
|
```sh
|
|
107
|
-
export CHATLAS_CHAINS_LITELLM_KEY="your
|
|
132
|
+
export CHATLAS_CHAINS_LITELLM_KEY="your CERN AI Gateway key"
|
|
108
133
|
```
|
|
109
134
|
|
|
110
|
-
|
|
135
|
+
Malformed model output is retried once with a strict JSON instruction. If the
|
|
136
|
+
gateway is unavailable or the retry is still invalid, the router raises an
|
|
137
|
+
error; the frontend logs it and fails open into the selected UI mode.
|
|
111
138
|
|
|
112
139
|
### Model Configuration in Chains
|
|
113
140
|
|
|
@@ -24,7 +24,7 @@ from langgraph.graph.state import CompiledStateGraph
|
|
|
24
24
|
from chATLAS_Chains.documents.rerank import rerank_documents
|
|
25
25
|
from chATLAS_Chains.documents.rrf import reciprocal_rank_fusion, split_docs_by_retriever
|
|
26
26
|
from chATLAS_Chains.llm.model_selection import (
|
|
27
|
-
|
|
27
|
+
DEFAULT_GROQ_MODEL,
|
|
28
28
|
ChatModelKwargs,
|
|
29
29
|
get_chat_model,
|
|
30
30
|
sanitize_chat_model_kwargs,
|
|
@@ -56,7 +56,7 @@ def advanced_rag(
|
|
|
56
56
|
enable_rrf: bool = False,
|
|
57
57
|
enable_reranking: bool = False,
|
|
58
58
|
# enable_self_evaluation: bool = False,
|
|
59
|
-
query_rewriting_model: str =
|
|
59
|
+
query_rewriting_model: str = DEFAULT_GROQ_MODEL,
|
|
60
60
|
query_rewriting_chat_model_kwargs: ChatModelKwargs | None = None,
|
|
61
61
|
rerank_model: str = "cohere-rerank-3.5",
|
|
62
62
|
pinecone_api_key: str | None = None,
|
|
@@ -285,7 +285,7 @@ def stream_generate_answer(state: HybridGraphState, model, prompt_template: Chat
|
|
|
285
285
|
|
|
286
286
|
|
|
287
287
|
if __name__ == "__main__":
|
|
288
|
-
from chATLAS_Chains.llm.model_selection import
|
|
288
|
+
from chATLAS_Chains.llm.model_selection import DEFAULT_GROQ_MODEL
|
|
289
289
|
from chATLAS_Chains.vectorstore import get_vectorstore
|
|
290
290
|
|
|
291
291
|
twiki = get_vectorstore("twiki_prod")
|
|
@@ -294,7 +294,7 @@ if __name__ == "__main__":
|
|
|
294
294
|
# Create the hybrid graph
|
|
295
295
|
graph = advanced_rag(
|
|
296
296
|
vectorstore=[twiki, mkdocs],
|
|
297
|
-
model_name=
|
|
297
|
+
model_name=DEFAULT_GROQ_MODEL,
|
|
298
298
|
enable_query_rewriting=True,
|
|
299
299
|
enable_rrf=True,
|
|
300
300
|
enable_reranking=False,
|
|
@@ -18,7 +18,7 @@ from sentence_transformers.util import cos_sim
|
|
|
18
18
|
|
|
19
19
|
from chATLAS_Chains.chains.advanced import advanced_rag, build_generation_prompt, stream_generate_answer
|
|
20
20
|
from chATLAS_Chains.llm.model_selection import (
|
|
21
|
-
|
|
21
|
+
DEFAULT_GROQ_MODEL,
|
|
22
22
|
ChatModelKwargs,
|
|
23
23
|
get_chat_model,
|
|
24
24
|
sanitize_chat_model_kwargs,
|
|
@@ -134,7 +134,7 @@ def conversational_retrieval_graph(
|
|
|
134
134
|
enable_rrf: bool = True,
|
|
135
135
|
enable_reranking: bool = False,
|
|
136
136
|
enable_query_contextualization: bool = True,
|
|
137
|
-
query_rewriting_model: str =
|
|
137
|
+
query_rewriting_model: str = DEFAULT_GROQ_MODEL,
|
|
138
138
|
query_rewriting_chat_model_kwargs: ChatModelKwargs | None = None,
|
|
139
139
|
contextualization_model: str | None = None,
|
|
140
140
|
contextualization_chat_model_kwargs: ChatModelKwargs | None = None,
|
|
@@ -528,7 +528,7 @@ if __name__ == "__main__":
|
|
|
528
528
|
|
|
529
529
|
graph = conversational_retrieval_graph(
|
|
530
530
|
vectorstore=vectorstore,
|
|
531
|
-
model_name=
|
|
531
|
+
model_name=DEFAULT_GROQ_MODEL,
|
|
532
532
|
checkpointer=checkpointer,
|
|
533
533
|
enable_query_rewriting=False,
|
|
534
534
|
enable_rrf=True,
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# /LIA — Feedback Statement Guidance
|
|
2
|
+
|
|
3
|
+
## 1. Context
|
|
4
|
+
|
|
5
|
+
The Resilient Leaders Feedback Engine gives a participant a multi-dimensional view of themselves as a Resilient Leader.
|
|
6
|
+
|
|
7
|
+
It compares:
|
|
8
|
+
- the participant's own self-assessment; and
|
|
9
|
+
- feedback from people whose opinion they value and who know them well in their current role.
|
|
10
|
+
|
|
11
|
+
The value comes from seeing differences and similarities between **how the participant sees themselves** and **how other people experience them**.
|
|
12
|
+
|
|
13
|
+
The respondent invitation says, in substance:
|
|
14
|
+
|
|
15
|
+
> I have chosen you because you know me really well, and I trust your opinion.
|
|
16
|
+
|
|
17
|
+
> It is important that I get a really clear picture of where I'm strong and where I need to develop, so please only respond where you are really confident that you have seen evidence either way.
|
|
18
|
+
|
|
19
|
+
> Go with your initial thoughts and instincts. If you are not certain, leave the statement and move to the next.
|
|
20
|
+
|
|
21
|
+
This principle should govern every `/LIA` explanation.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 2. Purpose of `/LIA`
|
|
26
|
+
|
|
27
|
+
`/LIA` exists to help a feedback respondent understand **what an assessment statement is asking**.
|
|
28
|
+
|
|
29
|
+
It should:
|
|
30
|
+
- translate unfamiliar leadership-development language into plain language;
|
|
31
|
+
- explain RLE-specific terminology;
|
|
32
|
+
- describe the kinds of **observable behaviour** the statement is trying to capture;
|
|
33
|
+
- help respondents distinguish evidence from assumptions;
|
|
34
|
+
- remind respondents that leaving a statement unanswered is appropriate when they do not have enough evidence.
|
|
35
|
+
|
|
36
|
+
It must **not** influence the score.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 3. Tone
|
|
41
|
+
|
|
42
|
+
Use plain, conversational language suitable for scientists and collaborators who may have no prior leadership-development training.
|
|
43
|
+
|
|
44
|
+
The tone should be:
|
|
45
|
+
- neutral;
|
|
46
|
+
- concise;
|
|
47
|
+
- practical;
|
|
48
|
+
- non-judgmental;
|
|
49
|
+
- reassuring without being patronising.
|
|
50
|
+
|
|
51
|
+
Avoid corporate or coaching jargon wherever possible.
|
|
52
|
+
|
|
53
|
+
Do not imply that the respondent ought to understand leadership terminology already.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 4. Core rules
|
|
58
|
+
|
|
59
|
+
1. **Never recommend a score or rating.**
|
|
60
|
+
2. **Never infer a score from examples the respondent gives.**
|
|
61
|
+
3. Preserve and show the **official RLE statement** exactly.
|
|
62
|
+
4. Clearly distinguish official wording from any explanation or example.
|
|
63
|
+
5. Explain abstract terminology in everyday language.
|
|
64
|
+
6. Translate concepts into **observable behaviour** wherever possible.
|
|
65
|
+
7. Examples are illustrations, not a checklist the participant must satisfy.
|
|
66
|
+
8. Do not infer motives, emotions, beliefs, stress levels, confidence, private habits, or other internal states unless the respondent has genuinely observed evidence of them.
|
|
67
|
+
9. If the respondent would need to guess, encourage them to leave the item unanswered.
|
|
68
|
+
10. Do not turn the exercise into an evaluation of personality, likability, technical competence, seniority, or whether the respondent agrees with the participant.
|
|
69
|
+
11. Interpret terms such as “organisation”, “hierarchy”, “team”, and “external environment” flexibly enough to make sense in a large, collaborative scientific environment.
|
|
70
|
+
12. Do not silently change the meaning of an RLE term. If a framework definition is uncertain, say that it should be confirmed rather than inventing one.
|
|
71
|
+
13. Words such as “everyone”, “top priority”, “exceptional”, and “unrelenting” should not be treated as literal perfection tests when explaining the intended behaviour.
|
|
72
|
+
14. The goal is **better respondent understanding**, not coaching the person being assessed.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 5. The pressure / stress issue
|
|
77
|
+
|
|
78
|
+
In ATLAS, the word **pressure** is commonly used as something negative in its own right.
|
|
79
|
+
|
|
80
|
+
Several RLE statements use “pressure” and “stress” as distinct concepts, for example:
|
|
81
|
+
|
|
82
|
+
> “I know what takes me from pressure to stress.”
|
|
83
|
+
|
|
84
|
+
For `/LIA`, do not assume respondents share that distinction.
|
|
85
|
+
|
|
86
|
+
### Draft explanatory wording
|
|
87
|
+
|
|
88
|
+
> In everyday ATLAS language, “pressure” may already sound negative. In these RLE statements, the wording appears to distinguish manageable pressure or demands from the point at which that pressure becomes unhelpful stress and starts affecting how someone functions. Think about the transition, not whether pressure itself is good or bad.
|
|
89
|
+
|
|
90
|
+
This interpretation was confirmed for the LiA helper on 28 September 2026.
|
|
91
|
+
|
|
92
|
+
The same caution applies to **rebalance**, meaning taking action to recover or restore effective functioning after moving into stress.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 6. What counts as evidence?
|
|
97
|
+
|
|
98
|
+
Good evidence is something the respondent has reasonably observed, for example:
|
|
99
|
+
- how the person runs or contributes to meetings;
|
|
100
|
+
- how they react to disagreement or challenge;
|
|
101
|
+
- how they communicate changing priorities;
|
|
102
|
+
- how they make decisions;
|
|
103
|
+
- whether they ask for support;
|
|
104
|
+
- whether they make room for others to lead;
|
|
105
|
+
- how they respond after setbacks;
|
|
106
|
+
- how they follow through on commitments.
|
|
107
|
+
|
|
108
|
+
Poor evidence includes:
|
|
109
|
+
- “They seem like that kind of person.”
|
|
110
|
+
- assumptions based on status or seniority;
|
|
111
|
+
- technical reputation alone;
|
|
112
|
+
- hearsay;
|
|
113
|
+
- guessing how the person feels internally;
|
|
114
|
+
- a single unrelated incident that does not actually speak to the statement.
|
|
115
|
+
|
|
116
|
+
The respondent does not need perfect evidence. They do need enough direct experience to have a reasonably confident view.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 7. Recommended `/LIA` response pattern
|
|
121
|
+
|
|
122
|
+
When a respondent asks about a statement, answer in this structure:
|
|
123
|
+
|
|
124
|
+
### Official statement
|
|
125
|
+
Quote the statement exactly.
|
|
126
|
+
|
|
127
|
+
### In plain English
|
|
128
|
+
Give a short explanation of what the statement is trying to capture.
|
|
129
|
+
|
|
130
|
+
### What you might have observed
|
|
131
|
+
Give 1–3 short examples of relevant behaviour in a collaborative/scientific context.
|
|
132
|
+
|
|
133
|
+
### Be careful not to assume
|
|
134
|
+
Flag any internal state, ambiguity, or common misreading.
|
|
135
|
+
|
|
136
|
+
### If you have not seen this
|
|
137
|
+
Remind them that it is appropriate to leave the statement unanswered.
|
|
138
|
+
|
|
139
|
+
Do **not** add a suggested score.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## 8. Example
|
|
144
|
+
|
|
145
|
+
User:
|
|
146
|
+
> `/LIA What does “I see opportunity in uncertainty” mean?`
|
|
147
|
+
|
|
148
|
+
Preferred response:
|
|
149
|
+
|
|
150
|
+
**Official statement:**
|
|
151
|
+
|
|
152
|
+
“I see opportunity in uncertainty.”
|
|
153
|
+
|
|
154
|
+
**In plain English:**
|
|
155
|
+
|
|
156
|
+
When things are unclear or changing, does this person notice useful possibilities rather than only focusing on what could go wrong?
|
|
157
|
+
|
|
158
|
+
**What you might have observed:**
|
|
159
|
+
|
|
160
|
+
They may identify a new route when a plan changes, spot possibilities created by an unexpected situation, or help a group explore alternatives when the answer is not yet known.
|
|
161
|
+
|
|
162
|
+
**Be careful not to assume:**
|
|
163
|
+
|
|
164
|
+
This is not simply asking whether they are an optimistic person.
|
|
165
|
+
|
|
166
|
+
**If you have not seen this:**
|
|
167
|
+
|
|
168
|
+
If you have not had enough opportunity to see them operate in uncertain situations, it is fine to leave the statement unanswered.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## 9. Scoring questions
|
|
173
|
+
|
|
174
|
+
If the respondent asks `/LIA` to choose a rating, respond with a boundary such as:
|
|
175
|
+
|
|
176
|
+
> I can help explain what the statement means and what kinds of evidence are relevant, but the rating needs to be your judgment based on what you have actually observed. If you are not confident you have enough evidence, it is appropriate to leave the statement unanswered.
|
|
177
|
+
|
|
178
|
+
Do not convert user anecdotes into a rating.
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 10. Product copy near the feature
|
|
183
|
+
|
|
184
|
+
Suggested short copy:
|
|
185
|
+
|
|
186
|
+
> **Unsure what a statement means?** Ask `/LIA` for a plain-English explanation. It can help you understand the question and the kind of behaviour it refers to, but it will never tell you how to rate the person.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# /LIA Terminology Glossary
|
|
2
|
+
|
|
3
|
+
These definitions were confirmed for the LiA helper on 28 September 2026. They help respondents understand the **assessment wording** and do not change the official statements.
|
|
4
|
+
|
|
5
|
+
## Pressure
|
|
6
|
+
**Potential issue in ATLAS:** “Pressure” is often already used negatively.
|
|
7
|
+
|
|
8
|
+
**Draft `/LIA` explanation:** Manageable demands or pressure that have not yet tipped into unhelpful stress. In the relevant RLE statements, focus on the transition from pressure to stress rather than assuming pressure is positive.
|
|
9
|
+
|
|
10
|
+
**Status:** Confirmed.
|
|
11
|
+
|
|
12
|
+
## Stress
|
|
13
|
+
**Draft `/LIA` explanation:** The point at which pressure begins to have an unhelpful effect on how someone functions, responds, or works.
|
|
14
|
+
|
|
15
|
+
**Status:** Confirmed.
|
|
16
|
+
|
|
17
|
+
## Rebalance
|
|
18
|
+
**Draft `/LIA` explanation:** Taking action to recover, reset, or restore effective functioning after pressure has become unhelpful stress.
|
|
19
|
+
|
|
20
|
+
**Status:** Confirmed.
|
|
21
|
+
|
|
22
|
+
## Strengths
|
|
23
|
+
Capabilities, qualities, or ways of working that someone can use effectively.
|
|
24
|
+
|
|
25
|
+
## Weaknesses / areas where support is needed
|
|
26
|
+
Areas where someone is less strong, less experienced, or benefits from help. The statement is not asking whether someone is “weak” as a person.
|
|
27
|
+
|
|
28
|
+
## Motivations
|
|
29
|
+
The things that tend to give someone energy, commitment, or a reason to act.
|
|
30
|
+
|
|
31
|
+
## Influence
|
|
32
|
+
The effect someone's behaviour, communication, expertise, decisions, or presence has on other people. It does not require formal authority.
|
|
33
|
+
|
|
34
|
+
## Overall goal
|
|
35
|
+
The larger outcome the group, team, activity, or organisation is trying to achieve.
|
|
36
|
+
|
|
37
|
+
## Systems, processes and culture
|
|
38
|
+
- **Systems:** formal or informal structures through which work happens.
|
|
39
|
+
- **Processes:** ways decisions, tasks, approvals, information, or coordination happen.
|
|
40
|
+
- **Culture:** norms and expectations about how people behave and work together.
|
|
41
|
+
|
|
42
|
+
## External environment
|
|
43
|
+
Relevant changes outside the immediate team that can affect the work. In ATLAS this might include collaboration-level changes, funding or institutional constraints, technology, schedules, policy, or broader scientific developments. It does not have to mean a commercial “marketplace”.
|
|
44
|
+
|
|
45
|
+
## Physical environment
|
|
46
|
+
The practical setting in which people work: meeting setup, room conditions, remote/hybrid arrangements, accessibility, tools, or other surroundings that affect how people can contribute.
|
|
47
|
+
|
|
48
|
+
## Values and ethics / “ethical code”
|
|
49
|
+
The principles someone uses to judge what they believe is right, fair, responsible, or acceptable.
|
|
50
|
+
|
|
51
|
+
## Step forward
|
|
52
|
+
Take more ownership, contribute a view, take an opportunity, or lead something.
|
|
53
|
+
|
|
54
|
+
## Step up
|
|
55
|
+
Take responsibility or leadership when the situation requires it.
|
|
56
|
+
|
|
57
|
+
## Serving
|
|
58
|
+
In this framework, supporting others to contribute, develop, succeed, and lead where appropriate. It should not be read as passive or subordinate behaviour.
|
|
59
|
+
|
|
60
|
+
## Purpose / stay on purpose
|
|
61
|
+
Remain focused on what the work is trying to achieve, especially when there is disagreement, resistance, distraction, or negativity.
|
|
62
|
+
|
|
63
|
+
## Momentum
|
|
64
|
+
Continued useful progress. It does not mean rushing; it means helping work move rather than stall.
|
|
65
|
+
|
|
66
|
+
## Vision
|
|
67
|
+
A clear picture of the future state or outcome someone is trying to create. It does not need to be grand or corporate.
|
|
68
|
+
|
|
69
|
+
## Strategy / strategies
|
|
70
|
+
The chosen approach for moving from the current situation toward the intended goal.
|
|
71
|
+
|
|
72
|
+
## Measurable outcomes
|
|
73
|
+
Results that can be checked or assessed rather than only described vaguely.
|
|
74
|
+
|
|
75
|
+
## Operational level
|
|
76
|
+
What a direction or strategy means in day-to-day practice for people, tasks, systems, responsibilities, and ways of working.
|
|
77
|
+
|
|
78
|
+
## Aligned
|
|
79
|
+
People understand the direction, priorities, and what matters sufficiently to coordinate their actions. Alignment does **not** necessarily mean everyone agrees.
|
|
80
|
+
|
|
81
|
+
## Determination
|
|
82
|
+
Continuing to orient toward what matters while adapting the approach when needed. It should not be interpreted as stubbornness.
|
|
83
|
+
|
|
84
|
+
## Excellence
|
|
85
|
+
A high standard of work appropriate to the situation. Avoid treating this as perfection.
|
|
86
|
+
|
|
87
|
+
## Positive attitude to risk
|
|
88
|
+
A willingness to take sensible, proportionate risks when the potential benefit justifies them. It should not mean being reckless or “liking risk”.
|
|
89
|
+
|
|
90
|
+
## What's at stake
|
|
91
|
+
The possible consequences of a decision, including benefits, harms, costs, reputational effects, scientific effects, or impacts on people and work.
|
|
92
|
+
|
|
93
|
+
## Intuition
|
|
94
|
+
Professional judgment or a sense developed through experience. It should not be interpreted as making arbitrary decisions without evidence.
|
|
95
|
+
|
|
96
|
+
## Robust debate
|
|
97
|
+
Serious, constructive challenge that tests reasoning, evidence, assumptions, and alternatives.
|
|
98
|
+
|
|
99
|
+
## Assumptions
|
|
100
|
+
Things being treated as true or likely without necessarily having been fully tested.
|
|
101
|
+
|
|
102
|
+
## Biases
|
|
103
|
+
Patterns in judgment that can shape how information, people, risks, or options are interpreted.
|
|
104
|
+
|
|
105
|
+
## “Good enough” decision
|
|
106
|
+
A decision that is sufficiently sound for the situation and allows useful progress when further analysis would add little value. It does not mean careless or low-quality work.
|
|
107
|
+
|
|
108
|
+
## “No action” is the right decision
|
|
109
|
+
A deliberate choice not to act because action would not improve the situation or because waiting is itself the most appropriate option. It is not the same as avoidance.
|
|
110
|
+
|
|
111
|
+
## Different levels of the organisation
|
|
112
|
+
The different people or parts affected by a decision. In ATLAS this might mean an individual, analysis/team, subgroup, group, combined-performance area, or the wider collaboration rather than a conventional management hierarchy.
|
|
113
|
+
|
|
114
|
+
## Options and flexibility
|
|
115
|
+
Making decisions in ways that do not unnecessarily lock the group into one path and that preserve the ability to adapt if circumstances change.
|
|
116
|
+
|
|
117
|
+
## Pace of decision making
|
|
118
|
+
How quickly or deliberately a decision is made. Different situations can justify different speeds.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"""Leading in ATLAS feedback-statement clarification support."""
|
|
2
|
+
|
|
3
|
+
from chATLAS_Chains.lia.guidance import (
|
|
4
|
+
LIA_STATUS_MESSAGE,
|
|
5
|
+
LiAResponse,
|
|
6
|
+
answer_lia_request,
|
|
7
|
+
is_lia_request,
|
|
8
|
+
load_statements,
|
|
9
|
+
select_statements,
|
|
10
|
+
strip_lia_command,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"LIA_STATUS_MESSAGE",
|
|
15
|
+
"LiAResponse",
|
|
16
|
+
"answer_lia_request",
|
|
17
|
+
"is_lia_request",
|
|
18
|
+
"load_statements",
|
|
19
|
+
"select_statements",
|
|
20
|
+
"strip_lia_command",
|
|
21
|
+
]
|