Separate frozen HTTP preparation from attempts
This commit is contained in:
@@ -29,18 +29,23 @@ for the generation boundary and is not mapped into the provider payload.
|
||||
Construction trims and validates a nonempty configured base URL and clones any
|
||||
supplied `http.Client` so Promptkit can apply its timeout default without
|
||||
mutating the caller's client. An empty configured base remains valid because a
|
||||
resolved request target may supply the endpoint. Generation then:
|
||||
resolved request target may supply the endpoint. Generation preparation then:
|
||||
|
||||
1. validates shared execution-setting invariants and the final selected base
|
||||
endpoint;
|
||||
2. maps the internal request into the OpenAI-compatible chat payload;
|
||||
3. validates and merges extra parameters;
|
||||
4. composes `/chat/completions` through parsed URL path operations;
|
||||
5. resolves authentication;
|
||||
6. performs the outbound request under the applicable deadlines; and
|
||||
7. decodes one strictly framed, size-bounded successful response object and
|
||||
maps its first choice and token usage, or decodes bounded structured
|
||||
non-success detail.
|
||||
5. resolves authentication and freezes the URL, body, and optional credential.
|
||||
|
||||
Each execution of that prepared request creates a fresh HTTP request, body
|
||||
reader, and attempt timeout context. It closes the response body and returns
|
||||
the HTTP status, decoded response or error, reported token values and presence,
|
||||
and any valid provider `Retry-After` not-before time. A strictly decoded
|
||||
successful envelope can retain usage even if its first choice or content is
|
||||
missing. Invalid framing and non-success error bodies supply no usage. The
|
||||
ordinary `Generate` method prepares and executes once and returns no partial
|
||||
response on failure.
|
||||
|
||||
`internal/llm` owns the set of reserved OpenAI-compatible request fields used
|
||||
when validating extra parameters. Backend registration consumes the same rule
|
||||
|
||||
@@ -252,6 +252,8 @@ No observation API yet. Validate affected packages and commit.
|
||||
|
||||
## Stage 3 — Separate Frozen HTTP Preparation From One Attempt
|
||||
|
||||
**Completed:** 2026-09-23.
|
||||
|
||||
Refactor `internal/llm/OpenAICompatibleClient` without changing its one-shot
|
||||
`Generate` behavior. Add an internal `PrepareGeneration` operation that validates
|
||||
and encodes one request, resolves credentials once, and returns private frozen
|
||||
|
||||
Reference in New Issue
Block a user