Skip to content

Commit d0a447b

Browse files
authored
Merge pull request #1995 from tisnik/lcore-1404-responses-model
LCORE-1404: responses models documentation
2 parents 76b0ba2 + 5e9e6eb commit d0a447b

5 files changed

Lines changed: 3708 additions & 1 deletion

File tree

Makefile

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,12 +191,16 @@ generate-documentation: ## Generate documentation
191191
doc: ## Generate documentation for developers
192192
scripts/gen_doc.py
193193

194-
docs/models: docs/models/requests.puml docs/models/common.puml ## Generate documentation about models
194+
docs/models: docs/models/requests.puml docs/models/responses.puml docs/models/common.puml ## Generate documentation about models
195195

196196
docs/models/requests.puml:
197197
uv run pyreverse src/models/api/requests/ --output puml --output-directory=docs/models/
198198
mv docs/models/classes.puml docs/models/requests.puml
199199

200+
docs/models/responses.puml:
201+
uv run pyreverse src/models/api/responses/ --output puml --output-directory=docs/models/
202+
mv docs/models/classes.puml docs/models/responses.puml
203+
200204
docs/models/common.puml:
201205
uv run pyreverse src/models/common/ --output puml --output-directory=docs/models/
202206
mv docs/models/classes.puml docs/models/common.puml
@@ -208,6 +212,13 @@ docs/models/requests.svg: docs/models/requests.puml
208212
rm -f classes.svg && \
209213
popd
210214

215+
docs/models/responses.svg: docs/models/responses.puml
216+
pushd docs/models && \
217+
java -jar ${PATH_TO_PLANTUML}/plantuml.jar responses.puml -tsvg && \
218+
xmllint --format classes.svg > responses.svg && \
219+
rm -f classes.svg && \
220+
popd
221+
211222
docs/models/common.svg: docs/models/common.puml
212223
pushd docs/models && \
213224
java -jar ${PATH_TO_PLANTUML}/plantuml.jar common.puml -tsvg && \

docs/models/responses.puml

Lines changed: 342 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,342 @@
1+
@startuml classes
2+
set namespaceSeparator none
3+
class "AbstractDeleteResponse" as src.models.api.responses.successful.bases.AbstractDeleteResponse {
4+
deleted : Optional[bool]
5+
resource_name : ClassVar[str]
6+
openapi_response() -> dict[str, Any]
7+
response() -> str
8+
}
9+
class "AbstractErrorResponse" as src.models.api.responses.error.bases.AbstractErrorResponse {
10+
detail : Optional[DetailModel]
11+
status_code : Optional[int]
12+
get_description() -> str
13+
openapi_response(examples: Optional[list[str]]) -> dict[str, Any]
14+
}
15+
class "AbstractSuccessfulResponse" as src.models.api.responses.successful.bases.AbstractSuccessfulResponse {
16+
openapi_response() -> dict[str, Any]
17+
}
18+
class "AuthorizedResponse" as src.models.api.responses.successful.probes.AuthorizedResponse {
19+
model_config : dict
20+
skip_userid_check : Optional[bool]
21+
user_id : Optional[str]
22+
username : Optional[str]
23+
}
24+
class "BadRequestResponse" as src.models.api.responses.error.bad_request.BadRequestResponse {
25+
description : ClassVar[str]
26+
model_config : dict
27+
}
28+
class "ConfigurationResponse" as src.models.api.responses.successful.configuration.ConfigurationResponse {
29+
configuration : Configuration
30+
model_config : ConfigDict
31+
}
32+
class "ConflictResponse" as src.models.api.responses.error.conflict.ConflictResponse {
33+
description : ClassVar[str]
34+
model_config : dict
35+
file_search() -> Self
36+
mcp_tool(server_label: str) -> Self
37+
}
38+
class "ConversationDeleteResponse" as src.models.api.responses.successful.conversations.ConversationDeleteResponse {
39+
conversation_id : Optional[str]
40+
model_config : dict
41+
resource_name : ClassVar[str]
42+
success() -> bool
43+
}
44+
class "ConversationResponse" as src.models.api.responses.successful.conversations.ConversationResponse {
45+
chat_history : Optional[list[ConversationTurn]]
46+
conversation_id : Optional[str]
47+
model_config : dict
48+
}
49+
class "ConversationUpdateResponse" as src.models.api.responses.successful.conversations.ConversationUpdateResponse {
50+
conversation_id : Optional[str]
51+
message : Optional[str]
52+
model_config : dict
53+
success : Optional[bool]
54+
}
55+
class "ConversationsListResponse" as src.models.api.responses.successful.conversations.ConversationsListResponse {
56+
conversations : list[ConversationDetails]
57+
model_config : dict
58+
}
59+
class "ConversationsListResponseV2" as src.models.api.responses.successful.conversations.ConversationsListResponseV2 {
60+
conversations : list[ConversationData]
61+
model_config : dict
62+
}
63+
class "DetailModel" as src.models.api.responses.error.bases.DetailModel {
64+
cause : Optional[str]
65+
response : Optional[str]
66+
}
67+
class "FeedbackResponse" as src.models.api.responses.successful.feedback.FeedbackResponse {
68+
model_config : dict
69+
response : Optional[str]
70+
}
71+
class "FeedbackStatusUpdateResponse" as src.models.api.responses.successful.feedback.FeedbackStatusUpdateResponse {
72+
model_config : dict
73+
status : dict[str, Any]
74+
}
75+
class "FileResponse" as src.models.api.responses.successful.vector_stores.FileResponse {
76+
bytes : Optional[int]
77+
created_at : Optional[int]
78+
filename : Optional[str]
79+
id : Optional[str]
80+
model_config : dict
81+
object : Optional[str]
82+
purpose : Optional[str]
83+
}
84+
class "FileTooLargeResponse" as src.models.api.responses.error.content_too_large.FileTooLargeResponse {
85+
description : ClassVar[str]
86+
model_config : dict
87+
exceeds_local_limit() -> Self
88+
from_backend_rejection() -> Self
89+
}
90+
class "ForbiddenResponse" as src.models.api.responses.error.forbidden.ForbiddenResponse {
91+
description : ClassVar[str]
92+
model_config : dict
93+
conversation(action: str, resource_id: str, user_id: str) -> Self
94+
endpoint(user_id: str) -> Self
95+
feedback_disabled() -> Self
96+
mcp_server_static_config(server_name: str) -> Self
97+
model_override() -> Self
98+
}
99+
class "InfoResponse" as src.models.api.responses.successful.probes.InfoResponse {
100+
llama_stack_version : Optional[str]
101+
model_config : dict
102+
name : Optional[str]
103+
service_version : Optional[str]
104+
}
105+
class "InternalServerErrorResponse" as src.models.api.responses.error.internal.InternalServerErrorResponse {
106+
description : ClassVar[str]
107+
model_config : dict
108+
cache_unavailable() -> Self
109+
configuration_not_loaded() -> Self
110+
database_error() -> Self
111+
feedback_path_invalid(path: str) -> Self
112+
generic() -> Self
113+
mcp_server_registration_failed() -> Self
114+
query_failed(cause: str) -> Self
115+
}
116+
class "LivenessResponse" as src.models.api.responses.successful.probes.LivenessResponse {
117+
alive : Optional[bool]
118+
model_config : dict
119+
}
120+
class "MCPClientAuthOptionsResponse" as src.models.api.responses.successful.mcp_servers.MCPClientAuthOptionsResponse {
121+
model_config : dict
122+
servers : Optional[list[MCPServerAuthInfo]]
123+
}
124+
class "MCPServerDeleteResponse" as src.models.api.responses.successful.mcp_servers.MCPServerDeleteResponse {
125+
model_config : dict
126+
name : Optional[str]
127+
resource_name : ClassVar[str]
128+
}
129+
class "MCPServerListResponse" as src.models.api.responses.successful.mcp_servers.MCPServerListResponse {
130+
model_config : dict
131+
servers : Optional[list[MCPServerInfo]]
132+
}
133+
class "MCPServerRegistrationResponse" as src.models.api.responses.successful.mcp_servers.MCPServerRegistrationResponse {
134+
message : Optional[str]
135+
model_config : dict
136+
name : Optional[str]
137+
provider_id : Optional[str]
138+
url : Optional[str]
139+
}
140+
class "ModelsResponse" as src.models.api.responses.successful.catalog.ModelsResponse {
141+
model_config : dict
142+
models : Optional[list[dict[str, Any]]]
143+
}
144+
class "NotFoundResponse" as src.models.api.responses.error.not_found.NotFoundResponse {
145+
description : ClassVar[str]
146+
model_config : dict
147+
}
148+
class "PromptDeleteResponse" as src.models.api.responses.successful.prompts.PromptDeleteResponse {
149+
model_config : dict
150+
prompt_id : Optional[str]
151+
resource_name : ClassVar[str]
152+
}
153+
class "PromptResourceResponse" as src.models.api.responses.successful.prompts.PromptResourceResponse {
154+
is_default : Optional[bool]
155+
model_config : dict
156+
prompt : Optional[str]
157+
prompt_id : Optional[str]
158+
variables : Optional[list[str]]
159+
version : Optional[int]
160+
}
161+
class "PromptTooLongResponse" as src.models.api.responses.error.content_too_large.PromptTooLongResponse {
162+
description : ClassVar[str]
163+
model_config : dict
164+
}
165+
class "PromptsListResponse" as src.models.api.responses.successful.prompts.PromptsListResponse {
166+
data : Optional[list[PromptResourceResponse]]
167+
model_config : dict
168+
}
169+
class "ProviderResponse" as src.models.api.responses.successful.catalog.ProviderResponse {
170+
api : Optional[str]
171+
config : Optional[dict[str, Any]]
172+
health : Optional[dict[str, Any]]
173+
model_config : dict
174+
provider_id : Optional[str]
175+
provider_type : Optional[str]
176+
}
177+
class "ProvidersListResponse" as src.models.api.responses.successful.catalog.ProvidersListResponse {
178+
model_config : dict
179+
providers : Optional[dict[str, list[dict[str, Any]]]]
180+
}
181+
class "QueryResponse" as src.models.api.responses.successful.query.QueryResponse {
182+
available_quotas : Optional[dict[str, int]]
183+
conversation_id : Optional[str]
184+
input_tokens : Optional[int]
185+
model_config : dict
186+
output_tokens : Optional[int]
187+
rag_chunks : Optional[list[RAGChunk]]
188+
referenced_documents : Optional[list[ReferencedDocument]]
189+
response : Optional[str]
190+
tool_calls : Optional[list[ToolCallSummary]]
191+
tool_results : Optional[list[ToolResultSummary]]
192+
truncated : Optional[bool]
193+
}
194+
class "QuotaExceededResponse" as src.models.api.responses.error.too_many_requests.QuotaExceededResponse {
195+
description : ClassVar[str]
196+
model_config : dict
197+
from_exception(exc: QuotaExceedError) -> Self
198+
model(model_name: str) -> Self
199+
}
200+
class "RAGInfoResponse" as src.models.api.responses.successful.catalog.RAGInfoResponse {
201+
created_at : Optional[int]
202+
expires_at : Optional[int]
203+
id : Optional[str]
204+
last_active_at : Optional[int]
205+
model_config : dict
206+
name : Optional[str]
207+
object : Optional[str]
208+
status : Optional[str]
209+
usage_bytes : Optional[int]
210+
}
211+
class "RAGListResponse" as src.models.api.responses.successful.catalog.RAGListResponse {
212+
model_config : dict
213+
rags : Optional[list[str]]
214+
}
215+
class "ReadinessResponse" as src.models.api.responses.successful.probes.ReadinessResponse {
216+
model_config : dict
217+
providers : Optional[list[ProviderHealthStatus]]
218+
ready : Optional[bool]
219+
reason : Optional[str]
220+
}
221+
class "ResponsesResponse" as src.models.api.responses.successful.responses_openai.ResponsesResponse {
222+
available_quotas : dict[str, int]
223+
completed_at : Optional[int]
224+
conversation : Optional[str]
225+
created_at : int
226+
error : Optional[Error]
227+
id : str
228+
instructions : Optional[str]
229+
max_output_tokens : Optional[int]
230+
max_tool_calls : Optional[int]
231+
metadata : Optional[dict[str, str]]
232+
model : str
233+
model_config : dict
234+
object : Literal['response']
235+
output : list[Output]
236+
output_text : str
237+
parallel_tool_calls : bool
238+
previous_response_id : Optional[str]
239+
prompt : Optional[Prompt]
240+
reasoning : Optional[Reasoning]
241+
safety_identifier : Optional[str]
242+
status : str
243+
store : Optional[bool]
244+
temperature : Optional[float]
245+
text : Optional[Text]
246+
tool_choice : Optional[ToolChoice]
247+
tools : Optional[list[OutputTool]]
248+
top_p : Optional[float]
249+
truncation : Optional[str]
250+
usage : Optional[Usage]
251+
openapi_response() -> dict[str, Any]
252+
}
253+
class "RlsapiV1InferData" as src.models.api.responses.successful.rlsapi.RlsapiV1InferData {
254+
input_tokens : Optional[int]
255+
output_tokens : Optional[int]
256+
rag_chunks : Optional[list[RAGChunk]]
257+
referenced_documents : Optional[list[ReferencedDocument]]
258+
request_id : Optional[str]
259+
text : Optional[str]
260+
tool_calls : Optional[list[ToolCallSummary]]
261+
tool_results : Optional[list[ToolResultSummary]]
262+
}
263+
class "RlsapiV1InferResponse" as src.models.api.responses.successful.rlsapi.RlsapiV1InferResponse {
264+
data : Optional[RlsapiV1InferData]
265+
model_config : dict
266+
}
267+
class "ServiceUnavailableResponse" as src.models.api.responses.error.service_unavailable.ServiceUnavailableResponse {
268+
description : ClassVar[str]
269+
model_config : dict
270+
}
271+
class "ShieldsResponse" as src.models.api.responses.successful.catalog.ShieldsResponse {
272+
model_config : dict
273+
shields : Optional[list[dict[str, Any]]]
274+
}
275+
class "StatusResponse" as src.models.api.responses.successful.probes.StatusResponse {
276+
functionality : Optional[str]
277+
model_config : dict
278+
status : Optional[dict[str, Any]]
279+
}
280+
class "StreamingInterruptResponse" as src.models.api.responses.successful.query.StreamingInterruptResponse {
281+
interrupted : Optional[bool]
282+
message : Optional[str]
283+
model_config : dict
284+
request_id : Optional[str]
285+
}
286+
class "StreamingQueryResponse" as src.models.api.responses.successful.query.StreamingQueryResponse {
287+
model_config : dict
288+
openapi_response() -> dict[str, Any]
289+
}
290+
class "ToolsResponse" as src.models.api.responses.successful.catalog.ToolsResponse {
291+
model_config : dict
292+
tools : Optional[list[dict[str, Any]]]
293+
}
294+
class "UnauthorizedResponse" as src.models.api.responses.error.unauthorized.UnauthorizedResponse {
295+
description : ClassVar[str]
296+
model_config : dict
297+
}
298+
class "UnprocessableEntityResponse" as src.models.api.responses.error.unprocessable_entity.UnprocessableEntityResponse {
299+
description : ClassVar[str]
300+
model_config : dict
301+
}
302+
class "VectorStoreDeleteResponse" as src.models.api.responses.successful.vector_stores.VectorStoreDeleteResponse {
303+
model_config : dict
304+
resource_name : ClassVar[str]
305+
vector_store_id : Optional[str]
306+
}
307+
class "VectorStoreFileDeleteResponse" as src.models.api.responses.successful.vector_stores.VectorStoreFileDeleteResponse {
308+
file_id : Optional[str]
309+
model_config : dict
310+
resource_name : ClassVar[str]
311+
}
312+
class "VectorStoreFileResponse" as src.models.api.responses.successful.vector_stores.VectorStoreFileResponse {
313+
attributes : Optional[dict[str, str | float | bool]]
314+
id : Optional[str]
315+
last_error : Optional[str]
316+
model_config : dict
317+
object : Optional[str]
318+
status : Optional[str]
319+
vector_store_id : Optional[str]
320+
}
321+
class "VectorStoreFilesListResponse" as src.models.api.responses.successful.vector_stores.VectorStoreFilesListResponse {
322+
data : Optional[list[VectorStoreFileResponse]]
323+
model_config : dict
324+
object : Optional[str]
325+
}
326+
class "VectorStoreResponse" as src.models.api.responses.successful.vector_stores.VectorStoreResponse {
327+
created_at : Optional[int]
328+
expires_at : Optional[int]
329+
id : Optional[str]
330+
last_active_at : Optional[int]
331+
metadata : Optional[dict[str, Any]]
332+
model_config : dict
333+
name : Optional[str]
334+
status : Optional[str]
335+
usage_bytes : Optional[int]
336+
}
337+
class "VectorStoresListResponse" as src.models.api.responses.successful.vector_stores.VectorStoresListResponse {
338+
data : Optional[list[VectorStoreResponse]]
339+
model_config : dict
340+
object : Optional[str]
341+
}
342+
@enduml

0 commit comments

Comments
 (0)