mirror of
https://github.com/koala73/worldmonitor.git
synced 2026-04-25 17:14:57 +02:00
Server-side: extract shared CORS, validation, caching, prompt building, and response shaping into api/_summarize-handler.js factory. Each endpoint (Groq, OpenRouter, Ollama) becomes a thin wrapper calling createSummarizeHandler() with a provider config: credentials, API URL, model, headers, and provider label. Client-side: replace three near-identical tryOllama/tryGroq/tryOpenRouter functions with a single tryApiProvider() driven by an API_PROVIDERS config array. Add runApiChain() helper that loops the chain with progress callbacks. Simplify translateText() from three copy-pasted blocks to a single loop over the same provider array. - groq-summarize.js: 297 → 30 lines - openrouter-summarize.js: 295 → 33 lines - ollama-summarize.js: 289 → 34 lines - summarization.ts: 336 → 239 lines - New _summarize-handler.js: 315 lines (shared) - Net: -566 lines of duplication removed Adding a new LLM provider now requires only a provider config object in the endpoint file + one entry in the API_PROVIDERS array. Tests: 13 new tests for the shared factory (cache key, dedup, handler creation, fallback, error casing, HTTP methods). All 42 existing tests pass unchanged. https://claude.ai/code/session_01AGg9fG6LZ8Y6XhvLszdfeY
34 lines
925 B
JavaScript
34 lines
925 B
JavaScript
/**
|
|
* OpenRouter API Summarization Endpoint with Redis Caching
|
|
* Fallback when Groq is rate-limited
|
|
* Uses OpenRouter auto-routed free model
|
|
* Free tier: 50 requests/day (20/min)
|
|
* Server-side Redis cache for cross-user deduplication
|
|
*/
|
|
|
|
import { createSummarizeHandler } from './_summarize-handler.js';
|
|
|
|
export const config = {
|
|
runtime: 'edge',
|
|
};
|
|
|
|
export default createSummarizeHandler({
|
|
name: 'openrouter',
|
|
logTag: '[OpenRouter]',
|
|
skipReason: 'OPENROUTER_API_KEY not configured',
|
|
getCredentials() {
|
|
const apiKey = process.env.OPENROUTER_API_KEY;
|
|
if (!apiKey) return null;
|
|
return {
|
|
apiUrl: 'https://openrouter.ai/api/v1/chat/completions',
|
|
model: 'openrouter/free',
|
|
headers: {
|
|
'Authorization': `Bearer ${apiKey}`,
|
|
'Content-Type': 'application/json',
|
|
'HTTP-Referer': 'https://worldmonitor.app',
|
|
'X-Title': 'WorldMonitor',
|
|
},
|
|
};
|
|
},
|
|
});
|