Skip to content

[inference-out] upstream: provider-failure demotion ladder and neutral failure copy in tinyinference-llm failure/ #7

Closed

Description

@senamakel

Add, in tinyinference-llm/src/failure/:

  • demotion.rs: DemotionKind and demote_decision(&ProviderHttpFailureFacts, provider_is_managed) -> Option<DemotionKind>. This is the ladder now in OpenHuman's HostErrorReporter: budget, no-model-loaded, custom upstream bad request, access policy, config rejection, context window, quota and so on. The ladder order is a user-visible contract. Carry the host's ladder-order tests with it.
  • copy.rs: a neutral FailureCopy { error_type, source, retryable, copy, key } table for product-neutral provider failures. That is about 15 rows: rate limit, timeout, network, context overflow, payload too large, unavailable, request rejected, and so on. Add trait FailureCopyProvider { fn copy(&self, class) -> Option<FailureCopy> } so a host overrides or extends. Keep the i18n keys (chat_error.*) stable, since the frontend renders by key.
  • classify_provider_failure_with(…, is_session_expired: impl Fn(&str) -> bool), or an equivalent predicate seam, so OpenHuman's error_classify.rs disappears.

Host rows unblocked (H3):

  • provider/ops/http_error.rs (259); the host keeps only the ErrorReporter impl (Sentry plus bus publishes)
  • provider/error_classify.rs (41)
  • the neutral rows of failure_copy/table.rs

Blocked by

None.

Definition of done

The listed APIs exist upstream with tests, are released/tagged, and the matching host-adoption leaf can pin them. Gates: the repo's own cargo test, cargo clippy -D warnings and CI.

Agent brief

  • Files to consider: the rows above; the epic's Evaluation section has each row's reason.
  • Research: the gaps listed above. Read the cited upstream symbols before writing code.
  • Workflow: one implementing-an-epic step. Follow OpenHuman's .claude/skills/migrate-to-submodule: upstream PR to the canonical tinyhumansai/<repo>, then tag/release; the OpenHuman gitlink bump and host deletion happen in the matching host-adoption leaf. tinyinference must not depend on tinyagents or OpenHuman.
  • Subagent: tdd-implementer.

Parent: tinyhumansai/openhuman#8092

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions