Unified AI runtime for ElsiKora packages and CLIs.
- Single adapter for generation across providers.
profilemode for module-based runtime configuration.- Interactive configuration wizard for first-time setup.
- Typed profile readiness contract (
inspectProfile,ensureProfile). - Fail-fast typed errors for missing or invalid profile state.
npm install @elsikora/ai-coreCreate .elsikora/ai-core.config.js in your project:
export default {
modules: {
"your-module-id": {
model: "gpt-4o",
provider: "openai",
reasoning: {
effort: "medium",
},
responseFormat: {
isStrict: true,
name: "commit_message",
schema: {
type: "object",
properties: {
message: { type: "string" },
},
required: ["message"],
},
type: "json_schema",
},
retries: 3,
shouldRepromptCredentialOnAuthenticationFailure: true,
shouldUseParallelToolCalls: true,
validationRetries: 3,
},
},
};Credentials are resolved from environment variables by provider (for example OPENAI_API_KEY).
Profiles and direct generation requests accept provider-neutral controls such as maxTokens, temperature, topP, topK, seed, stopSequences, timeoutMs, reasoning, responseFormat, tools, toolChoice, shouldUseParallelToolCalls, and shouldRepromptCredentialOnAuthenticationFailure.
Set shouldRepromptCredentialOnAuthenticationFailure: true when an interactive CLI should ask for a replacement credential if the current runtime credential, including one resolved from the environment, is rejected by the provider.
Provider-specific options live under providerOptions and are mapped only inside infrastructure adapters. Examples include OpenAI apiMode, serviceTier, textVerbosity, and shouldStore; Anthropic speed, serviceTier, and thinking; Google thinkingConfig; AWS Bedrock guardrail and performance options; Cerebras reasoning/logprob options; Ollama reasoning controls; and Vercel AI Gateway provider options.
import { AiCoreAdapter, EGenerateMode } from "@elsikora/ai-core";
const adapter = AiCoreAdapter.create();
const inspection = await adapter.inspectProfile("your-module-id");
const profile = await adapter.ensureProfile("your-module-id");
const result = await adapter.generate({
mode: EGenerateMode.PROFILE,
moduleId: "your-module-id",
prompt: "Generate a concise commit message",
});inspectProfile(moduleId)never prompts and returns a typed status:readymissing_profilemissing_credentialinvalid_profile
ensureProfile(moduleId)applies canonical orchestration:- missing profile + TTY -> run full interactive configure
- missing credential + TTY -> prompt credential only
- non-TTY missing state -> throw typed
ProfileResolutionError
ProfileResolutionError exposes:
code:missing_profile|missing_credential|invalid_profilemoduleIdprovider(when known)environmentVariableName(when known)
npm run validate:fastnpm run validate:prnpm run validate:heavy