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.
Files changed (57) hide show
  1. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/PKG-INFO +38 -11
  2. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/README.md +37 -10
  3. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/advanced.py +4 -4
  4. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/conversational_graph.py +3 -3
  5. chatlas_chains-0.3.3/chATLAS_Chains/lia/SYSTEM_GUIDANCE.md +186 -0
  6. chatlas_chains-0.3.3/chATLAS_Chains/lia/TERMINOLOGY_GLOSSARY.md +118 -0
  7. chatlas_chains-0.3.3/chATLAS_Chains/lia/__init__.py +21 -0
  8. chatlas_chains-0.3.3/chATLAS_Chains/lia/guidance.py +268 -0
  9. chatlas_chains-0.3.3/chATLAS_Chains/lia/statement.schema.json +107 -0
  10. chatlas_chains-0.3.3/chATLAS_Chains/lia/statements.json +912 -0
  11. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/llm/model_selection.py +16 -47
  12. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/llm/runnables.py +12 -6
  13. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/query/query_rewriting.py +2 -2
  14. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/router.py +27 -11
  15. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains.egg-info/PKG-INFO +38 -11
  16. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains.egg-info/SOURCES.txt +8 -0
  17. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/pyproject.toml +4 -1
  18. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_chains.py +6 -6
  19. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_conversational.py +15 -8
  20. chatlas_chains-0.3.3/tests/test_lia.py +115 -0
  21. chatlas_chains-0.3.3/tests/test_lia_litellm.py +29 -0
  22. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_llm_runnables.py +3 -3
  23. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_model_selection.py +19 -1
  24. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_router.py +76 -11
  25. chatlas_chains-0.3.3/tests/test_router_litellm.py +101 -0
  26. chatlas_chains-0.3.1/tests/test_router_litellm.py +0 -42
  27. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/LICENSE +0 -0
  28. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/__init__.py +0 -0
  29. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/__init__.py +0 -0
  30. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/basic.py +0 -0
  31. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/basic_graph.py +0 -0
  32. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/enhanced_agentic_graph.py +0 -0
  33. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/chains/websearch_retrieval_chain.py +0 -0
  34. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/documents/rerank.py +0 -0
  35. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/documents/rrf.py +0 -0
  36. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/llm/__init__.py +0 -0
  37. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/llm/groq.py +0 -0
  38. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/log.py +0 -0
  39. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/prompt/__init__.py +0 -0
  40. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/prompt/doc_joiners.py +0 -0
  41. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/prompt/starters.py +0 -0
  42. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/search/__init__.py +0 -0
  43. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/search/basic.py +0 -0
  44. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/utils/__init__.py +0 -0
  45. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/utils/doc_utils.py +0 -0
  46. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains/vectorstore.py +0 -0
  47. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains.egg-info/dependency_links.txt +0 -0
  48. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains.egg-info/requires.txt +0 -0
  49. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/chATLAS_Chains.egg-info/top_level.txt +0 -0
  50. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/setup.cfg +0 -0
  51. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/__init__.py +0 -0
  52. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/conftest.py +0 -0
  53. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_chat_model_kwargs.py +0 -0
  54. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_groq.py +0 -0
  55. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_rrf.py +0 -0
  56. {chatlas_chains-0.3.1 → chatlas_chains-0.3.3}/tests/test_search.py +0 -0
  57. {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.1
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 LLMs via CERN's LiteLLM API, here is the [repo](https://gitlab.cern.ch/itgpt/litellm-okd/-/tree/main) and some [setup instructions](https://codimd.web.cern.ch/tQKiMa13Q4O-EJXWTO3N7w?view#Using-Your-Dedicated-API-Key-to-Access-LLMs) for reference.
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 litellm key"
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 LiteLLM and returns a validated `RouterDecision` with:
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 outside CERN
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?". The router keeps recent user prompts,
127
- includes only short assistant messages, and drops long assistant answers rather
128
- than summarizing them.
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 LiteLLM calls, set:
155
+ For live AI Gateway calls, set the legacy-named credential:
131
156
 
132
157
  ```sh
133
- export CHATLAS_CHAINS_LITELLM_KEY="your litellm key"
158
+ export CHATLAS_CHAINS_LITELLM_KEY="your CERN AI Gateway key"
134
159
  ```
135
160
 
136
- If LiteLLM is unavailable or returns invalid JSON, the router falls back to deterministic rules by default.
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 LLMs via CERN's LiteLLM API, here is the [repo](https://gitlab.cern.ch/itgpt/litellm-okd/-/tree/main) and some [setup instructions](https://codimd.web.cern.ch/tQKiMa13Q4O-EJXWTO3N7w?view#Using-Your-Dedicated-API-Key-to-Access-LLMs) for reference.
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 litellm key"
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 LiteLLM and returns a validated `RouterDecision` with:
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 outside CERN
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?". The router keeps recent user prompts,
101
- includes only short assistant messages, and drops long assistant answers rather
102
- than summarizing them.
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 LiteLLM calls, set:
129
+ For live AI Gateway calls, set the legacy-named credential:
105
130
 
106
131
  ```sh
107
- export CHATLAS_CHAINS_LITELLM_KEY="your litellm key"
132
+ export CHATLAS_CHAINS_LITELLM_KEY="your CERN AI Gateway key"
108
133
  ```
109
134
 
110
- If LiteLLM is unavailable or returns invalid JSON, the router falls back to deterministic rules by default.
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
- GROQ_PRODUCTION_MODELS,
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 = GROQ_PRODUCTION_MODELS[0],
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 GROQ_PRODUCTION_MODELS
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=GROQ_PRODUCTION_MODELS[0],
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
- GROQ_PRODUCTION_MODELS,
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 = GROQ_PRODUCTION_MODELS[0],
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=GROQ_PRODUCTION_MODELS[0],
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
+ ]