[AI-3] Provision the LLM connection from the environment - #24887
[AI-3] Provision the LLM connection from the environment#24887tangopium wants to merge 5 commits into
Conversation
|
Caution The provided work package version does not match the core version Details:
Please make sure that:
|
|
Caution The Enterprise plan field is not set on the work package Details:
Please make sure that:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: dcefe085a3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
dcefe08 to
fa61b44
Compare
fa61b44 to
4ca02db
Compare
4ca02db to
b33ce35
Compare
Adds the OPENPROJECT_LLM__CONNECTION setting and an EnvData seeder, so an on-premise deployment can ship the connection alongside its LLM sidecar without touching the UI. When the setting is present the record belongs to the deployment: the form renders read-only with a banner, the destructive actions refuse, and the base contract rejects any write. Seeding must not block on -- or fail because of -- a server that has not finished starting, so the environment path validates with its own contract that skips the reachability probe, and refreshes the catalogue through a background job instead of inline. Part 9 of the AI-3 stack. https://community.openproject.org/work_packages/66020
|
Warning Flaky specs
🤖 Ask Copilot to investigateCopy the prompt below into a new comment on this PR to delegate the investigation to GitHub Copilot. It will look into the flakiness and open a separate pull request with you as reviewer. |
b33ce35 to
786a84f
Compare
|
Warning Flaky specs
🤖 Ask Copilot to investigateCopy the prompt below into a new comment on this PR to delegate the investigation to GitHub Copilot. It will look into the flakiness and open a separate pull request with you as reviewer. |
The seeder runs on every container start, so enqueuing a refresh there undid whatever an administrator had curated, and could empty the list when the new server answers nothing. Following the UX review with Tom, the environment path now follows the same rule as the administration page: fetch the model list once while nothing is stored, and leave a stored list alone. A host or key changed in the environment shows up as the stale warning on the AI models page, which asks for the refresh.
The default chat model moved off the LLM settings page onto the AI models page in the UX review with Tom, and it moved out of reach of the environment banner with it. It now renders like the server settings do when the deployment owns the connection: the picker disabled, the banner above it, no Save button that the base contract would only reject. The autocompleter takes its disabled flag through autocomplete_options, which is what reaches the Angular component; the field-level flag it had before never left the Ruby side. The API key caption follows the same idea: asking an administrator to leave the field blank to keep the current key makes no sense where nothing can be typed, so it says where the key comes from instead.
The reviewer thread on the seeder was answered with the backoff retry, but nothing pinned it. The job now loops over every stored connection, so the example also proves that a server which is not up yet stops the run and comes back rather than silently leaving the connection without its model list.
The connection defaults reference a model row, so an environment naming a model the server has not been asked about yet had nothing to point at. The seed enters that model the way an administrator entering one by hand would, then writes the reference, both inside one transaction, and clears a default the environment no longer names. Provisioning also writes the AI features switch to its setting rather than to the column it used to live in, and the catalogue fill is now enqueued when no catalogue was ever fetched rather than when no model row exists, since provisioning itself creates one.
786a84f to
0c17575
Compare
|
The branch was rebuilt, so the commits your comments point at no longer exist and those threads now render as outdated. Nothing was dropped. Here is where each point landed.
CI has not started on the new commits: only the CLA check ran, and the workflow runs seem to need maintainer approval on this repository. The checks are waiting on that. |
Ticket
AI-3
What are you trying to accomplish?
PR 9 of 11 in the AI-3 stack. Adds the
OPENPROJECT_LLM__CONNECTIONsetting and an EnvData seeder, so an on-premise deployment can ship the connection alongside its LLM sidecar without touching the UI. When the setting is present the record belongs to the deployment: the form renders read-only with a banner, the destructive actions refuse, and the contract rejects any write. Seeding must not fail because of a server that has not finished starting, so the environment path skips the reachability probe and refreshes the catalogue in a background job.Merge checklist
llm_connectionfeature flagStacked on #24886.