@dofe/models-sdk
v0.1.13
Published
Typed service-to-service SDK for models.dofe.ai internal APIs.
Maintainers
Readme
@dofe/models-sdk
Typed service-to-service SDK for models.dofe.ai internal APIs.
Install
pnpm add @dofe/models-sdkNode Signed Client
Use the Node-only entry when the caller can access the internal API secret.
import { createSignedModelsInternalDataClient } from '@dofe/models-sdk/internal-node';
const models = createSignedModelsInternalDataClient({
baseUrl: process.env.MODELS_INTERNAL_BASE_URL!,
internalApiSecret: process.env.MODELS_INTERNAL_API_SECRET!,
serviceName: 'agents.dofe.ai',
timeoutMs: 5000,
});
const health = await models.health.check();
const routing = await models.routing.decide({
body: {
model: 'gpt-4o',
strategy: 'balanced',
},
});Runtime-Neutral Client
Use the runtime-neutral entry when the caller provides authorization.
import { createModelsInternalDataClient } from '@dofe/models-sdk/internal';
const abortController = new AbortController();
const models = createModelsInternalDataClient({
baseUrl: 'https://models.internal.example.com',
serviceName: 'my-service',
getAuthorization: () => 'Bearer timestamp:signature',
signal: abortController.signal,
});
const modelsPage = await models.models.list({ query: { limit: 20 } });Raw Client
Use the raw client when the caller needs access to HTTP status, headers, or the original { code, msg, data } envelope.
import { createSignedModelsInternalClient } from '@dofe/models-sdk/internal-node';
import { ModelsInternalApiError, unwrapModelsInternalResponse } from '@dofe/models-sdk/response';
const models = createSignedModelsInternalClient({
baseUrl: process.env.MODELS_INTERNAL_BASE_URL!,
internalApiSecret: process.env.MODELS_INTERNAL_API_SECRET!,
serviceName: 'agents.dofe.ai',
});
const response = await models.health.check();
const health = unwrapModelsInternalResponse(response, 'models.health.check');ModelsInternalApiError is serializable for service logs:
try {
await models.routing.decide({ body: { model: 'gpt-4o' } });
} catch (error) {
if (error instanceof ModelsInternalApiError) {
logger.warn('models routing failed', error.toJSON());
}
}Preflight
import { runModelsInternalPreflight } from '@dofe/models-sdk/preflight';
await runModelsInternalPreflight({
baseUrl: process.env.MODELS_INTERNAL_BASE_URL!,
internalApiSecret: process.env.MODELS_INTERNAL_API_SECRET!,
serviceName: 'agents.dofe.ai',
});Exports
| Entry | Purpose |
| --------------------------------- | ---------------------------------------------------------- |
| @dofe/models-sdk | Runtime-neutral client, types, preflight, response helpers |
| @dofe/models-sdk/internal | Runtime-neutral typed raw/data client |
| @dofe/models-sdk/internal-node | Node HMAC signed raw/data client |
| @dofe/models-sdk/internal-types | Consumer-facing internal API types |
| @dofe/models-sdk/preflight | Health, availability, routing preflight |
| @dofe/models-sdk/response | Envelope unwrap and error class |
The root entry intentionally does not export createSignedModelsInternalClient(), so browser or edge consumers do not accidentally pull in Node crypto.
Security Boundary
This SDK is a client package only. It must not include database credentials, database runtime code, Docker database lifecycle code, or provider key logging. The package security check scans source and build output before publish.
