learning_ai_clock/backend/src/lib/config.ts
saravanakumardb1 229ce4f00f feat(backend): wire Ollama LLM for context messages (TODO-005)
Dual-path LLM enrichment for AI context prep messages:
1. extraction-service (if EXTRACTION_SERVICE_URL set)
2. Ollama direct (if OLLAMA_URL set) — non-streaming /api/generate
3. Keyword rules fallback
4. Generic fallback

New env vars: OLLAMA_URL, OLLAMA_MODEL (default: gemma3:4b)
Both LLM paths use 5s timeout and null-return-on-error pattern.
Feature-gated behind ai_context_messages.enabled flag.
2026-04-13 17:00:24 -07:00

23 lines
1.1 KiB
TypeScript

import { z } from 'zod';
import { baseBackendConfigSchema } from '@bytelyst/backend-config';
const envSchema = baseBackendConfigSchema.extend({
PORT: baseBackendConfigSchema.shape.PORT.default(4011),
SERVICE_NAME: baseBackendConfigSchema.shape.SERVICE_NAME.default('chronomind-backend'),
DB_PROVIDER: baseBackendConfigSchema.shape.DB_PROVIDER.default('memory'),
JWT_SECRET: z.string().default('dev-secret-do-not-use-in-prod'),
PLATFORM_SERVICE_URL: z.string().default('http://localhost:4003'),
TELEMETRY_ENABLED: z.coerce.boolean().default(false),
FEATURE_FLAGS_ENABLED: z.coerce.boolean().default(false),
FIELD_ENCRYPT_ENABLED: z.coerce.boolean().default(true),
FIELD_ENCRYPT_KEY_PROVIDER: z.enum(['memory', 'env', 'akv']).default('memory'),
FIELD_ENCRYPT_KEY: z.string().optional(),
FIELD_ENCRYPT_MEK_NAME: z.string().default('chronomind-mek'),
AZURE_KEYVAULT_URL: z.string().optional(),
EXTRACTION_SERVICE_URL: z.string().optional(),
OLLAMA_URL: z.string().optional(),
OLLAMA_MODEL: z.string().default('gemma3:4b'),
});
export const config = envSchema.parse(process.env);