mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-02 05:12:11 +03:00
Merge pull request #43 from diegosouzapw/feature/release-0.5.0
chore: release v0.5.0
This commit is contained in:
52
CHANGELOG.md
52
CHANGELOG.md
@@ -8,32 +8,60 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
---
|
||||
|
||||
## [0.5.0] — 2026-02-15
|
||||
|
||||
Dashboard refinements, LLM evaluation framework, combo strategies expansion, and UI/UX polish.
|
||||
|
||||
### Added
|
||||
|
||||
#### Dashboard & UI
|
||||
|
||||
- **Shared UI Component Library** — Refactored dashboard with reusable component architecture
|
||||
- **ModelAvailabilityBadge** — New component showing model availability status per provider
|
||||
- **Landing Page Retheme** — Visual refresh with updated color palette and modern aesthetic
|
||||
- **Providers Overview Modal** — Click provider cards to view available models with copy-to-clipboard
|
||||
|
||||
#### Combo Strategies
|
||||
|
||||
- **Random Strategy** — Random model selection for even distribution
|
||||
- **Least-Used Strategy** — Routes to the least recently used model using combo metrics
|
||||
- **Cost-Optimized Strategy** — Leverages pricing infrastructure to route to cheapest available model
|
||||
|
||||
#### LLM Evaluations
|
||||
|
||||
- **Golden Set Testing** — Built-in evaluation framework with 10 test cases
|
||||
- **API Key Integration** — EvalsTab now makes real LLM calls through the proxy endpoint
|
||||
- **Provider Alias Filtering** — Enhanced model filtering with provider-aware aliases
|
||||
- **4 Match Strategies** — exact, contains, regex, and custom JS function evaluation
|
||||
|
||||
#### Phase 5 — Foundation & Security
|
||||
|
||||
- **Domain State Persistence** — SQLite-backed persistence for 4 domain modules (fallback chains, budgets, cost history, lockout state, circuit breakers) via `domainState.js` with 5 new tables in `core.js`
|
||||
- **Write-Through Cache** — `fallbackPolicy.js`, `costRules.js`, `lockoutPolicy.js`, and `circuitBreaker.js` now use in-memory Map + SQLite write-through for state survival across restarts
|
||||
- **Race Condition Fix** — `route.js` `ensureInitialized()` replaced boolean flag with Promise-based singleton to prevent parallel initialization
|
||||
- **Domain State Persistence** — SQLite-backed persistence for 4 domain modules via `domainState.js`
|
||||
- **Write-Through Cache** — In-memory Map + SQLite write-through for state survival across restarts
|
||||
- **Race Condition Fix** — `route.js` `ensureInitialized()` with Promise-based singleton
|
||||
|
||||
#### Phase 6 — Architecture Refactoring
|
||||
|
||||
- **OAuth Provider Extraction** — Monolithic `providers.js` (1051 → 144 lines) split into 12 individual modules under `src/lib/oauth/providers/` with a thin wrapper + registry index
|
||||
- **Policy Engine** — Centralized request evaluation against lockout, budget, and fallback policies (`policyEngine.js`) with `evaluateRequest()` and `evaluateFirstAllowed()` entry points
|
||||
- **Deterministic Round-Robin** — `comboResolver.js` now uses persistent `Map<string, number>` counter per combo instead of time-based modulo
|
||||
- **Telemetry Window Accuracy** — `requestTelemetry.js` now adds `recordedAt` timestamps to history entries and accurately filters by `windowMs`
|
||||
- **OAuth Provider Extraction** — `providers.js` (1051 → 144 lines) split into 12 modules
|
||||
- **Policy Engine** — Centralized request evaluation (`policyEngine.js`)
|
||||
- **Deterministic Round-Robin** — Persistent counter per combo
|
||||
- **Telemetry Window Accuracy** — `recordedAt` timestamps with accurate `windowMs` filtering
|
||||
|
||||
#### Tests
|
||||
|
||||
- 22 new tests: `domain-persistence.test.mjs` (16 tests), `policy-engine.test.mjs` (6 tests)
|
||||
- Test isolation fix for `observability-fase04.test.mjs` — unique CircuitBreaker names prevent DB state bleed
|
||||
- 22 new tests: `domain-persistence.test.mjs` (16), `policy-engine.test.mjs` (6)
|
||||
- Total: **295+ tests passing** (up from 273 in v0.3.0)
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Proxy decoupling** — `proxy.js` no longer self-fetches `/api/settings`; imports `getSettings()` directly from `localDb`
|
||||
- **Default password** — `.env.example` `INITIAL_PASSWORD` changed from `123456` → `CHANGEME`
|
||||
- **Server init error handling** — `server-init.js` now uses `console.error` + `process.exit(1)` instead of silent `console.log`
|
||||
- **Proxy decoupling** — `proxy.js` imports `getSettings()` directly from `localDb`
|
||||
- **Default password** — `.env.example` `INITIAL_PASSWORD` changed to `CHANGEME`
|
||||
- **Server init error handling** — `server-init.js` uses `console.error` + `process.exit(1)`
|
||||
- **Chat completions TypeError** — Fixed `ensureInitialized` error in API route
|
||||
- **Evals Tab** — Fixed case count display and added real LLM call integration
|
||||
- **Routing Tab** — Removed deprecated random strategy option
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -255,7 +255,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.
|
||||
|
||||
```bash
|
||||
# Create a release — npm publish happens automatically
|
||||
gh release create v0.4.0 --title "v0.4.0" --generate-notes
|
||||
gh release create v0.5.0 --title "v0.5.0" --generate-notes
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: OmniRoute API
|
||||
version: 0.4.0
|
||||
version: 0.5.0
|
||||
description: |
|
||||
OmniRoute is a local-first AI API proxy router. It provides an OpenAI-compatible
|
||||
endpoint that routes requests to multiple AI providers with load balancing,
|
||||
|
||||
7
package-lock.json
generated
7
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "omniroute",
|
||||
"version": "0.4.0",
|
||||
"version": "0.5.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "omniroute",
|
||||
"version": "0.4.0",
|
||||
"version": "0.5.0",
|
||||
"license": "MIT",
|
||||
"workspaces": [
|
||||
"open-sse"
|
||||
@@ -39,7 +39,8 @@
|
||||
"zustand": "^5.0.10"
|
||||
},
|
||||
"bin": {
|
||||
"omniroute": "bin/omniroute.mjs"
|
||||
"omniroute": "bin/omniroute.mjs",
|
||||
"omniroute-reset-password": "bin/reset-password.mjs"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.58.2",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "omniroute",
|
||||
"version": "0.4.0",
|
||||
"version": "0.5.0",
|
||||
"description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.",
|
||||
"type": "module",
|
||||
"bin": {
|
||||
|
||||
Reference in New Issue
Block a user