Repository navigation
0.7.0
OpenGateLLM 0.7.0 continues the clean-architecture migration of self-service (/v1/me, /v1/keys, /v1/usage) and admin organization APIs. Several HTTP contracts change with that work (renamed self-service paths with deprecated aliases, full-replacement admin PATCH, richer key and organization responses). The release also adds Grafana dashboard templates, flushes Redis on API startup, and releases pooled Postgres connections during model inference.
Breaking changes
- Rename
/v1/me/infoto/v1/meand/v1/me/keysto/v1/keys. Deprecated aliases remain on the old paths (#1033). - Move
GET /v1/me/usagetoGET /v1/usage(deprecated alias kept). List items now use"object": "usage"(was"me.usage"), the wrapper addstotal/offset/limit, and unusedmethod/statusfields are dropped (#1045). - Admin user payloads rename
role→role_idandorganization→organization_id. Clients using the old names get422(#1010). - Self-service key list and create now match admin keys: paginated
{object, total, offset, limit, data},sort_by/sort_order, secret fieldvalueinstead oftoken(#1020, #1021). DELETE /v1/admin/keys/{key_id}andDELETE /v1/keys/{key_id}return 200 with akeyobject instead of 204. The leftoverDELETE /v1/admin/tokens/{token}route is removed. A deprecatedDELETE /v1/me/keys/{key_id}alias is kept (#1022, #1039).- Admin
PATCHon users, roles, routers, providers, and organizations is a full replacement: omitting a required field is422;nullon a nullable field clears it; empty lists clearpermissions/limits/aliases. Providertimeouton update is bounded1..3600.PATCH /v1/meis unchanged (#1053, #1080). POST /v1/admin/organizations201body is a fullOrganizationResponseinstead of{id}(#1041).DELETE /v1/admin/organizations/{organization_id}andPATCH /v1/admin/organizations/{organization_id}return 200 with the organization instead of 204 (#1050, #1080).GET /v1/admin/organizationssort params renameorder_by/order_direction→sort_by/sort_order; the list wrapper addstotal/offset/limit(#1057).- Admin
RouterResponsedropsvector_sizeandmax_context_length; they now live onProviderResponse.GET /v1/modelsis unchanged (#1052).
Features
- Flush the Redis logical DB once per process on gunicorn startup (rate-limit keys, inflight gauges, latency series), instead of only resetting
LIMITS:*(#952). - Add importable Grafana dashboard templates for inference (traffic, latency, TTFT, tokens, output speed) and HTTP traffic (
grafana/inference.json,grafana/traffic.json) (#903).
Refactoring
- Introduce
AutocommitSessionso model-forward endpoints release the pooled Postgres connection before the provider call (#1005). - Migrate
POST /v1/audio/transcriptionsto clean architecture (#1008). - Migrate self-service me / keys / usage endpoints to clean architecture (#1020, #1021, #1023, #1024, #1038, #1039, #1045).
- Migrate
DELETE /v1/admin/keysto clean architecture (#1022). - Complete admin organizations CRUD on clean architecture (POST, GET, PATCH, DELETE) (#1041, #1050, #1057, #1080).
- Load
/v1/modelsthroughModelQuery/ModelViewand drop capability fields from the Router aggregate (#1052). - Standardize datetime handling: Unix seconds (
int) at the HTTP boundary, timezone-aware UTCdatetimein domain and Postgres. The JSON contract is unchanged (#1062). - Delete a router’s providers in a single query (#1067).
Bug fix
- Return
409(not500) when deleting an organization or role that still has users, including the FK race. The error detail no longer includes a user count (#1068). - Stop logging the unused duplicate
normalized_latencymetric and drop it from theMetricenum (#1056).
Playground
- Admin edit dialogs send a full PATCH body and can clear nullable fields. Fixes the provider router dropdown (
router_id), userexpires(Unix timestamp), and role limit create/delete payloads (#1053). - Display timestamps in the viewer’s local timezone via a shared helper (#1062).
- Show
vector_sizeandmax_context_lengthon the provider page instead of the router page (#1052).
Full Changelog: 0.6.0...0.7.0
- refacto(users): rename residual ID fields to *_id in clean-architecture code by @bakr-a in #1010
- chore(doc): update generated documentation and release versions by @github-actions[bot] in #1009
- refacto(audio): refacto post /v1/audio/transcriptions endpoint toward clean architecture by @leoguillaume in #1008
- refacto(postgres): release pooled connection during provider calls by @benjaminpilia in #1005
- chore: add AGENTS.md by @leoguillaume in #1017
- refacto: rename GetModelUseCase and GetRoleUseCase to GetOne* by @leoguillaume in #1018
- refacto(endpoints): inject get_authenticated_user when only the user is needed by @leoguillaume in #1019
- refacto(keys): migrate DELETE /v1/admin/keys to clean architecture by @leoguillaume in #1022
- ci: run coverage and e2e only on ready PRs by @leoguillaume in #1025
- refacto(me): refacto GET /v1/me/keys endpoint toward clean architecture by @leoguillaume in #1020
- refacto(me): POST /v1/me/keys endpoint toward clean architecture by @leoguillaume in #1021
- refacto(me): migrate GET /v1/me/info toward clean architecture by @leoguillaume in #1023
- feat(redis): implement redis keys reset by @tibo-pdn in #952
- feat(me): rename /v1/me/info to /v1/me and /v1/me/keys to /v1/keys by @leoguillaume in #1033
- refacto(me): refacto PATCH /v1/me/info endpoint toward clean architecture by @leoguillaume in #1024
- refacto(me): migrate GET /v1/keys/{key_id} toward clean architecture by @leoguillaume in #1038
- refacto(me): migrate DELETE /v1/me/keys toward clean architecture by @leoguillaume in #1039
- feat(grafana): add inference and traffic grafana templates for OGL by @tibo-pdn in #903
- refacto(organizations): move post /v1/admin/organizations to clean architecture by @bakr-a in #1041
- chore(tests): review tests run execution in CI/CD by @leoguillaume in #1043
- refacto(usage): migrate GET /v1/me/usage to /v1/usage toward clean architecture by @leoguillaume in #1045
- refacto(organizations) - migrate delete /v1/admin/organizations endpo… by @leoguillaume in #1050
- fix(doc): patch deploy issue by @leoguillaume in #1054
- chore(doc): update generated documentation and release versions by @github-actions[bot] in #1055
- feat(metric): remove normalized_latency reference (useless) - fix str, Enum usage by @tibo-pdn in #1056
- refacto(router): move vector_size and max_context_length off Router onto ModelQuery (#886) by @leoguillaume in #1052
- refacto(organizations): migrate GET /v1/admin/organizations to clean architecture by @bakr-a in #1057
- feat(datetime): standardize datetime handling across API, domain and playground by @tibo-pdn in #1062
- feat(admin): require all fields on migrated PATCH update endpoints by @tibo-pdn in #1053
- refacto(postgres): delete providers in one query and test delete_all_routers by @leoguillaume in #1067
- refacto(pydantic): adopt pydantic v3 annotated syntax in all basemodel classes by @bakr-a in #1070
- fix(admin): update prod private_host by @moscaale in #1075
- fix(admin): return 409 on delete org/role FK race without user count (#1048) by @leoguillaume in #1068
- chore: update AGENTS.md by @benjaminpilia in #1079
- refacto(organizations): migrate the PATCH endpoint to clean architecture by @leoguillaume in #1080
- refacto(postgres): use row_to* as return type for the whole db layer by @bakr-a in #1072
- fix(ci): bump oauth2-proxy and refresh expired Trivy ignores by @leoguillaume in #1078
Full Changelog: 0.6.0...0.7.0