Skip to content

Commit 55c4543

Browse files
authored
Merge pull request #1347 from syedriko/syedriko-lcore-1504
LCORE-1504: Change how the OKP server is located at runtime: RH_SERVER_OKP
2 parents 4e3678e + c2f6afe commit 55c4543

14 files changed

Lines changed: 771 additions & 777 deletions

Makefile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,17 +67,20 @@ docs/config.puml: src/models/config.py ## Generate PlantUML class diagram for co
6767
pyreverse src/models/config.py --output puml --output-directory=docs/
6868
mv docs/classes.puml docs/config.puml
6969

70+
# Omit --theme rose on the CLI: it fails with some plantuml.jar builds on pyreverse output.
71+
# To use rose, add a line after @startuml: !theme rose (requires a recent JAR).
72+
# PNG is capped at 4096px per side by default; pyreverse class diagrams are often wider—raise the limit.
7073
docs/config.png: docs/config.puml ## Generate an image with configuration graph
7174
pushd docs && \
72-
java -jar ${PATH_TO_PLANTUML}/plantuml.jar --theme rose config.puml && \
75+
java -DPLANTUML_LIMIT_SIZE=16384 -jar ${PATH_TO_PLANTUML}/plantuml.jar config.puml && \
7376
mv classes.png config.png && \
7477
popd
7578

7679
docs/config.svg: docs/config.puml ## Generate an SVG with configuration graph
7780
pushd docs && \
78-
java -jar ${PATH_TO_PLANTUML}/plantuml.jar --theme rose config.puml -tsvg && \
81+
java -jar ${PATH_TO_PLANTUML}/plantuml.jar config.puml -tsvg && \
7982
xmllint --format classes.svg > config.svg && \
80-
rm classes.svg && \
83+
rm -f classes.svg && \
8184
popd
8285

8386
shellcheck: ## Run shellcheck

docs/config.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,7 @@ Only relevant when ``"okp"`` is listed in ``rag.inline`` or ``rag.tool``.
407407
408408
| Field | Type | Description |
409409
|-------|------|-------------|
410+
| rhokp_url | string | Base URL for the OKP server. Set to `${env.RH_SERVER_OKP}` in YAML to use the environment variable. When missing or empty, the application default is used. |
410411
| offline | boolean | When True, use parent_id for OKP chunk source URLs. When False, use reference_url for chunk source URLs. |
411412
| chunk_filter_query | string | Additional OKP filter query applied to every OKP search request. Use Solr boolean syntax, e.g. 'product:\*ansible\* AND product:\*openshift\*'. |
412413

docs/config.png

-199 KB
Loading

docs/config.puml

Lines changed: 104 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,86 @@
11
@startuml classes
22
set namespaceSeparator none
33
class "A2AStateConfiguration" as src.models.config.A2AStateConfiguration {
4-
config
4+
config : Optional[SQLiteDatabaseConfiguration | PostgreSQLDatabaseConfiguration]
55
postgres : Optional[PostgreSQLDatabaseConfiguration]
66
sqlite : Optional[SQLiteDatabaseConfiguration]
7-
storage_type
7+
storage_type : Literal['memory', 'sqlite', 'postgres']
88
check_a2a_state_configuration() -> Self
99
}
1010
class "APIKeyTokenConfiguration" as src.models.config.APIKeyTokenConfiguration {
11-
api_key
11+
api_key : Optional[SecretStr]
1212
}
1313
class "AccessRule" as src.models.config.AccessRule {
14-
actions : list[Action]
15-
role : str
14+
actions : Optional[list[Action]]
15+
role : Optional[str]
1616
}
1717
class "Action" as src.models.config.Action {
1818
name
1919
}
2020
class "AuthenticationConfiguration" as src.models.config.AuthenticationConfiguration {
2121
api_key_config : Optional[APIKeyTokenConfiguration]
22-
api_key_configuration
22+
api_key_configuration : APIKeyTokenConfiguration
2323
jwk_config : Optional[JwkConfiguration]
24-
jwk_configuration
24+
jwk_configuration : JwkConfiguration
2525
k8s_ca_cert_path : Optional[FilePath]
2626
k8s_cluster_api : Optional[AnyHttpUrl]
2727
module : str
2828
rh_identity_config : Optional[RHIdentityConfiguration]
29-
rh_identity_configuration
30-
skip_for_health_probes : bool
29+
rh_identity_configuration : RHIdentityConfiguration
30+
skip_for_health_probes : Optional[bool]
3131
skip_tls_verification : bool
3232
check_authentication_model() -> Self
3333
}
3434
class "AuthorizationConfiguration" as src.models.config.AuthorizationConfiguration {
35-
access_rules : list[AccessRule]
35+
access_rules : Optional[list[AccessRule]]
3636
}
3737
class "AzureEntraIdConfiguration" as src.models.config.AzureEntraIdConfiguration {
38-
client_id
39-
client_secret
40-
scope : str
41-
tenant_id
38+
client_id : SecretStr
39+
client_secret : SecretStr
40+
scope : Optional[str]
41+
tenant_id : SecretStr
4242
}
4343
class "ByokRag" as src.models.config.ByokRag {
44-
db_path : str
45-
embedding_dimension
46-
embedding_model : str
47-
rag_id : str
48-
rag_type : str
49-
score_multiplier : float
50-
vector_db_id : str
44+
db_path : Optional[str]
45+
embedding_dimension : Optional[PositiveInt]
46+
embedding_model : Optional[str]
47+
rag_id : Optional[str]
48+
rag_type : Optional[str]
49+
score_multiplier : Optional[float]
50+
vector_db_id : Optional[str]
5151
}
5252
class "CORSConfiguration" as src.models.config.CORSConfiguration {
53-
allow_credentials : bool
54-
allow_headers : list[str]
55-
allow_methods : list[str]
56-
allow_origins : list[str]
53+
allow_credentials : Optional[bool]
54+
allow_headers : Optional[list[str]]
55+
allow_methods : Optional[list[str]]
56+
allow_origins : Optional[list[str]]
5757
check_cors_configuration() -> Self
5858
}
5959
class "Configuration" as src.models.config.Configuration {
60-
a2a_state
61-
authentication
60+
a2a_state : Optional[A2AStateConfiguration]
61+
authentication : Optional[AuthenticationConfiguration]
6262
authorization : Optional[AuthorizationConfiguration]
6363
azure_entra_id : Optional[AzureEntraIdConfiguration]
64-
byok_rag : list[ByokRag]
65-
conversation_cache
64+
byok_rag : Optional[list[ByokRag]]
65+
conversation_cache : Optional[ConversationHistoryConfiguration]
6666
customization : Optional[Customization]
67-
database
68-
deployment_environment : str
69-
inference
70-
llama_stack
71-
mcp_servers : list[ModelContextProtocolServer]
72-
name : str
73-
okp
74-
quota_handlers
75-
rag
76-
service
67+
database : Optional[DatabaseConfiguration]
68+
deployment_environment : Optional[str]
69+
inference : Optional[InferenceConfiguration]
70+
llama_stack : Optional[LlamaStackConfiguration]
71+
mcp_servers : Optional[list[ModelContextProtocolServer]]
72+
name : Optional[str]
73+
okp : Optional[OkpConfiguration]
74+
quota_handlers : Optional[QuotaHandlersConfiguration]
75+
rag : Optional[RagConfiguration]
76+
service : Optional[ServiceConfiguration]
7777
splunk : Optional[SplunkConfiguration]
78-
user_data_collection
78+
user_data_collection : Optional[UserDataCollection]
7979
dump(filename: str | Path) -> None
8080
validate_mcp_auth_headers() -> Self
8181
}
8282
class "ConfigurationBase" as src.models.config.ConfigurationBase {
83-
model_config
83+
model_config : ConfigDict
8484
}
8585
class "ConversationHistoryConfiguration" as src.models.config.ConversationHistoryConfiguration {
8686
memory : Optional[InMemoryCacheConfig]
@@ -90,13 +90,14 @@ class "ConversationHistoryConfiguration" as src.models.config.ConversationHistor
9090
check_cache_configuration() -> Self
9191
}
9292
class "CustomProfile" as src.models.config.CustomProfile {
93-
path : str
94-
prompts : dict[str, str]
93+
path : Optional[str]
94+
prompts : Optional[dict[str, str]]
9595
get_prompts() -> dict[str, str]
9696
}
9797
class "Customization" as src.models.config.Customization {
9898
agent_card_config : Optional[dict[str, Any]]
9999
agent_card_path : Optional[FilePath]
100+
allow_verbose_infer : bool
100101
custom_profile : Optional[CustomProfile]
101102
disable_query_system_prompt : bool
102103
disable_shield_ids_override : bool
@@ -106,14 +107,14 @@ class "Customization" as src.models.config.Customization {
106107
check_customization_model() -> Self
107108
}
108109
class "DatabaseConfiguration" as src.models.config.DatabaseConfiguration {
109-
config
110-
db_type
110+
config : SQLiteDatabaseConfiguration | PostgreSQLDatabaseConfiguration
111+
db_type : Literal['sqlite', 'postgres']
111112
postgres : Optional[PostgreSQLDatabaseConfiguration]
112113
sqlite : Optional[SQLiteDatabaseConfiguration]
113114
check_database_configuration() -> Self
114115
}
115116
class "InMemoryCacheConfig" as src.models.config.InMemoryCacheConfig {
116-
max_entries
117+
max_entries : Optional[PositiveInt]
117118
}
118119
class "InferenceConfiguration" as src.models.config.InferenceConfiguration {
119120
default_model : Optional[str]
@@ -124,111 +125,113 @@ class "JsonPathOperator" as src.models.config.JsonPathOperator {
124125
name
125126
}
126127
class "JwkConfiguration" as src.models.config.JwkConfiguration {
127-
jwt_configuration
128-
url
128+
jwt_configuration : Optional[JwtConfiguration]
129+
url : Optional[AnyHttpUrl]
129130
}
130131
class "JwtConfiguration" as src.models.config.JwtConfiguration {
131-
role_rules : list[JwtRoleRule]
132-
user_id_claim : str
133-
username_claim : str
132+
role_rules : Optional[list[JwtRoleRule]]
133+
user_id_claim : Optional[str]
134+
username_claim : Optional[str]
134135
}
135136
class "JwtRoleRule" as src.models.config.JwtRoleRule {
136-
compiled_regex
137-
jsonpath : str
138-
negate : bool
139-
operator
140-
roles : list[str]
141-
value : Any
137+
compiled_regex : Optional[Pattern[str]]
138+
jsonpath : Optional[str]
139+
negate : Optional[bool]
140+
operator : Optional[JsonPathOperator]
141+
roles : Optional[list[str]]
142+
value : Optional[Any]
142143
check_jsonpath() -> Self
143144
check_regex_pattern() -> Self
144145
check_roles() -> Self
145146
}
146147
class "LlamaStackConfiguration" as src.models.config.LlamaStackConfiguration {
147148
api_key : Optional[SecretStr]
148149
library_client_config_path : Optional[str]
149-
timeout
150+
timeout : Optional[PositiveInt]
150151
url : Optional[AnyHttpUrl]
151152
use_as_library_client : Optional[bool]
152153
check_llama_stack_model() -> Self
153154
}
154155
class "ModelContextProtocolServer" as src.models.config.ModelContextProtocolServer {
155-
authorization_headers : dict[str, str]
156-
headers : list[str]
157-
name : str
158-
provider_id : str
159-
resolved_authorization_headers
156+
authorization_headers : Optional[dict[str, str]]
157+
headers : Optional[list[str]]
158+
name : Optional[str]
159+
provider_id : Optional[str]
160+
resolved_authorization_headers : dict[str, str]
160161
timeout : Optional[PositiveInt]
161-
url : str
162+
url : Optional[str]
162163
resolve_auth_headers() -> Self
163164
validate_headers(value: list[str]) -> list[str]
164165
}
165166
class "OkpConfiguration" as src.models.config.OkpConfiguration {
166167
chunk_filter_query : Optional[str]
167-
offline : bool
168+
offline : Optional[bool]
169+
rhokp_url : Optional[str]
168170
}
169171
class "PostgreSQLDatabaseConfiguration" as src.models.config.PostgreSQLDatabaseConfiguration {
170172
ca_cert_path : Optional[FilePath]
171-
db : str
172-
gss_encmode : str
173-
host : str
173+
db : Optional[str]
174+
gss_encmode : Optional[str]
175+
host : Optional[str]
174176
namespace : Optional[str]
175-
password
176-
port
177-
ssl_mode : str
178-
user : str
177+
password : Optional[SecretStr]
178+
port : Optional[PositiveInt]
179+
ssl_mode : Optional[str]
180+
user : Optional[str]
179181
check_postgres_configuration() -> Self
180182
}
181183
class "QuotaHandlersConfiguration" as src.models.config.QuotaHandlersConfiguration {
182-
enable_token_history : bool
183-
limiters : list[QuotaLimiterConfiguration]
184+
enable_token_history : Optional[bool]
185+
limiters : Optional[list[QuotaLimiterConfiguration]]
184186
postgres : Optional[PostgreSQLDatabaseConfiguration]
185-
scheduler
187+
scheduler : Optional[QuotaSchedulerConfiguration]
186188
sqlite : Optional[SQLiteDatabaseConfiguration]
187189
}
188190
class "QuotaLimiterConfiguration" as src.models.config.QuotaLimiterConfiguration {
189-
initial_quota
190-
name : str
191-
period : str
192-
quota_increase
193-
type : Literal['user_limiter', 'cluster_limiter']
191+
initial_quota : Optional[NonNegativeInt]
192+
name : Optional[str]
193+
period : Optional[str]
194+
quota_increase : Optional[NonNegativeInt]
195+
type : Optional[Literal['user_limiter', 'cluster_limiter']]
194196
}
195197
class "QuotaSchedulerConfiguration" as src.models.config.QuotaSchedulerConfiguration {
196-
database_reconnection_count
197-
database_reconnection_delay
198-
period
198+
database_reconnection_count : Optional[PositiveInt]
199+
database_reconnection_delay : Optional[PositiveInt]
200+
period : Optional[PositiveInt]
199201
}
200202
class "RHIdentityConfiguration" as src.models.config.RHIdentityConfiguration {
203+
max_header_size : Optional[PositiveInt]
201204
required_entitlements : Optional[list[str]]
202205
}
203206
class "RagConfiguration" as src.models.config.RagConfiguration {
204-
inline : list[str]
205-
tool : list[str]
207+
inline : Optional[list[str]]
208+
tool : Optional[list[str]]
206209
}
207210
class "SQLiteDatabaseConfiguration" as src.models.config.SQLiteDatabaseConfiguration {
208-
db_path : str
211+
db_path : Optional[str]
209212
}
210213
class "ServiceConfiguration" as src.models.config.ServiceConfiguration {
211-
access_log : bool
212-
auth_enabled : bool
214+
access_log : Optional[bool]
215+
auth_enabled : Optional[bool]
213216
base_url : Optional[str]
214-
color_log : bool
215-
cors
216-
host : str
217-
port
218-
root_path : str
219-
tls_config
220-
workers
217+
color_log : Optional[bool]
218+
cors : Optional[CORSConfiguration]
219+
host : Optional[str]
220+
port : Optional[PositiveInt]
221+
root_path : Optional[str]
222+
tls_config : Optional[TLSConfiguration]
223+
workers : Optional[PositiveInt]
221224
check_service_configuration() -> Self
222225
validate_root_path(value: str) -> str
223226
}
224227
class "SplunkConfiguration" as src.models.config.SplunkConfiguration {
225-
enabled : bool
228+
enabled : Optional[bool]
226229
index : Optional[str]
227-
source : str
228-
timeout
230+
source : Optional[str]
231+
timeout : Optional[PositiveInt]
229232
token_path : Optional[FilePath]
230233
url : Optional[str]
231-
verify_ssl : bool
234+
verify_ssl : Optional[bool]
232235
check_splunk_configuration() -> Self
233236
}
234237
class "TLSConfiguration" as src.models.config.TLSConfiguration {
@@ -238,9 +241,9 @@ class "TLSConfiguration" as src.models.config.TLSConfiguration {
238241
check_tls_configuration() -> Self
239242
}
240243
class "UserDataCollection" as src.models.config.UserDataCollection {
241-
feedback_enabled : bool
244+
feedback_enabled : Optional[bool]
242245
feedback_storage : Optional[str]
243-
transcripts_enabled : bool
246+
transcripts_enabled : Optional[bool]
244247
transcripts_storage : Optional[str]
245248
check_storage_location_is_set_when_needed() -> Self
246249
}
@@ -275,22 +278,6 @@ src.models.config.ServiceConfiguration --|> src.models.config.ConfigurationBase
275278
src.models.config.SplunkConfiguration --|> src.models.config.ConfigurationBase
276279
src.models.config.TLSConfiguration --|> src.models.config.ConfigurationBase
277280
src.models.config.UserDataCollection --|> src.models.config.ConfigurationBase
278-
src.models.config.A2AStateConfiguration --* src.models.config.Configuration : a2a_state
279-
src.models.config.AuthenticationConfiguration --* src.models.config.Configuration : authentication
280-
src.models.config.CORSConfiguration --* src.models.config.ServiceConfiguration : cors
281-
src.models.config.ConversationHistoryConfiguration --* src.models.config.Configuration : conversation_cache
282281
src.models.config.CustomProfile --* src.models.config.Customization : custom_profile
283-
src.models.config.DatabaseConfiguration --* src.models.config.Configuration : database
284-
src.models.config.InferenceConfiguration --* src.models.config.Configuration : inference
285-
src.models.config.JsonPathOperator --* src.models.config.JwtRoleRule : operator
286-
src.models.config.JwtConfiguration --* src.models.config.JwkConfiguration : jwt_configuration
287-
src.models.config.LlamaStackConfiguration --* src.models.config.Configuration : llama_stack
288-
src.models.config.OkpConfiguration --* src.models.config.Configuration : okp
289-
src.models.config.QuotaHandlersConfiguration --* src.models.config.Configuration : quota_handlers
290-
src.models.config.QuotaSchedulerConfiguration --* src.models.config.QuotaHandlersConfiguration : scheduler
291-
src.models.config.RagConfiguration --* src.models.config.Configuration : rag
292282
src.models.config.SQLiteDatabaseConfiguration --* src.models.config.DatabaseConfiguration : sqlite
293-
src.models.config.ServiceConfiguration --* src.models.config.Configuration : service
294-
src.models.config.TLSConfiguration --* src.models.config.ServiceConfiguration : tls_config
295-
src.models.config.UserDataCollection --* src.models.config.Configuration : user_data_collection
296283
@enduml

0 commit comments

Comments
 (0)