AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative
-
@andreasdueren I'm happy to try it on my instance thanks to you! Installed and deployed
, I'll testEDIT: in the end, I notice I don't understand how to make Affine work with my AI subscription (Mistral) and I'm also lost in Affine Admin View . Maybe it's just not mature enough for me at this stage
Your packaging looks great, at least it works like a charm for me
(I just had to clone the repo so I have the CloudronManifest available for install).Thanks!
@SansGuidon said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
I don't understand how to make Affine work with my AI subscription (Mistral)
I haven't tested any of the AI features. But in theory you should be able to enter any openai compatible endpoint. I assume, Mistral does have one?
What are your issues with the admin view? It's pretty basic with few variables able to be set up, most things are set up with env and should be ready with the package as is.
-
@SansGuidon said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
I don't understand how to make Affine work with my AI subscription (Mistral)
I haven't tested any of the AI features. But in theory you should be able to enter any openai compatible endpoint. I assume, Mistral does have one?
What are your issues with the admin view? It's pretty basic with few variables able to be set up, most things are set up with env and should be ready with the package as is.
@andreasdueren said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
@SansGuidon said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
I don't understand how to make Affine work with my AI subscription (Mistral)
I haven't tested any of the AI features. But in theory you should be able to enter any openai compatible endpoint. I assume, Mistral does have one?
What are your issues with the admin view? It's pretty basic with few variables able to be set up, most things are set up with env and should be ready with the package as is.
What I'm confused about is the onboarding flow: we are directed to the Admin view in the accounts list (which are not verified but I don't see how to solve that).
I'm trying to configure AI but no way to confirm if my entered settings are valid? The save button is just an icon without text, on a corner of the page, not really a good UX.
Then how do we find the main app from the Admin view? The main icon at top left is not even a link. Maybe the Admin view is the poor part of the UX, but that's where we land first and it looks like an escape game.I find it just not super user friendly, maybe we gets used to it
but it looks like the Frontend part is worth improving.EDIT: I tried to use Mistral but it fails on copilot provider not available, something like that
I found this blog post, which mentions that maybe we have to tweak the code of Affine to make things work. https://sneekes.app/posts/getting_affine_ai_copilot_working_with_custom_models_and_ollama/I'll dig deeper in that later
, kids require attention 
-
@andreasdueren said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
@SansGuidon said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
I don't understand how to make Affine work with my AI subscription (Mistral)
I haven't tested any of the AI features. But in theory you should be able to enter any openai compatible endpoint. I assume, Mistral does have one?
What are your issues with the admin view? It's pretty basic with few variables able to be set up, most things are set up with env and should be ready with the package as is.
What I'm confused about is the onboarding flow: we are directed to the Admin view in the accounts list (which are not verified but I don't see how to solve that).
I'm trying to configure AI but no way to confirm if my entered settings are valid? The save button is just an icon without text, on a corner of the page, not really a good UX.
Then how do we find the main app from the Admin view? The main icon at top left is not even a link. Maybe the Admin view is the poor part of the UX, but that's where we land first and it looks like an escape game.I find it just not super user friendly, maybe we gets used to it
but it looks like the Frontend part is worth improving.EDIT: I tried to use Mistral but it fails on copilot provider not available, something like that
I found this blog post, which mentions that maybe we have to tweak the code of Affine to make things work. https://sneekes.app/posts/getting_affine_ai_copilot_working_with_custom_models_and_ollama/I'll dig deeper in that later
, kids require attention 
@SansGuidon said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
@andreasdueren said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
@SansGuidon said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
I don't understand how to make Affine work with my AI subscription (Mistral)
I haven't tested any of the AI features. But in theory you should be able to enter any openai compatible endpoint. I assume, Mistral does have one?
What are your issues with the admin view? It's pretty basic with few variables able to be set up, most things are set up with env and should be ready with the package as is.
What I'm confused about is the onboarding flow: we are directed to the Admin view in the accounts list (which are not verified but I don't see how to solve that).
I'm trying to configure AI but no way to confirm if my entered settings are valid? The save button is just an icon without text, on a corner of the page, not really a good UX.
Then how do we find the main app from the Admin view? The main icon at top left is not even a link. Maybe the Admin view is the poor part of the UX, but that's where we land first and it looks like an escape game.I find it just not super user friendly, maybe we gets used to it
but it looks like the Frontend part is worth improving.EDIT: I tried to use Mistral but it fails on copilot provider not available, something like that
I found this blog post, which mentions that maybe we have to tweak the code of Affine to make things work. https://sneekes.app/posts/getting_affine_ai_copilot_working_with_custom_models_and_ollama/I'll dig deeper in that later
, kids require attention 
Yeah onboarding was a bit odd. You land in the admin view and need to manually navigate to the base domain to see the app. After the admin was created you can log in with openID though and make that user an admin.
-
@andreasdueren said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
@SansGuidon said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
I don't understand how to make Affine work with my AI subscription (Mistral)
I haven't tested any of the AI features. But in theory you should be able to enter any openai compatible endpoint. I assume, Mistral does have one?
What are your issues with the admin view? It's pretty basic with few variables able to be set up, most things are set up with env and should be ready with the package as is.
What I'm confused about is the onboarding flow: we are directed to the Admin view in the accounts list (which are not verified but I don't see how to solve that).
I'm trying to configure AI but no way to confirm if my entered settings are valid? The save button is just an icon without text, on a corner of the page, not really a good UX.
Then how do we find the main app from the Admin view? The main icon at top left is not even a link. Maybe the Admin view is the poor part of the UX, but that's where we land first and it looks like an escape game.I find it just not super user friendly, maybe we gets used to it
but it looks like the Frontend part is worth improving.EDIT: I tried to use Mistral but it fails on copilot provider not available, something like that
I found this blog post, which mentions that maybe we have to tweak the code of Affine to make things work. https://sneekes.app/posts/getting_affine_ai_copilot_working_with_custom_models_and_ollama/I'll dig deeper in that later
, kids require attention 
I tried to use Mistral but it fails on copilot provider not available, something like that
I found this blog post, which mentions that maybe we have to tweak the code of Affine to make things work. https://sneekes.app/posts/getting_affine_ai_copilot_working_with_custom_models_and_ollama/Weird. I can try to modify something for the package but this makes it sound like you need to select a provider on built which isn’t really optimal.
Edit: Just sent you a message for further testing.
-
I think I also see part of the problem:
It requires the cloud indexer to be running Indexer
I'll try to add manticore to the package.
-
This is now including manticore:
andreasdueren/affine-cloudron:0.25.23 -
Thanks @andreasdueren.
I tried wiring AFFiNE’sopenaiprovider to Mistral (baseUrl=https://api.mistral.ai/v1, modelmistral-large-latest+ scenarios override), but AFFiNE is calling the new OpenAI Responses API (/v1/responses), while Mistral only exposes the older/v1/chat/completions, so I get 404s ("no Route matched with those values").This seems to be the same limitation described in GitHub issues #13617 and #13480, where the suggested fix is to set
"oldApiStyle": trueundercopilot.providers.openaiinconfig.jsonto force the old chat/completions style. I've tried that without success despite it's part of the code https://github.com/toeverything/AFFiNE/blob/62fe6982fbdbfa9d6fcbad78019e4d6cda62338a/packages/backend/server/src/plugins/copilot/providers/openai.ts#L55I’m not sure whether the Cloudron AFFiNE package already includes any other workaround, so right now Mistral isn’t really usable as an OpenAI-compatible backend in this setup.
Nov 17 09:50:05 APICallError [AI_APICallError]: Not Found Nov 17 09:50:05 at file:///run/affine/affine-build/node_modules/@ai-sdk/provider-utils/dist/index.mjs:890:14 Nov 17 09:50:05 at process.processTicksAndRejections (node:internal/process/task_queues:105:5) Nov 17 09:50:05 at async postToApi (file:///run/affine/affine-build/node_modules/@ai-sdk/provider-utils/dist/index.mjs:721:28) Nov 17 09:50:05 at async OpenAIResponsesLanguageModel.doStream (file:///run/affine/affine-build/node_modules/@ai-sdk/openai/dist/index.mjs:3631:50) Nov 17 09:50:05 at async fn (file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:4987:27) Nov 17 09:50:05 at async file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:1544:22 Nov 17 09:50:05 at async _retryWithExponentialBackoff (file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:1695:12) Nov 17 09:50:05 at async streamStep (file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:4943:15) Nov 17 09:50:05 at async fn (file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:5284:9) Nov 17 09:50:05 at async file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:1544:22 { Nov 17 09:50:05 cause: undefined, Nov 17 09:50:05 url: 'https://api.mistral.ai/v1/responses', Nov 17 09:50:05 requestBodyValues: { Nov 17 09:50:05 model: 'mistral-large-latest', Nov 17 09:50:05 input: [ [Object], [Object] ], Nov 17 09:50:05 temperature: 0, Nov 17 09:50:05 top_p: undefined, Nov 17 09:50:05 max_output_tokens: 4096, Nov 17 09:50:05 max_tool_calls: undefined, Nov 17 09:50:05 metadata: undefined, Nov 17 09:50:05 parallel_tool_calls: undefined, Nov 17 09:50:05 previous_response_id: undefined, Nov 17 09:50:05 store: undefined, Nov 17 09:50:05 user: '<REDACTED>', Nov 17 09:50:05 instructions: undefined, Nov 17 09:50:05 service_tier: undefined, Nov 17 09:50:05 include: [ 'web_search_call.action.sources' ], Nov 17 09:50:05 prompt_cache_key: undefined, Nov 17 09:50:05 safety_identifier: undefined, Nov 17 09:50:05 top_logprobs: undefined, Nov 17 09:50:05 truncation: undefined, Nov 17 09:50:05 tools: [ Nov 17 09:50:05 [Object], [Object], Nov 17 09:50:05 [Object], [Object], Nov 17 09:50:05 [Object], [Object], Nov 17 09:50:05 [Object], [Object] Nov 17 09:50:05 ], Nov 17 09:50:05 tool_choice: 'auto', Nov 17 09:50:05 stream: true Nov 17 09:50:05 }, Nov 17 09:50:05 statusCode: 404, Nov 17 09:50:05 responseHeaders: { Nov 17 09:50:05 'access-control-allow-origin': '*', Nov 17 09:50:05 'alt-svc': 'h3=":443"; ma=86400', Nov 17 09:50:05 'cf-cache-status': 'DYNAMIC', Nov 17 09:50:05 'cf-ray': '99fdfa7caeef2c00-FRA', Nov 17 09:50:05 connection: 'keep-alive', Nov 17 09:50:05 'content-encoding': 'br', Nov 17 09:50:05 'content-type': 'application/json; charset=utf-8', Nov 17 09:50:05 date: 'Mon, 17 Nov 2025 08:50:04 GMT', Nov 17 09:50:05 server: 'cloudflare', Nov 17 09:50:05 'set-cookie': '_cfuvid=<REDACTED>-1763369404992-<REDACTED_IP>-604800000; path=/; domain=.mistral.ai; HttpOnly; Secure; SameSite=None', Nov 17 09:50:05 'strict-transport-security': 'max-age=15552000; includeSubDomains; preload', Nov 17 09:50:05 'transfer-encoding': 'chunked', Nov 17 09:50:05 'x-content-type-options': 'nosniff', Nov 17 09:50:05 'x-kong-response-latency': '1' Nov 17 09:50:05 }, Nov 17 09:50:05 responseBody: '{\n' + Nov 17 09:50:05 ' "message":"no Route matched with those values",\n' + Nov 17 09:50:05 ' "request_id":"<REDACTED>"\n' + Nov 17 09:50:05 '}', Nov 17 09:50:05 isRetryable: false, Nov 17 09:50:05 data: undefined, Nov 17 09:50:05 [Symbol(vercel.ai.error)]: true, Nov 17 09:50:05 [Symbol(vercel.ai.error.AI_APICallError)]: true Nov 17 09:50:05 }Also interesting read: https://sneekes.app/posts/getting_affine_ai_copilot_working_with_custom_models_and_ollama/
TLDR: Too bad for me

EDIT: after deleting the keys from table app_configs and forcing the
oldApiStyle: truein openai provider config, I get a different stack trace but still not solving the issue
, see belowNov 17 10:06:30 [Nest] 72 - 11/17/2025, 9:06:30 AM ERROR [OpenAIProvider] <selfhosted:event:27148b39-55a5-4e71-91ec-ce77dd2bb451> Failed to fetch available models Nov 17 10:06:30 ZodError: [ Nov 17 10:06:30 { Nov 17 10:06:30 "code": "invalid_type", Nov 17 10:06:30 "expected": "array", Nov 17 10:06:30 "received": "undefined", Nov 17 10:06:30 "path": [ Nov 17 10:06:30 "data" Nov 17 10:06:30 ], Nov 17 10:06:30 "message": "Required" Nov 17 10:06:30 } Nov 17 10:06:30 ] Nov 17 10:06:30 at get error (file:///run/affine/affine-build/node_modules/zod/dist/esm/v3/types.js:51:31) Nov 17 10:06:30 at ZodObject.parse (file:///run/affine/affine-build/node_modules/zod/dist/esm/v3/types.js:126:22) Nov 17 10:06:30 at file:///run/affine/affine-build/dist/main.js:122774:66 Nov 17 10:06:30 at process.processTicksAndRejections (node:internal/process/task_queues:105:5) Nov 17 10:06:30 at async OpenAIProvider.refreshOnlineModels (file:///run/affine/affine-build/dist/main.js:122769:34) Nov 17 10:06:30 <REDACTED_IP> - - [17/Nov/2025:09:06:30 +0000] "GET /api/auth/session HTTP/1.1" 200 193 "https://affine.zoemp.be/workspace/4Ob0-Wxj2fHaDhkgaW6gC/Y4cspZCWKz" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<REDACTED_IP> Safari/537.36" ... ... Nov 17 10:06:37 [Nest] 72 - 11/17/2025, 9:06:37 AM DEBUG [CopilotProviderFactory] <selfhosted:http:ef38c027-0882-4057-9f12-f7a552f391a6> Resolving copilot provider for output type: object Nov 17 10:06:37 [Nest] 72 - 11/17/2025, 9:06:37 AM ERROR [Sse] <selfhosted:http:ef38c027-0882-4057-9f12-f7a552f391a6> no_copilot_provider_available ({"sessionId":"<REDACTED>","params":{"messageId":"79b66a60-8f15-43fe-ac11-6b90e2a7e300"},"throwInStream":false}) Nov 17 10:06:37 no_copilot_provider_available: No copilot provider available: mistral-large-latest Nov 17 10:06:37 at CopilotController.chooseProvider (file:///run/affine/affine-build/dist/main.js:130026:19) Nov 17 10:06:37 at process.processTicksAndRejections (node:internal/process/task_queues:105:5) Nov 17 10:06:37 at async CopilotController.prepareChatSession (file:///run/affine/affine-build/dist/main.js:130080:37) Nov 17 10:06:37 at async CopilotController.chatStreamObject (file:///run/affine/affine-build/dist/main.js:130214:64) Nov 17 10:06:37 at async CopilotController.<anonymous> (file:///run/affine/affine-build/dist/main.js:6374:20) -
Thanks @andreasdueren.
I tried wiring AFFiNE’sopenaiprovider to Mistral (baseUrl=https://api.mistral.ai/v1, modelmistral-large-latest+ scenarios override), but AFFiNE is calling the new OpenAI Responses API (/v1/responses), while Mistral only exposes the older/v1/chat/completions, so I get 404s ("no Route matched with those values").This seems to be the same limitation described in GitHub issues #13617 and #13480, where the suggested fix is to set
"oldApiStyle": trueundercopilot.providers.openaiinconfig.jsonto force the old chat/completions style. I've tried that without success despite it's part of the code https://github.com/toeverything/AFFiNE/blob/62fe6982fbdbfa9d6fcbad78019e4d6cda62338a/packages/backend/server/src/plugins/copilot/providers/openai.ts#L55I’m not sure whether the Cloudron AFFiNE package already includes any other workaround, so right now Mistral isn’t really usable as an OpenAI-compatible backend in this setup.
Nov 17 09:50:05 APICallError [AI_APICallError]: Not Found Nov 17 09:50:05 at file:///run/affine/affine-build/node_modules/@ai-sdk/provider-utils/dist/index.mjs:890:14 Nov 17 09:50:05 at process.processTicksAndRejections (node:internal/process/task_queues:105:5) Nov 17 09:50:05 at async postToApi (file:///run/affine/affine-build/node_modules/@ai-sdk/provider-utils/dist/index.mjs:721:28) Nov 17 09:50:05 at async OpenAIResponsesLanguageModel.doStream (file:///run/affine/affine-build/node_modules/@ai-sdk/openai/dist/index.mjs:3631:50) Nov 17 09:50:05 at async fn (file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:4987:27) Nov 17 09:50:05 at async file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:1544:22 Nov 17 09:50:05 at async _retryWithExponentialBackoff (file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:1695:12) Nov 17 09:50:05 at async streamStep (file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:4943:15) Nov 17 09:50:05 at async fn (file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:5284:9) Nov 17 09:50:05 at async file:///run/affine/affine-build/node_modules/ai/dist/index.mjs:1544:22 { Nov 17 09:50:05 cause: undefined, Nov 17 09:50:05 url: 'https://api.mistral.ai/v1/responses', Nov 17 09:50:05 requestBodyValues: { Nov 17 09:50:05 model: 'mistral-large-latest', Nov 17 09:50:05 input: [ [Object], [Object] ], Nov 17 09:50:05 temperature: 0, Nov 17 09:50:05 top_p: undefined, Nov 17 09:50:05 max_output_tokens: 4096, Nov 17 09:50:05 max_tool_calls: undefined, Nov 17 09:50:05 metadata: undefined, Nov 17 09:50:05 parallel_tool_calls: undefined, Nov 17 09:50:05 previous_response_id: undefined, Nov 17 09:50:05 store: undefined, Nov 17 09:50:05 user: '<REDACTED>', Nov 17 09:50:05 instructions: undefined, Nov 17 09:50:05 service_tier: undefined, Nov 17 09:50:05 include: [ 'web_search_call.action.sources' ], Nov 17 09:50:05 prompt_cache_key: undefined, Nov 17 09:50:05 safety_identifier: undefined, Nov 17 09:50:05 top_logprobs: undefined, Nov 17 09:50:05 truncation: undefined, Nov 17 09:50:05 tools: [ Nov 17 09:50:05 [Object], [Object], Nov 17 09:50:05 [Object], [Object], Nov 17 09:50:05 [Object], [Object], Nov 17 09:50:05 [Object], [Object] Nov 17 09:50:05 ], Nov 17 09:50:05 tool_choice: 'auto', Nov 17 09:50:05 stream: true Nov 17 09:50:05 }, Nov 17 09:50:05 statusCode: 404, Nov 17 09:50:05 responseHeaders: { Nov 17 09:50:05 'access-control-allow-origin': '*', Nov 17 09:50:05 'alt-svc': 'h3=":443"; ma=86400', Nov 17 09:50:05 'cf-cache-status': 'DYNAMIC', Nov 17 09:50:05 'cf-ray': '99fdfa7caeef2c00-FRA', Nov 17 09:50:05 connection: 'keep-alive', Nov 17 09:50:05 'content-encoding': 'br', Nov 17 09:50:05 'content-type': 'application/json; charset=utf-8', Nov 17 09:50:05 date: 'Mon, 17 Nov 2025 08:50:04 GMT', Nov 17 09:50:05 server: 'cloudflare', Nov 17 09:50:05 'set-cookie': '_cfuvid=<REDACTED>-1763369404992-<REDACTED_IP>-604800000; path=/; domain=.mistral.ai; HttpOnly; Secure; SameSite=None', Nov 17 09:50:05 'strict-transport-security': 'max-age=15552000; includeSubDomains; preload', Nov 17 09:50:05 'transfer-encoding': 'chunked', Nov 17 09:50:05 'x-content-type-options': 'nosniff', Nov 17 09:50:05 'x-kong-response-latency': '1' Nov 17 09:50:05 }, Nov 17 09:50:05 responseBody: '{\n' + Nov 17 09:50:05 ' "message":"no Route matched with those values",\n' + Nov 17 09:50:05 ' "request_id":"<REDACTED>"\n' + Nov 17 09:50:05 '}', Nov 17 09:50:05 isRetryable: false, Nov 17 09:50:05 data: undefined, Nov 17 09:50:05 [Symbol(vercel.ai.error)]: true, Nov 17 09:50:05 [Symbol(vercel.ai.error.AI_APICallError)]: true Nov 17 09:50:05 }Also interesting read: https://sneekes.app/posts/getting_affine_ai_copilot_working_with_custom_models_and_ollama/
TLDR: Too bad for me

EDIT: after deleting the keys from table app_configs and forcing the
oldApiStyle: truein openai provider config, I get a different stack trace but still not solving the issue
, see belowNov 17 10:06:30 [Nest] 72 - 11/17/2025, 9:06:30 AM ERROR [OpenAIProvider] <selfhosted:event:27148b39-55a5-4e71-91ec-ce77dd2bb451> Failed to fetch available models Nov 17 10:06:30 ZodError: [ Nov 17 10:06:30 { Nov 17 10:06:30 "code": "invalid_type", Nov 17 10:06:30 "expected": "array", Nov 17 10:06:30 "received": "undefined", Nov 17 10:06:30 "path": [ Nov 17 10:06:30 "data" Nov 17 10:06:30 ], Nov 17 10:06:30 "message": "Required" Nov 17 10:06:30 } Nov 17 10:06:30 ] Nov 17 10:06:30 at get error (file:///run/affine/affine-build/node_modules/zod/dist/esm/v3/types.js:51:31) Nov 17 10:06:30 at ZodObject.parse (file:///run/affine/affine-build/node_modules/zod/dist/esm/v3/types.js:126:22) Nov 17 10:06:30 at file:///run/affine/affine-build/dist/main.js:122774:66 Nov 17 10:06:30 at process.processTicksAndRejections (node:internal/process/task_queues:105:5) Nov 17 10:06:30 at async OpenAIProvider.refreshOnlineModels (file:///run/affine/affine-build/dist/main.js:122769:34) Nov 17 10:06:30 <REDACTED_IP> - - [17/Nov/2025:09:06:30 +0000] "GET /api/auth/session HTTP/1.1" 200 193 "https://affine.zoemp.be/workspace/4Ob0-Wxj2fHaDhkgaW6gC/Y4cspZCWKz" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<REDACTED_IP> Safari/537.36" ... ... Nov 17 10:06:37 [Nest] 72 - 11/17/2025, 9:06:37 AM DEBUG [CopilotProviderFactory] <selfhosted:http:ef38c027-0882-4057-9f12-f7a552f391a6> Resolving copilot provider for output type: object Nov 17 10:06:37 [Nest] 72 - 11/17/2025, 9:06:37 AM ERROR [Sse] <selfhosted:http:ef38c027-0882-4057-9f12-f7a552f391a6> no_copilot_provider_available ({"sessionId":"<REDACTED>","params":{"messageId":"79b66a60-8f15-43fe-ac11-6b90e2a7e300"},"throwInStream":false}) Nov 17 10:06:37 no_copilot_provider_available: No copilot provider available: mistral-large-latest Nov 17 10:06:37 at CopilotController.chooseProvider (file:///run/affine/affine-build/dist/main.js:130026:19) Nov 17 10:06:37 at process.processTicksAndRejections (node:internal/process/task_queues:105:5) Nov 17 10:06:37 at async CopilotController.prepareChatSession (file:///run/affine/affine-build/dist/main.js:130080:37) Nov 17 10:06:37 at async CopilotController.chatStreamObject (file:///run/affine/affine-build/dist/main.js:130214:64) Nov 17 10:06:37 at async CopilotController.<anonymous> (file:///run/affine/affine-build/dist/main.js:6374:20)@SansGuidon Hmm yes it doesn't seem to be very flexible about what kind of models you use.
-
@SansGuidon Hmm yes it doesn't seem to be very flexible about what kind of models you use.
@andreasdueren said in AFFiNE - open-source Notion, Miro, Monday, Outline, Appflowy alternative:
@SansGuidon Hmm yes it doesn't seem to be very flexible about what kind of models you use.
I've reached out to the AFFINE's community on some issue to have an idea if i's difficult to solve

I'll keep you posted!
Anyway, thank you
️ -
In general I'm not sure how these settings work either. For example if I change Chat to claude, it still sticks with Gemini. And if I select Gemini Pro, it tells me I need a subscription.




-
AFFiNE Copilot Findings
- Config lives in
/app/data/config/config.json– The admin UI doesn’t honor scenario overrides reliably, so edit the file directly (File Manager works). Setcopilot.scenarios.override_enabled: true, assign each scenario to a model you actually have access to, and restart the app. ENV overrides are gone; this file is the single source of truth. - Gemini model gating – AFFiNE’s frontend marks “Gemini Pro/Flash” as locked unless upstream billing flags are set. Those flags aren’t exposed in the self-host build, so the UI always shows the lock even if you provide a valid API key. Workaround: keep providers.gemini populated, set the model name directly in config.json, and ignore the badge—the backend will still call that model.
- Error if Gemini models remain without keys – Jobs like copilot.session.generateTitle still reference gemini-2.5-flash by default. If you remove the Gemini key but leave that model in the scenarios, the logs fill with no_copilot_provider_available errors and document-context chats fail (“I don’t see a document”).
- UI limitations – Even after the config update, the provider dropdown often stays empty. That’s cosmetic: check actual usage via
cloudron logs --app affine.tld.com | grep CopilotProvider. Responses are coming from whichever model you configured, regardless of what the UI shows. - Net result – All Copilot behavior is driven by
config.json; there’s no built-in way to “unlock” premium models in the UI because the hosted billing feature flags aren’t exposed. If you want to use Gemini Pro, set it manually in config.json (with a valid key) and ignore the warning.
- Config lives in