Summary
Where AI model lock-in actually comes from
Lock-in is not a single decision. It accumulates across three layers, and each layer makes the next one harder to change.
Layer 1: Credential coupling
If API keys are embedded directly in workflow logic, in individual agent configurations, or scattered across your tooling, rotating a key or switching a provider requires finding and updating every reference. Teams that build this way discover the scope of the problem only when they need to change something urgently: a key is compromised, a provider raises prices, or a better model becomes available. The fix is centralization: one credential record per provider, referenced by all agents that use it, so a single edit propagates everywhere.
Layer 2: Workflow logic that assumes a specific model
Prompts written for one model's behavior, context window assumptions sized to one model's limits, and output parsing logic tuned to one model's response format all create implicit dependencies on that model. When you swap the model, the workflow breaks in ways that are not always obvious until you test. The fix is to design prompts and output handling to be as model-agnostic as possible, and to test against alternative models before you need to switch under pressure.
Layer 3: Platform coupling
The deepest form of lock-in is when the platform itself controls which models you can access, proxies your API calls so you cannot see the underlying provider relationship, or makes it technically difficult to point your workflows at a different service. At this layer, switching is not just a configuration change: it may require migrating your entire workflow library to a different platform. This is the layer that is hardest to escape once you are in it, and the one that is easiest to avoid by choosing the right platform architecture at the start.
How DAVE's provider model separates credentials from workflow logic
DAVE addresses all three lock-in layers through a single architectural decision: provider records are centralized, named configurations that live at Admin, then API Management, then Providers, completely separate from the workflow graphs and agent definitions that reference them.
Each provider record stores four things: the service type, your API key, the base URI for the service, and a catalog of the models you want to make available. Agents reference a provider and a model from that provider's catalog. Workflow nodes reference agents. The chain is: workflow node references agent, agent references provider, provider holds the credential. The credential is never embedded in the workflow or the agent.
This separation means:
- Rotating a key means editing one provider record. Every agent that references that provider picks up the new key on its next invocation. No workflow graphs change. No agent definitions change.
- Switching a model means editing the agent's model selection to point to a different model in the same provider's catalog, or to a model in a different provider's catalog. The workflow graph does not change.
- Switching a provider entirely means creating a new provider record, updating the agent to reference it, and verifying the workflow still behaves as expected with the new model. The workflow graph structure is unchanged.
The provider record is the only place where the credential lives. It is stored encrypted using AES-256-GCM authenticated encryption and is never returned through the API once stored. The key field is masked by default in the Admin UI, with an eye icon to reveal it temporarily. Keys are transmitted only over HTTPS and are never logged in plain text.
Seven provider types: what each one enables
DAVE supports seven provider types. The breadth of that list is itself a lock-in mitigation: you are not limited to the providers the platform has chosen to support commercially. You connect to any service that fits one of these types using your own API key.
| Provider Type | Default Base URI | Model Fetch |
|---|---|---|
| OpenAI | https://api.openai.com/v1 | Yes |
| Anthropic | https://api.anthropic.com/v1 | Yes |
| Azure OpenAI | Your Azure endpoint | Yes |
| Google AI | https://generativelanguage.googleapis.com/v1beta | Yes |
| OpenAI-Compatible | Your endpoint | Yes |
| Local (Ollama) | http://localhost:11434/v1 | Yes |
| Custom | Your endpoint | No (JSON catalog) |
A few of these deserve specific attention for lock-in avoidance:
OpenAI-Compatible
The OpenAI-Compatible type lets you point DAVE at any service that implements the OpenAI API contract, regardless of who runs it. A growing number of providers, open-source inference servers, and cloud platforms expose an OpenAI-compatible endpoint. This means the set of services you can use with DAVE is not limited to the seven named types: it includes any service reachable via a compatible endpoint.
Local (Ollama)
The Local (Ollama) type connects DAVE to an Ollama instance, which can run open-weight models. This is model hosting, not platform hosting: DAVE itself is fully managed and hosted by voolama LLC, but your agents can call a model running on hardware you control. For teams that want to run certain workloads on open-weight models without sending data to a commercial API, this is the path.
Custom
The Custom type accepts any endpoint and a manually supplied model catalog in JSON format. It does not support automatic model fetch, but it imposes no constraints on what service sits behind the endpoint. This is the option for services that do not fit any other category.
Switching providers in practice: what changes and what does not
The practical test of a lock-in-resistant architecture is how much work a provider switch actually requires. In DAVE, the answer depends on which layer you are changing.
Switching the model within the same provider
Edit the agent configuration and select a different model from the provider's catalog. If the new model is not yet in the catalog, edit the provider record at Admin, then API Management, then Providers, click Fetch Models, and add it. Then update the agent. The workflow graph is unchanged. Test the agent's output with the new model before promoting the change to production workflows.
Switching to a different provider of the same type
Create a new provider record with the new service's API key and base URI. Fetch or manually configure its model catalog. Update the agent to reference the new provider and select the appropriate model. The workflow graph is unchanged. The old provider record can remain in place until you are confident the new one is working correctly, then delete it.
Switching to a different provider type
The process is the same as above. Create the new provider record with the correct type, for example switching from OpenAI to Anthropic. The provider type determines the default base URI and the model fetch behavior. Update the agent. The workflow graph is unchanged. The main work is validating that the agent's prompts and output handling work correctly with the new model's behavior, which is a testing task, not a migration task.
What does not change in any of these scenarios
The workflow graph structure, the node connections, the routing logic, the human review configuration, and the API call definitions are all independent of the provider. They reference agents, not providers directly. Switching a provider is a configuration change at the agent and provider layers, not a rebuild of the workflow.
Before deleting a provider record, verify that no active agents still reference it. An agent that references a deleted provider will fail on its next invocation. The fix is to edit the agent and point it to a valid provider before the next workflow run.
Who controls provider configuration and why that matters for lock-in
Lock-in risk is not only technical. It is also organizational. If provider configuration is controlled by one person and that knowledge is not documented or accessible to others, the organization is locked in to that person's decisions even if the platform architecture is flexible.
DAVE addresses this through role-based access. The Providers page at Admin, then API Management, then Providers is restricted to the Admin role. DAVE ships with six default tenant roles: Admin, Create, Curate, Use, Reporting, and Financial. All roles are editable by your administrator.
| Action | Admin | Create | Curate | Use | Reporting |
|---|---|---|---|---|---|
| View provider list | Yes | No | No | No | No |
| Create providers | Yes | No | No | No | No |
| Edit providers | Yes | No | No | No | No |
| Delete providers | Yes | No | No | No | No |
| Fetch models | Yes | No | No | No | No |
Restricting provider management to the Admin role means that credential changes, provider additions, and model catalog updates are controlled operations with a clear owner. The people building workflows (Curate role) and the people running them (Use role) cannot change the underlying provider configuration.
For lock-in avoidance, the governance recommendation is: assign the Admin role to at least two people, document every provider record with its purpose and key rotation schedule, and review the provider list periodically to confirm it reflects your current AI strategy. A provider record that no active agent references is dead configuration: delete it to keep the list accurate and the surface area small.