PG1204 opened a new pull request, #6972:
URL: https://github.com/apache/texera/pull/6972

   ### What changes were proposed in this PR?
   
   Fixes two related bugs in the HuggingFace inference operator's 
provider-fallback loop (`_post_with_fallback` in the generated Python, emitted 
by `PythonCodegenBase.scala`) that break the `text-generation` / 
`image-text-to-text` path, which is the operator's default task.
   
   1. **Wrong model id on provider-scoped chat routes.** The chat branch posted 
the same payload, carrying `"model": self.MODEL_ID` (the HF Hub ID), to every 
provider's route (`router.huggingface.co/{provider}/...`). Provider-scoped 
routes require the provider's *own* model name (`providerId`, e.g. the Hub's 
`Qwen/Qwen2.5-72B-Instruct` is a different string on Groq or Fireworks), which 
`_resolve_providers` already fetches and `_call_provider` already uses for the 
other task families. Providers whose internal name differs from the Hub ID 
rejected every request with 400/404, so fallback only succeeded when the names 
happened to match. The chat branch now posts a per-attempt copy with the model 
overridden:
   
      chat_payload = {**pipeline_payload, "model": provider_id}
   
      (a copy, not in-place mutation, pipeline_payload is reused for the next 
provider
      attempt).
   
   2. **Malformed hf-inference chat URL.** The chat URL for hf-inference was 
built as `hf-inference/v1/chat/completions`, but hf-inference expects the model 
in the URL path: `hf-inference/models/{model-id}/v1/chat/completions` (the form 
this file already uses for pipeline tasks). Since hf-inference sorts first in 
`PROVIDER_COST_PRIORITY`, the cheapest provider failed on every row, wasting a 
doomed request (up to the 120 s timeout) per row before falling through.
   
   Net effect: text-gen rows now succeed on the cheapest live provider instead 
of failing with "All inference providers failed" or silently drifting to 
pricier providers. No behavior change for other task families - 
`_call_provider` already handled them correctly.
   
   ### Any related issues, documentation, discussions?
   
   Closes #6965 
   
   ### How was this PR tested?
   
   Added a generated-code test to HuggingFaceInferenceOpDescSpec ("send the 
provider-specific model id on provider-scoped chat routes") pinning both fixes: 
the corrected hf-inference chat URL, and the chat branch posting the 
per-provider payload copy (asserted as an anchored two-line block so pipeline 
routes that legitimately post pipeline_payload directly stay unaffected).
   
   Run:
   
   sbt "WorkflowOperator/testOnly 
org.apache.texera.amber.operator.huggingFace.*"
   
   Full HF package passes (123 tests, 12 suites), including 
PythonCodeRawInvalidTextSpec, which py_compiles the generated Python of all 117 
Python operators, verifying the edited template still emits syntactically valid 
Python. scalafmt clean.
   
   ### Was this PR authored or co-authored using generative AI tooling?
   
   Co-authored with Claude Fable 5 in compliance with ASF.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to