docs(bdd): add AI-routing feature (local-first, BYO fallback)
Gherkin spec for the routing guardrail: local produces the summary by default; on local failure, fall back only to a user-configured BYO provider; with no BYO, queue for retry and never send content to a third-party model. Encodes the local-first/user-owned principle (VISION) as executable behavior.
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
Feature: Local-first AI with optional BYO fallback
|
||||
As a user who values keeping my content on my own stack
|
||||
I want summaries produced by the local AI first
|
||||
So that my content only reaches a third-party model when I have explicitly opted in
|
||||
|
||||
Scenario: Local AI produces the summary
|
||||
Given the local AI stack is available
|
||||
When a transcript is summarized
|
||||
Then the local AI produces the summary
|
||||
And the summary records ai_provider "local"
|
||||
And the summary records fallback_used as false
|
||||
|
||||
Scenario: Local AI fails and the user has a BYO provider configured
|
||||
Given the local AI stack fails
|
||||
And I have configured a BYO provider "anthropic"
|
||||
When a transcript is summarized
|
||||
Then Tapir falls back to my "anthropic" provider
|
||||
And the summary records ai_provider "anthropic"
|
||||
And the summary records fallback_used as true
|
||||
|
||||
Scenario: Local AI fails and the user has no BYO provider
|
||||
Given the local AI stack fails
|
||||
And I have not configured any BYO provider
|
||||
When a transcript is summarized
|
||||
Then no summary is produced
|
||||
And the work is queued for retry
|
||||
And my content is not sent to any third-party model
|
||||
|
||||
Scenario: A user without BYO never has content sent externally
|
||||
Given I have not configured any BYO provider
|
||||
When any transcript is summarized
|
||||
Then my content is only ever sent to the local AI stack
|
||||
|
||||
# "Reliably" is operationalized as: Primary returned without error within timeout.
|
||||
# Quality scoring may be added later without changing these scenarios.
|
||||
Reference in New Issue
Block a user