RHIDP-14304: add GET endpoint for saved prompts config#2093
Conversation
Signed-off-by: Jordan Dubrick <[email protected]>
Signed-off-by: Jordan Dubrick <[email protected]>
Signed-off-by: Jordan Dubrick <[email protected]>
|
Warning Review limit reached
Next review available in: 52 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (3)
WalkthroughAdds a new ChangesSaved prompts config endpoint
Estimated code review effort: 2 (Simple) | ~15 minutes Unrelated test maintenance
Estimated code review effort: 1 (Trivial) | ~5 minutes Sequence Diagram(s)sequenceDiagram
participant Client
participant Router
participant Handler as get_saved_prompts_config_handler
participant Auth as authorize(Action.GET_CONFIG)
participant Config as configuration
Client->>Router: GET /v1/saved-prompts/config
Router->>Handler: dispatch request
Handler->>Auth: check authorization
Auth-->>Handler: allowed / 401/403
Handler->>Config: check_configuration_loaded
Config-->>Handler: saved_prompts limits
Handler-->>Client: SavedPromptsConfigResponse
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
✨ Simplify code
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Signed-off-by: Jordan Dubrick <[email protected]>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/openapi.json`:
- Around line 6934-7096: The OpenAPI spec for the saved-prompts endpoint is
stale and must be regenerated from source to match the current handler
docstring. Update docs/openapi.json by regenerating it with
scripts/generate_openapi_schema.py so the /v1/saved-prompts/config entry,
including the description and examples, matches
src/app/endpoints/saved_prompts.py and any other affected sections referenced by
CI.
In `@src/app/endpoints/saved_prompts.py`:
- Around line 75-77: Replace the three `assert` guards in the saved prompts
endpoint with explicit `None` checks so they are not stripped under Python
optimization flags. In the code that reads `max_prompts_per_user`,
`max_display_name_length`, and `max_content_length`, raise a clear configuration
error if any value is `None` before building the response. Keep the check close
to the existing validation logic in the saved prompts handler so the failure
remains explicit and easy to trace.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: 8dc20cf8-ef0f-4f82-82ed-416f85c11d03
📒 Files selected for processing (11)
docs/openapi.jsonsrc/app/endpoints/saved_prompts.pysrc/app/main.pysrc/app/routers.pysrc/models/api/responses/successful/__init__.pysrc/models/api/responses/successful/saved_prompts.pytests/e2e/utils/prow_utils.pytests/integration/test_openapi_json.pytests/unit/app/endpoints/test_saved_prompts.pytests/unit/app/test_routers.pytests/unit/pydantic_ai_lightspeed/llamastack/test_model.py
📜 Review details
⏰ Context from checks skipped due to timeout. (14)
- GitHub Check: integration_tests (3.12)
- GitHub Check: integration_tests (3.13)
- GitHub Check: unit_tests (3.12)
- GitHub Check: build-pr
- GitHub Check: Pylinter
- GitHub Check: unit_tests (3.13)
- GitHub Check: E2E: library mode / ci / group 2
- GitHub Check: E2E: server mode / ci / group 3
- GitHub Check: E2E: server mode / ci / group 2
- GitHub Check: E2E: library mode / ci / group 3
- GitHub Check: Konflux kflux-prd-rh02 / lightspeed-stack-0-7-on-pull-request
- GitHub Check: E2E: library mode / ci / group 1
- GitHub Check: E2E: server mode / ci / group 1
- GitHub Check: E2E Tests for Lightspeed Evaluation job
⚠️ CI failures not shown inline (1)
GitHub Actions: OpenAPI (Spectral) / 0_spectral.txt: RHIDP-14304: add GET endpoint for saved prompts config
Conclusion: failure
##[group]Run set -euo pipefail
�[36;1mset -euo pipefail�[0m
�[36;1muv run python scripts/generate_openapi_schema.py /tmp/openapi-generated.json�[0m
�[36;1mif ! diff -u docs/openapi.json /tmp/openapi-generated.json; then�[0m
�[36;1m echo "::error::docs/openapi.json is out of date. Regenerate with: uv run scripts/generate_openapi_schema.py docs/openapi.json"�[0m
🧰 Additional context used
📓 Path-based instructions (6)
tests/**/*.py
📄 CodeRabbit inference engine (AGENTS.md)
tests/**/*.py: Use pytest for all unit and integration tests; do not use unittest
Usepytest.mark.asynciomarker for async tests
Files:
tests/e2e/utils/prow_utils.pytests/integration/test_openapi_json.pytests/unit/pydantic_ai_lightspeed/llamastack/test_model.pytests/unit/app/test_routers.pytests/unit/app/endpoints/test_saved_prompts.py
tests/e2e/**/*.{py,feature}
📄 CodeRabbit inference engine (AGENTS.md)
Use behave (BDD) framework for end-to-end testing with Gherkin feature files
Files:
tests/e2e/utils/prow_utils.py
src/**/*.py
📄 CodeRabbit inference engine (AGENTS.md)
src/**/*.py: Use absolute imports for internal modules:from authentication import get_auth_dependency
Llama Stack imports: Usefrom llama_stack_client import AsyncLlamaStackClient
Checkconstants.pyfor shared constants before defining new ones
All modules must start with descriptive docstrings explaining purpose
Uselogger = get_logger(__name__)fromlog.pyfor module logging
All functions must have complete type annotations for parameters and return types, use modern syntax (str | int), and include descriptive docstrings
Use snake_case with descriptive, action-oriented names for functions (get_, validate_, check_)
Avoid in-place parameter modification anti-patterns; return new data structures instead of modifying function parameters
Useasync deffor I/O operations and external API calls
Use standard log levels with clear purposes:debug()for diagnostic info,info()for program execution,warning()for unexpected events,error()for serious problems
All classes must have descriptive docstrings explaining purpose and use PascalCase with standard suffixes:Configuration,Error/Exception,Resolver,Interface
Abstract classes must use ABC with@abstractmethoddecorators
Follow Google Python docstring conventions with required sections: Parameters, Returns, Raises, and Attributes for classes
Files:
src/models/api/responses/successful/saved_prompts.pysrc/models/api/responses/successful/__init__.pysrc/app/routers.pysrc/app/main.pysrc/app/endpoints/saved_prompts.py
src/models/**/*.py
📄 CodeRabbit inference engine (AGENTS.md)
Pydantic models must use
@model_validatorand@field_validatorfor validation and complete type annotations for all attributes, avoidingAnytype
Files:
src/models/api/responses/successful/saved_prompts.pysrc/models/api/responses/successful/__init__.py
src/**/__init__.py
📄 CodeRabbit inference engine (AGENTS.md)
Package
__init__.pyfiles must contain brief package descriptions
Files:
src/models/api/responses/successful/__init__.py
src/app/**/*.py
📄 CodeRabbit inference engine (AGENTS.md)
src/app/**/*.py: FastAPI dependencies: Import fromfastapimodule forAPIRouter,HTTPException,Request,status,Depends
Use FastAPIHTTPExceptionwith appropriate status codes for API endpoints and handleAPIConnectionErrorfrom Llama Stack
Files:
src/app/routers.pysrc/app/main.pysrc/app/endpoints/saved_prompts.py
🧠 Learnings (5)
📚 Learning: 2026-06-24T13:45:37.249Z
Learnt from: Jdubrick
Repo: lightspeed-core/lightspeed-stack PR: 1971
File: src/utils/markdown_repair.py:31-36
Timestamp: 2026-06-24T13:45:37.249Z
Learning: In the lightspeed-stack repository, docstrings must use the section header name "Parameters:" (not "Args:") for function arguments, even if the project references Google Python docstring conventions. Ensure docstrings follow the project’s established "Parameters:" header format for any documented function parameters.
Applied to files:
tests/e2e/utils/prow_utils.pysrc/models/api/responses/successful/saved_prompts.pysrc/models/api/responses/successful/__init__.pysrc/app/routers.pysrc/app/main.pytests/integration/test_openapi_json.pytests/unit/pydantic_ai_lightspeed/llamastack/test_model.pysrc/app/endpoints/saved_prompts.pytests/unit/app/test_routers.pytests/unit/app/endpoints/test_saved_prompts.py
📚 Learning: 2026-01-12T10:58:40.230Z
Learnt from: blublinsky
Repo: lightspeed-core/lightspeed-stack PR: 972
File: src/models/config.py:459-513
Timestamp: 2026-01-12T10:58:40.230Z
Learning: In lightspeed-core/lightspeed-stack, for Python files under src/models, when a user claims a fix is done but the issue persists, verify the current code state before accepting the fix. Steps: review the diff, fetch the latest changes, run relevant tests, reproduce the issue, search the codebase for lingering references to the original problem, confirm the fix is applied and not undone by subsequent commits, and validate with local checks to ensure the issue is resolved.
Applied to files:
src/models/api/responses/successful/saved_prompts.pysrc/models/api/responses/successful/__init__.py
📚 Learning: 2026-02-25T07:46:33.545Z
Learnt from: asimurka
Repo: lightspeed-core/lightspeed-stack PR: 1211
File: src/models/responses.py:8-16
Timestamp: 2026-02-25T07:46:33.545Z
Learning: In the Python codebase, requests.py should use OpenAIResponseInputTool as Tool while responses.py uses OpenAIResponseTool as Tool. This difference is intentional due to differing schemas for input vs output tools in llama-stack-api. Apply this distinction consistently to other models under src/models (e.g., ensure request-related tools use the InputTool variant and response-related tools use the ResponseTool variant). If adding new tools, choose the corresponding InputTool or Tool class based on whether the tool represents input or output, and document the rationale in code comments.
Applied to files:
src/models/api/responses/successful/saved_prompts.pysrc/models/api/responses/successful/__init__.py
📚 Learning: 2026-07-06T15:26:18.398Z
Learnt from: Jdubrick
Repo: lightspeed-core/lightspeed-stack PR: 2071
File: src/models/config.py:2416-2422
Timestamp: 2026-07-06T15:26:18.398Z
Learning: In this repo’s Python code under src/**, don’t treat differences in string concatenation style as a style inconsistency when Black has effectively forced (or made clearer) use of explicit `+` string concatenation in multi-line logger/string expressions. If adjacent-literal implicit concatenation is avoided/changed specifically to accommodate Black’s formatting in these call sites, accept the `+` usage and don’t recommend converting it solely for consistency with nearby blocks that use implicit concatenation.
Applied to files:
src/models/api/responses/successful/saved_prompts.pysrc/models/api/responses/successful/__init__.pysrc/app/routers.pysrc/app/main.pysrc/app/endpoints/saved_prompts.py
📚 Learning: 2026-04-06T20:18:07.852Z
Learnt from: major
Repo: lightspeed-core/lightspeed-stack PR: 1463
File: src/app/endpoints/rlsapi_v1.py:266-271
Timestamp: 2026-04-06T20:18:07.852Z
Learning: In the lightspeed-stack codebase, within `src/app/endpoints/` inference/MCP endpoints, treat `tools: Optional[list[Any]]` in MCP tool definitions as an intentional, consistent typing pattern (used across `query`, `responses`, `streaming_query`, `rlsapi_v1`). Do not raise or suggest this as a typing issue during code review; changing it in isolation could break endpoint typing consistency across the codebase.
Applied to files:
src/app/endpoints/saved_prompts.py
🪛 ast-grep (0.44.1)
tests/unit/app/endpoints/test_saved_prompts.py
[warning] 37-37: Do not make http calls without encryption
Context: "http://test.com:1234"
Note: [CWE-319] Cleartext Transmission of Sensitive Information.
(requests-http)
🪛 GitHub Actions: OpenAPI (Spectral) / 0_spectral.txt
docs/openapi.json
[error] 1-1: CI check failed: docs/openapi.json is out of date versus the generated OpenAPI schema. Regenerate with: uv run python scripts/generate_openapi_schema.py docs/openapi.json
🪛 GitHub Actions: OpenAPI (Spectral) / spectral
docs/openapi.json
[error] 1-1: OpenAPI schema is out of date. 'diff -u docs/openapi.json /tmp/openapi-generated.json' failed. Regenerate with: 'uv run scripts/generate_openapi_schema.py docs/openapi.json'.
🪛 GitHub Check: Bandit
src/app/endpoints/saved_prompts.py
[notice] 75-75:
Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
[notice] 76-76:
Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
[notice] 77-77:
Use of assert detected. The enclosed code will be removed when compiling to optimised byte code.
🔇 Additional comments (10)
tests/e2e/utils/prow_utils.py (1)
290-291: LGTM!tests/unit/pydantic_ai_lightspeed/llamastack/test_model.py (1)
5-7: LGTM!Also applies to: 429-429, 649-649
tests/integration/test_openapi_json.py (1)
259-259: LGTM!Also applies to: 364-364
tests/unit/app/endpoints/test_saved_prompts.py (1)
1-227: LGTM!tests/unit/app/test_routers.py (1)
31-31: LGTM!Also applies to: 125-135, 158-158, 167-167, 177-177
src/models/api/responses/successful/saved_prompts.py (1)
1-44: LGTM!src/models/api/responses/successful/__init__.py (1)
52-52: LGTM!Also applies to: 93-93
src/app/endpoints/saved_prompts.py (1)
1-74: LGTM!Also applies to: 79-83
src/app/routers.py (1)
28-28: LGTM!Also applies to: 67-67
src/app/main.py (1)
61-64: LGTM!
Signed-off-by: Jordan Dubrick <[email protected]>
Description
GETendpoint to fetch the values configured for saved promptsmake verifyType of change
Tools used to create PR
Identify any AI code assistants used in this PR (for transparency and review context)
Related Tickets & Documents
Checklist before requesting a review
Testing
Summary by CodeRabbit
New Features
Bug Fixes