Skip to content

Custom Model Provider

Objective: connect any model backend by implementing HarnessModelProvider.

import type {
HarnessModelProvider,
ModelInfo,
ModelProviderInfo,
ModelProviderRunInput,
ModelProviderRunResult,
} from "@harness-kernel/core/runner/model-provider";
export class LocalProvider implements HarnessModelProvider {
namespace = "local";
id = "local-dev";
getInfo(): ModelProviderInfo {
return { id: this.id, label: "Local Dev Provider", provider: this.namespace };
}
getModels(): ModelInfo[] {
return [{ id: "small", label: "Small local model" }];
}
supportsRole(roleId: string): boolean {
return ["system", "user", "assistant", "tool"].includes(roleId);
}
async run(input: ModelProviderRunInput): Promise<ModelProviderRunResult> {
const prepared = await input.prepareContext();
const last = prepared.messages.at(-1);
return {
content: `local(${input.model}): ${String(last?.content ?? "")}`,
usage: { messageCount: prepared.messages.length },
};
}
}

Register it:

const store = await createHarnessSessionStore({
agent: { definition: agent },
providers: [new LocalProvider()],
defaultModel: "local/small",
});

Boundary note: a provider is runtime infrastructure. A mode can request model = "local/small", but the host still registers the provider.

API: Model Providers.