Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.d/2.20.1-orchestrator-temperature-negotiation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# 2.20.1 — Provider temperature capability negotiation

- Compose now pins ContextualWisdomLab/contextual-orchestrator#779 so providers that accept
only their default sampling temperature can retry the same request without
the unsupported optional field instead of leaving summaries unavailable.
- The pin remains an immutable upstream commit and does not copy provider
behavior or credentials into LineageWeave.
4 changes: 2 additions & 2 deletions docker/contextual-orchestrator/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ FROM python:3.12-slim@sha256:423ed6ab25b1921a477529254bfeeabf5855151dc2c3141699a
WORKDIR /app

# Reuse the upstream implementation without copying it into LineageWeave.
# Pin the runtime to PR #765's pushed commit until that protected PR merges;
# Pin the runtime to ContextualWisdomLab/contextual-orchestrator#779's pushed commit until that protected PR merges;
# this keeps model selection, structured synthesis, and reasoning policy in
# contextual-orchestrator itself.
ADD https://github.com/ContextualWisdomLab/contextual-orchestrator/archive/7df051a.tar.gz /tmp/contextual-orchestrator.tar.gz
ADD https://github.com/ContextualWisdomLab/contextual-orchestrator/archive/cf4a4501fa5057f89b21cad5033c5925755cd150.tar.gz /tmp/contextual-orchestrator.tar.gz
RUN mkdir /tmp/contextual-orchestrator \
&& tar -xzf /tmp/contextual-orchestrator.tar.gz --strip-components=1 -C /tmp/contextual-orchestrator \
&& cp -R /tmp/contextual-orchestrator/contextual_orchestrator /app/contextual_orchestrator \
Expand Down
18 changes: 13 additions & 5 deletions docs/adr/0083-orchestrator-runtime-commit-pin.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,18 @@ The orchestrator's `auto` reasoning mode is an internal routing decision and
must not be forwarded as an upstream provider `reasoning_effort` value. The
runtime also must discover provider models from the configured gateway rather
than requiring `LLM_GATEWAY_MODEL`, and structured requests must remain
multi-agent.
multi-agent. Some provider deployments accept only their default sampling
temperature; retrying the same rejected value cannot recover that capability
mismatch.

## Decision

`docker/contextual-orchestrator/Dockerfile` pins the downloaded archive to
commit `6db772e`, the pushed head of contextual-orchestrator PR #765. The pin
remains explicit and immutable until the protected PR merges; it is not a
moving `main` reference and it is not a LineageWeave monkey patch.
commit `cf4a4501fa5057f89b21cad5033c5925755cd150`, the pushed head of
ContextualWisdomLab/contextual-orchestrator#779, stacked on
ContextualWisdomLab/contextual-orchestrator#765. The pin remains explicit
and immutable until the protected PRs merge; it is not a moving `main`
reference and it is not a LineageWeave monkey patch.

The runtime contract is:

Expand All @@ -33,6 +37,9 @@ The runtime contract is:
reconciliation prompt; independent VISION worker evidence is retained instead.
- A provider 4xx is reported as a failed orchestration attempt, never as a
successful empty semantic result.
- When HTTP 400/422 explicitly proves that `temperature` is unsupported, the
same endpoint is retried once with only that optional field omitted. Invalid
values and unrelated 4xx responses remain fail-closed.
- An empty seed model is expanded from the configured gateway `/v1/models`
endpoint; embedding-only rows are not added to the chat agent pool.
- `json_object`, `json_schema`, and Responses JSON formats run conduct plus
Expand All @@ -44,4 +51,5 @@ The runtime contract is:
implementation.
- Rebuilding the image is required after the upstream pin changes.
- Protected-branch review and merge remain external gates; this pin does not
bypass PR #765.
bypass ContextualWisdomLab/contextual-orchestrator#765 or
ContextualWisdomLab/contextual-orchestrator#779.
22 changes: 22 additions & 0 deletions tests/test_orchestrator_runtime_pin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
"""Keep the reviewed contextual-orchestrator archive pin and ADR synchronized."""

from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]
ORCHESTRATOR_COMMIT = "cf4a4501fa5057f89b21cad5033c5925755cd150"


def test_orchestrator_runtime_pin_matches_adr() -> None:
"""The image and decision record must identify the same immutable commit."""
dockerfile = (ROOT / "docker/contextual-orchestrator/Dockerfile").read_text(
encoding="utf-8"
)
adr = (ROOT / "docs/adr/0083-orchestrator-runtime-commit-pin.md").read_text(
encoding="utf-8"
)

assert f"contextual-orchestrator/archive/{ORCHESTRATOR_COMMIT}.tar.gz" in dockerfile
assert f"commit `{ORCHESTRATOR_COMMIT}`" in adr
upstream_pr = "ContextualWisdomLab/contextual-orchestrator#779"
assert upstream_pr in dockerfile and upstream_pr in adr