Switching from a local model to a remote service takes more than changing provider. Old endpoints, models, or saved keys can remain. Returning one sentence does not establish that a real conversation produces a useful note.
This article follows the ChatCrystal provider registry at 7642768. It gives no measured cross-model ranking or fixed cost per note. Check model availability, prices, and account limits when using the service.
Identify the application’s call path
The current registry contains ollama, openai, orcarouter, anthropic, google, azure, and custom. Remote generation paths differ:
- OpenAI uses its SDK factory with endpoint, key, and model. Do not assume every generation request uses Chat Completions.
- Anthropic and Google use native factories. These versioned generation paths receive keys and models; they do not use the application’s
baseURLfield to override endpoints. - Azure uses the Azure factory. Match endpoint and model identifiers to the SDK and actual deployment; a resource homepage is not a universal complete API prefix.
- Custom uses the OpenAI factory’s default model call path. A gateway supporting only Chat Completions has not thereby established compatibility with that path or structured output.
- OrcaRouter uses a fixed gateway endpoint in the registry; this version does not override it through configured
baseURL.
These describe the application, not every vendor product. Anthropic and OrcaRouter entries have no embedding factory. Choose another supported configuration for retrieval; see separate model responsibilities.
Check endpoint and model together when switching
For example, choose the native OpenAI service with these nonsecret settings on the default local connection:
crystal config set llm.provider openai
crystal config set llm.baseURL https://api.openai.com/v1
Then supply a model ID available to the current account and a server-side key. The model command has this shape; replace the angle-bracket placeholder:
crystal config set llm.model <available-model-id>
The official OpenAI API reference describes authentication and server credentials; see the official quickstart for requests. Keep keys out of public articles, browser code, and repositories. If a desktop or frontend settings interface is available, configure it there. See the getting-started guide for npm CLI and interface artifact differences.
For Anthropic or Google, likewise update llm.provider, llm.model, and llm.apiKey using actual service identifiers. For Azure and Custom, additionally verify endpoint and SDK protocol. A generic model-name table cannot guarantee account access.
Inspect the configuration actually loaded
The configuration implementation takes environment defaults, then overlays saved model settings. Setting LLM_PROVIDER, LLM_MODEL, LLM_API_KEY, and LLM_BASE_URL for startup does not override an existing config.json.
crystal config get
crystal config test
Inspect actual provider, model, endpoint, and whether a key is set. A displayed address unused by a native factory does not establish that requests go there; interpret it alongside the registry. Hiding credentials behind a “set” indicator does not make configuration storage encrypted.
Separate short tests from application acceptance
Connection tests request short generation and a vector separately. Read both results. HTTP success or a successful command exit does not replace connected status. Diagnose authorization, endpoints, model access, and timeouts from actual errors.
Then select a real conversation outside the demo data. Inspect input length, title, summary, conclusions, and applicability conditions. A model returning short text can still fail on long input or the required structure. Summaries, relation discovery, and embeddings also incur separate usage; note totals alone cannot determine cost.
Explain switching effects and data flow
Changing only generation configuration usually does not require reimporting history, but existing notes are not automatically rewritten. Summarizing a conversation with an existing note can return its original ID. Active tasks can trigger a configuration confirmation prompt; read it before appending --confirm.
Remote generation receives material prepared for that task. Local embeddings do not keep summary and relation-discovery data on the machine. Check actual paths with the data-boundary guide, then use debugging-solution recovery to establish that the note is useful.