User role: Player/DM setup
Severity: sev1 blocker for no-key local-LLM QA
Area: ai, local-llm, setup
Repro steps:
- Start the app with
./scripts/start.ps1 -Mode docker.
- Ensure LM Studio is running at
http://localhost:1234/v1 with model gemma-4-e4b-uncensored-hauhaucs-aggressive.
- From dashboard, create a new campaign with the wizard and leave
Use this model for DM & NPC narration checked.
- Confirm
state.campaign_settings stores llm_provider=lmstudio, llm_base_url=http://localhost:1234/v1, and model gemma-4-e4b-uncensored-hauhaucs-aggressive.
- Call provider smoke endpoint:
POST /api/ai/test_provider with provider lmstudio, base URL http://localhost:1234/v1, and model gemma-4-e4b-uncensored-hauhaucs-aggressive.
Expected:
Local LM Studio provider works in no-key mode, or the app supplies a harmless dummy API key internally for OpenAI-compatible local servers. The README/product promise is that mock/no-key local mode remains sufficient for demo play and release verification.
Actual:
The endpoint returns HTTP 4xx with:
{"error":"Missing credentials. Please pass an api_key, workload_identity, admin_api_key, or set the OPENAI_API_KEY or OPENAI_ADMIN_KEY environment variable.","ok":false}
Environment:
- App: local Docker mode on Windows
- LM Studio
/v1/models: reachable
- Model:
gemma-4-e4b-uncensored-hauhaucs-aggressive
- QA campaign:
QA Full Monkey 2026-05-18
- Campaign id:
4d5bf959-c511-4efa-84b1-52d509ada647
- Session id:
cac16a8f-635f-4d83-a24a-77e38a37716b
Acceptance criteria:
POST /api/ai/test_provider succeeds for provider=lmstudio without user-entered API keys when LM Studio is reachable.
- AI character generation and narration can use LM Studio without requiring cloud API key configuration.
- Add a regression test for local OpenAI-compatible providers using dummy/no-key auth behavior.
User role: Player/DM setup
Severity: sev1 blocker for no-key local-LLM QA
Area: ai, local-llm, setup
Repro steps:
./scripts/start.ps1 -Mode docker.http://localhost:1234/v1with modelgemma-4-e4b-uncensored-hauhaucs-aggressive.Use this model for DM & NPC narrationchecked.state.campaign_settingsstoresllm_provider=lmstudio,llm_base_url=http://localhost:1234/v1, and modelgemma-4-e4b-uncensored-hauhaucs-aggressive.POST /api/ai/test_providerwith providerlmstudio, base URLhttp://localhost:1234/v1, and modelgemma-4-e4b-uncensored-hauhaucs-aggressive.Expected:
Local LM Studio provider works in no-key mode, or the app supplies a harmless dummy API key internally for OpenAI-compatible local servers. The README/product promise is that mock/no-key local mode remains sufficient for demo play and release verification.
Actual:
The endpoint returns HTTP 4xx with:
{"error":"Missing credentials. Please pass an api_key, workload_identity, admin_api_key, or set the OPENAI_API_KEY or OPENAI_ADMIN_KEY environment variable.","ok":false}Environment:
/v1/models: reachablegemma-4-e4b-uncensored-hauhaucs-aggressiveQA Full Monkey 2026-05-184d5bf959-c511-4efa-84b1-52d509ada647cac16a8f-635f-4d83-a24a-77e38a37716bAcceptance criteria:
POST /api/ai/test_providersucceeds forprovider=lmstudiowithout user-entered API keys when LM Studio is reachable.