feat(ai): add packages/ai provider layer (Chunk #8)
Self-contained SSE-based provider layer for OpenAI-compatible endpoints (Ollama/llama.cpp/LM Studio/vLLM), Anthropic, Gemini, and OpenRouter. - budget.ts: re-export core token-budget engine (countTokens, allocateBudget, DEFAULT_BUDGET) - client.ts: streamCompletion/collectStream/complete with budget enforcement via enforceBudget + measureBudget - discover.ts: auto-detect local providers by probing common /v1/models - adapters.ts: per-provider param mapping + streaming adapters + factory - thinking.ts: thinking/reasoning-param normalization per provider - http.ts: SSE parsing + 429 retry - errors.ts: BudgetExceededError 35 unit/integration tests pass; typecheck and lint clean.
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* `@pubscript/ai` — the AI provider layer for PubScript.
|
||||
*
|
||||
* A self-contained, SSE-based provider abstraction that talks to any
|
||||
* OpenAI-compatible endpoint with streaming, thinking/reasoning params, and
|
||||
* the token-budget engine from `packages/core`. See CHUNK#8.md.
|
||||
*
|
||||
* Public API:
|
||||
* - `streamCompletion`, `collectStream`, `complete` — the completion client.
|
||||
* - `measureBudget`, `enforceBudget` — budget helpers.
|
||||
* - `discoverLocalProviders` — local provider discovery.
|
||||
* - `getProvider` — resolve a provider config into an adapter.
|
||||
* - `normalizeThinking` — thinking-param mapping.
|
||||
* - Re-exports of the token budget engine from `packages/core`.
|
||||
* - All types and error classes.
|
||||
*/
|
||||
|
||||
// Completion client
|
||||
export {
|
||||
streamCompletion,
|
||||
collectStream,
|
||||
complete,
|
||||
measureBudget,
|
||||
enforceBudget,
|
||||
} from "./client.js";
|
||||
export type { MeasuredBudget, StreamResult } from "./client.js";
|
||||
|
||||
// Provider adapters + factory
|
||||
export { getProvider } from "./providers/adapters.js";
|
||||
|
||||
// Thinking-param mapping
|
||||
export { normalizeThinking, reasoningBudgetTokens } from "./thinking.js";
|
||||
|
||||
// Local provider discovery
|
||||
export {
|
||||
discoverLocalProviders,
|
||||
LOCAL_ENDPOINTS,
|
||||
} from "./discover.js";
|
||||
export type { DetectedModel, DetectedProvider } from "./discover.js";
|
||||
|
||||
// Token budget engine (re-exported from core)
|
||||
export {
|
||||
countTokens,
|
||||
allocateBudget,
|
||||
DEFAULT_BUDGET,
|
||||
} from "./budget.js";
|
||||
export type { Budget } from "./budget.js";
|
||||
|
||||
// Types
|
||||
export type {
|
||||
ProviderKind,
|
||||
ThinkingConfig,
|
||||
ThinkingEffort,
|
||||
ProviderConfig,
|
||||
ResolvedProvider,
|
||||
Message,
|
||||
CallOptions,
|
||||
CompletionUsage,
|
||||
StreamEventType,
|
||||
StreamChunk,
|
||||
CompleteResult,
|
||||
ProviderAdapter,
|
||||
} from "./providers/types.js";
|
||||
|
||||
// Errors
|
||||
export {
|
||||
ProviderError,
|
||||
ProviderAuthError,
|
||||
ProviderRateLimitError,
|
||||
BudgetExceededError,
|
||||
UnknownProviderError,
|
||||
} from "./errors.js";
|
||||
Reference in New Issue
Block a user