feat: add LLM config module for OpenRouter API settings

Reads API key and model from environment variables. LLM is disabled by
default and auto-enables when OPENROUTER_API_KEY is set.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
root
2026-03-08 16:15:10 +00:00
parent 4d6ca21bda
commit 98ec288caf
2 changed files with 67 additions and 0 deletions
@@ -0,0 +1,45 @@
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { getLlmConfig } from '../llmConfig.js';
describe('llmConfig', () => {
const originalEnv = process.env;
beforeEach(() => {
process.env = { ...originalEnv };
});
afterEach(() => {
process.env = originalEnv;
});
it('returns default config values', () => {
const config = getLlmConfig();
expect(config.model).toBe('arcee-ai/trinity-large-preview:free');
expect(config.maxTokens).toBe(200);
expect(config.temperature).toBe(0.8);
expect(config.requestsPerMinute).toBe(10);
expect(config.timeoutMs).toBe(15000);
expect(config.enabled).toBe(false);
});
it('reads API key from environment', () => {
process.env.OPENROUTER_API_KEY = 'test-key-123';
const config = getLlmConfig();
expect(config.apiKey).toBe('test-key-123');
expect(config.enabled).toBe(true);
});
it('is disabled when no API key is set', () => {
delete process.env.OPENROUTER_API_KEY;
const config = getLlmConfig();
expect(config.apiKey).toBe('');
expect(config.enabled).toBe(false);
});
it('allows model override via environment', () => {
process.env.OPENROUTER_API_KEY = 'key';
process.env.LLM_MODEL = 'custom/model:free';
const config = getLlmConfig();
expect(config.model).toBe('custom/model:free');
});
});
+22
View File
@@ -0,0 +1,22 @@
export interface LlmConfig {
apiKey: string;
model: string;
maxTokens: number;
temperature: number;
requestsPerMinute: number;
timeoutMs: number;
enabled: boolean;
}
export function getLlmConfig(): LlmConfig {
const apiKey = process.env.OPENROUTER_API_KEY ?? '';
return {
apiKey,
model: process.env.LLM_MODEL ?? 'arcee-ai/trinity-large-preview:free',
maxTokens: 200,
temperature: 0.8,
requestsPerMinute: 10,
timeoutMs: 15000,
enabled: apiKey.length > 0,
};
}