UN-3987 [FIX] Send LLMWhisperer V2 params under the correct names - #2236
UN-3987 [FIX] Send LLMWhisperer V2 params under the correct names#2236chandrasekharan-zipstack wants to merge 3 commits into
Conversation
0b28344 to
151b688
Compare
The adapter read the line splitter strategy under `line_spitter_strategy` while its JSON schema stores it as `line_splitter_strategy`, so the user's choice never applied. The same misspelling was also passed to the client, which forwarded a query param the service does not read. The page separator keeps its misspelled config key since existing adapter configs are stored under it, but is now sent under the client's corrected kwarg. Both need llmwhisperer-client 2.8.0 or newer. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Dra3Xevzb5oYtMz9fhj8iG
Without it, usage reports record the service default for every Unstract-originated extraction, leaving no way to cross reference a row back to a document. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Dra3Xevzb5oYtMz9fhj8iG
151b688 to
8b74d6f
Compare
|
|
| Filename | Overview |
|---|---|
| unstract/sdk1/pyproject.toml | Raises the client minimum correctly, but the SDK project's own uv.lock remains pinned to 2.6.2. |
| unstract/sdk1/src/unstract/sdk1/adapters/x2text/llm_whisperer_v2/src/constants.py | Corrects the strategy key and separates the legacy stored page-separator key from the client parameter name. |
| unstract/sdk1/src/unstract/sdk1/adapters/x2text/llm_whisperer_v2/src/helper.py | Emits corrected client kwargs and adds the input basename to extraction requests; behavior depends on installing client 2.8.0. |
| unstract/sdk1/tests/test_llm_whisperer_v2_params.py | Covers strategy and legacy page-separator mapping, though it does not exercise the downstream client call. |
| backend/uv.lock | Regenerates the backend lock and resolves llmwhisperer-client 2.8.0, with substantial incidental lock-format churn. |
| platform-service/uv.lock | Regenerates the service lock and updates the SDK client dependency. |
| unstract/filesystem/uv.lock | Regenerates the filesystem lock and updates the transitive SDK client dependency. |
| workers/uv.lock | Updates the worker lock to llmwhisperer-client 2.8.0. |
Prompt To Fix All With AI
### Issue 1
unstract/sdk1/pyproject.toml:50
**SDK lock retains incompatible client**
When `unstract/sdk1` is installed from its own lockfile, the lock still resolves `llmwhisperer-client` 2.6.2 despite this new `>=2.8.0` requirement. Frozen installation therefore rejects the stale lock, while workflows that install from it without synchronization retain a client that does not support the newly forwarded `line_splitter_strategy`, `page_separator`, and `file_name` arguments, causing V2 extraction calls to fail.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Reviews (1): Last reviewed commit: "Commit uv.lock changes" | Re-trigger Greptile
| "redis>=5.2.1", | ||
| # # LLMWhisperer client | ||
| "llmwhisperer-client>=2.6.2", | ||
| "llmwhisperer-client>=2.8.0", |
There was a problem hiding this comment.
SDK lock retains incompatible client
When unstract/sdk1 is installed from its own lockfile, the lock still resolves llmwhisperer-client 2.6.2 despite this new >=2.8.0 requirement. Frozen installation therefore rejects the stale lock, while workflows that install from it without synchronization retain a client that does not support the newly forwarded line_splitter_strategy, page_separator, and file_name arguments, causing V2 extraction calls to fail.
Knowledge Base Used: Unstract SDK, Core, and Flags
Prompt To Fix With AI
This is a comment left during a code review.
Path: unstract/sdk1/pyproject.toml
Line: 50
Comment:
**SDK lock retains incompatible client**
When `unstract/sdk1` is installed from its own lockfile, the lock still resolves `llmwhisperer-client` 2.6.2 despite this new `>=2.8.0` requirement. Frozen installation therefore rejects the stale lock, while workflows that install from it without synchronization retain a client that does not support the newly forwarded `line_splitter_strategy`, `page_separator`, and `file_name` arguments, causing V2 extraction calls to fail.
**Knowledge Base Used:** [Unstract SDK, Core, and Flags](https://app.greptile.com/zipstack/-/custom-context/knowledge-base/zipstack/unstract/-/docs/unstract-sdk-core.md)
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
Unstract test resultsPer-group results
Critical paths
|



What
The LLMWhisperer V2 adapter's line splitter strategy setting has never been applied. Two breaks stacked:
line_splitter_strategy, butWhispererConfig.LINE_SPLITTER_STRATEGYwas"line_spitter_strategy", soconfig.get()never matched and theleft-prioritydefault was always used.whisper()kwarg, so the client sent query paramline_spitter_strategy, which the service does not read and Flask drops silently.Fixing either alone changes nothing.
Changes
LINE_SPLITTER_STRATEGYis now"line_splitter_strategy"— matches the schema key and the wire param.WhispererConfiggainsPAGE_SEPARATOR_PARAMandFILE_NAMEfor the client kwarg names.page_seperatorstays as the config key (existing adapter configs in the DB are stored under it, no migration needed) but is now sent aspage_separator.file_nameis now sent, set to the basename of the file being extracted. Previously the adapter never sent it, so every Unstract-originated row in LLMWhisperer usage reports showed the service default. Separate commit if you'd rather drop it.llmwhisperer-clientpinned to>=2.8.0.Blocked on the client release
>=2.8.0does not exist yet — it is the release that carries Zipstack/llm-whisperer-python-client#34, which adds the correctly-namedline_splitter_strategy,page_separatorandfile_namekwargs. On an older client these kwargs raiseTypeError, so this must not merge before that release. Draft until then. On un-drafting: confirm the actual version number and regenerate the lockfiles.Ordering: unstract-llm-whisperer#721 (service accepts
page_separator) → llm-whisperer-python-client#34 release → this PR.Behaviour change to expect
The service validates the strategy and returns
400for anything outsideleft-priority/right-priority/mid-priority. Previously an out-of-range value was silently ignored, so a bad stored value becomes a hard error once the value actually arrives.Users who never touched the setting are unaffected — adapter, client and service all default to
left-priority.Verification
tests/test_llm_whisperer_v2_params.py— 2 tests, both pass: the strategy is read from the schema key, and the page separator is read from the legacy config key but emitted under the corrected kwarg.Not verified end to end: the extraction-output change needs the client release and a run against a deployed service.
Jira: UN-3987, LW-406
🤖 Generated with Claude Code
https://claude.ai/code/session_01Dra3Xevzb5oYtMz9fhj8iG