mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-27 07:16:19 +09:00
refactor: unify providers and models tables
- Rename `llm_providers` → `providers`, `llm_provider_oauth_tokens` → `provider_oauth_tokens` - Remove `tts_providers` and `tts_models` tables; speech models now live in the unified `models` table with `type = 'speech'` - Replace top-level `api_key`/`base_url` columns with a JSONB `config` field on `providers` - Rename `llm_provider_id` → `provider_id` across all references - Add `edge-speech` client type and `conf/providers/edge.yaml` default provider - Create new read-only speech endpoints (`/speech-providers`, `/speech-models`) backed by filtered views of the unified tables - Remove old TTS CRUD handlers; simplify speech page to read-only + test - Update registry loader to skip malformed YAML files instead of failing entirely - Fix YAML quoting for model names containing colons in openrouter.yaml - Regenerate sqlc, swagger, and TypeScript SDK
This commit is contained in:
+69
-32
@@ -1,52 +1,50 @@
|
||||
-- name: CreateLlmProvider :one
|
||||
INSERT INTO llm_providers (name, base_url, api_key, client_type, icon, enable, metadata)
|
||||
-- name: CreateProvider :one
|
||||
INSERT INTO providers (name, client_type, icon, enable, config, metadata)
|
||||
VALUES (
|
||||
sqlc.arg(name),
|
||||
sqlc.arg(base_url),
|
||||
sqlc.arg(api_key),
|
||||
sqlc.arg(client_type),
|
||||
sqlc.arg(icon),
|
||||
sqlc.arg(enable),
|
||||
sqlc.arg(config),
|
||||
sqlc.arg(metadata)
|
||||
)
|
||||
RETURNING *;
|
||||
|
||||
-- name: GetLlmProviderByID :one
|
||||
SELECT * FROM llm_providers WHERE id = sqlc.arg(id);
|
||||
-- name: GetProviderByID :one
|
||||
SELECT * FROM providers WHERE id = sqlc.arg(id);
|
||||
|
||||
-- name: GetLlmProviderByName :one
|
||||
SELECT * FROM llm_providers WHERE name = sqlc.arg(name);
|
||||
-- name: GetProviderByName :one
|
||||
SELECT * FROM providers WHERE name = sqlc.arg(name);
|
||||
|
||||
-- name: ListLlmProviders :many
|
||||
SELECT * FROM llm_providers
|
||||
-- name: ListProviders :many
|
||||
SELECT * FROM providers
|
||||
ORDER BY created_at DESC;
|
||||
|
||||
-- name: UpdateLlmProvider :one
|
||||
UPDATE llm_providers
|
||||
-- name: UpdateProvider :one
|
||||
UPDATE providers
|
||||
SET
|
||||
name = sqlc.arg(name),
|
||||
base_url = sqlc.arg(base_url),
|
||||
api_key = sqlc.arg(api_key),
|
||||
client_type = sqlc.arg(client_type),
|
||||
icon = sqlc.arg(icon),
|
||||
enable = sqlc.arg(enable),
|
||||
config = sqlc.arg(config),
|
||||
metadata = sqlc.arg(metadata),
|
||||
updated_at = now()
|
||||
WHERE id = sqlc.arg(id)
|
||||
RETURNING *;
|
||||
|
||||
-- name: DeleteLlmProvider :exec
|
||||
DELETE FROM llm_providers WHERE id = sqlc.arg(id);
|
||||
-- name: DeleteProvider :exec
|
||||
DELETE FROM providers WHERE id = sqlc.arg(id);
|
||||
|
||||
-- name: CountLlmProviders :one
|
||||
SELECT COUNT(*) FROM llm_providers;
|
||||
-- name: CountProviders :one
|
||||
SELECT COUNT(*) FROM providers;
|
||||
|
||||
-- name: CreateModel :one
|
||||
INSERT INTO models (model_id, name, llm_provider_id, type, config)
|
||||
INSERT INTO models (model_id, name, provider_id, type, config)
|
||||
VALUES (
|
||||
sqlc.arg(model_id),
|
||||
sqlc.arg(name),
|
||||
sqlc.arg(llm_provider_id),
|
||||
sqlc.arg(provider_id),
|
||||
sqlc.arg(type),
|
||||
sqlc.arg(config)
|
||||
)
|
||||
@@ -74,19 +72,19 @@ ORDER BY created_at DESC;
|
||||
|
||||
-- name: ListModelsByProviderID :many
|
||||
SELECT * FROM models
|
||||
WHERE llm_provider_id = sqlc.arg(llm_provider_id)
|
||||
WHERE provider_id = sqlc.arg(provider_id)
|
||||
ORDER BY created_at DESC;
|
||||
|
||||
-- name: ListModelsByProviderIDAndType :many
|
||||
SELECT * FROM models
|
||||
WHERE llm_provider_id = sqlc.arg(llm_provider_id)
|
||||
WHERE provider_id = sqlc.arg(provider_id)
|
||||
AND type = sqlc.arg(type)
|
||||
ORDER BY created_at DESC;
|
||||
|
||||
-- name: ListModelsByProviderClientType :many
|
||||
SELECT m.*
|
||||
FROM models m
|
||||
JOIN llm_providers p ON m.llm_provider_id = p.id
|
||||
JOIN providers p ON m.provider_id = p.id
|
||||
WHERE p.client_type = sqlc.arg(client_type)
|
||||
ORDER BY m.created_at DESC;
|
||||
|
||||
@@ -95,7 +93,7 @@ UPDATE models
|
||||
SET
|
||||
model_id = sqlc.arg(model_id),
|
||||
name = sqlc.arg(name),
|
||||
llm_provider_id = sqlc.arg(llm_provider_id),
|
||||
provider_id = sqlc.arg(provider_id),
|
||||
type = sqlc.arg(type),
|
||||
config = sqlc.arg(config),
|
||||
updated_at = now()
|
||||
@@ -116,18 +114,23 @@ SELECT COUNT(*) FROM models WHERE type = sqlc.arg(type);
|
||||
|
||||
|
||||
-- name: UpsertRegistryProvider :one
|
||||
INSERT INTO llm_providers (name, base_url, api_key, client_type, icon, enable, metadata)
|
||||
VALUES (sqlc.arg(name), sqlc.arg(base_url), '', sqlc.arg(client_type), sqlc.arg(icon), false, '{}')
|
||||
INSERT INTO providers (name, client_type, icon, enable, config, metadata)
|
||||
VALUES (sqlc.arg(name), sqlc.arg(client_type), sqlc.arg(icon), false, sqlc.arg(config), '{}')
|
||||
ON CONFLICT (name) DO UPDATE SET
|
||||
icon = EXCLUDED.icon,
|
||||
client_type = EXCLUDED.client_type,
|
||||
config = CASE
|
||||
WHEN providers.config->>'api_key' IS NOT NULL AND providers.config->>'api_key' != ''
|
||||
THEN jsonb_set(EXCLUDED.config, '{api_key}', providers.config->'api_key')
|
||||
ELSE EXCLUDED.config
|
||||
END,
|
||||
updated_at = now()
|
||||
RETURNING *;
|
||||
|
||||
-- name: UpsertRegistryModel :one
|
||||
INSERT INTO models (model_id, name, llm_provider_id, type, config)
|
||||
VALUES (sqlc.arg(model_id), sqlc.arg(name), sqlc.arg(llm_provider_id), sqlc.arg(type), sqlc.arg(config))
|
||||
ON CONFLICT (llm_provider_id, model_id) DO UPDATE SET
|
||||
INSERT INTO models (model_id, name, provider_id, type, config)
|
||||
VALUES (sqlc.arg(model_id), sqlc.arg(name), sqlc.arg(provider_id), sqlc.arg(type), sqlc.arg(config))
|
||||
ON CONFLICT (provider_id, model_id) DO UPDATE SET
|
||||
name = EXCLUDED.name,
|
||||
type = EXCLUDED.type,
|
||||
config = EXCLUDED.config,
|
||||
@@ -137,14 +140,14 @@ RETURNING *;
|
||||
-- name: ListEnabledModels :many
|
||||
SELECT m.*
|
||||
FROM models m
|
||||
JOIN llm_providers p ON m.llm_provider_id = p.id
|
||||
JOIN providers p ON m.provider_id = p.id
|
||||
WHERE p.enable = true
|
||||
ORDER BY m.created_at DESC;
|
||||
|
||||
-- name: ListEnabledModelsByType :many
|
||||
SELECT m.*
|
||||
FROM models m
|
||||
JOIN llm_providers p ON m.llm_provider_id = p.id
|
||||
JOIN providers p ON m.provider_id = p.id
|
||||
WHERE p.enable = true
|
||||
AND m.type = sqlc.arg(type)
|
||||
ORDER BY m.created_at DESC;
|
||||
@@ -152,7 +155,7 @@ ORDER BY m.created_at DESC;
|
||||
-- name: ListEnabledModelsByProviderClientType :many
|
||||
SELECT m.*
|
||||
FROM models m
|
||||
JOIN llm_providers p ON m.llm_provider_id = p.id
|
||||
JOIN providers p ON m.provider_id = p.id
|
||||
WHERE p.enable = true
|
||||
AND p.client_type = sqlc.arg(client_type)
|
||||
ORDER BY m.created_at DESC;
|
||||
@@ -171,3 +174,37 @@ RETURNING *;
|
||||
SELECT * FROM model_variants
|
||||
WHERE model_uuid = sqlc.arg(model_uuid)
|
||||
ORDER BY weight DESC, created_at DESC;
|
||||
|
||||
-- name: GetSpeechModelWithProvider :one
|
||||
SELECT
|
||||
m.*,
|
||||
p.client_type AS provider_type
|
||||
FROM models m
|
||||
JOIN providers p ON p.id = m.provider_id
|
||||
WHERE m.id = sqlc.arg(id)
|
||||
AND m.type = 'speech';
|
||||
|
||||
-- name: ListSpeechProviders :many
|
||||
SELECT * FROM providers
|
||||
WHERE client_type = 'edge-speech'
|
||||
ORDER BY created_at DESC;
|
||||
|
||||
-- name: ListSpeechModels :many
|
||||
SELECT m.*,
|
||||
p.client_type AS provider_type
|
||||
FROM models m
|
||||
JOIN providers p ON p.id = m.provider_id
|
||||
WHERE m.type = 'speech'
|
||||
ORDER BY m.created_at DESC;
|
||||
|
||||
-- name: ListSpeechModelsByProviderID :many
|
||||
SELECT * FROM models
|
||||
WHERE provider_id = sqlc.arg(provider_id)
|
||||
AND type = 'speech'
|
||||
ORDER BY created_at DESC;
|
||||
|
||||
-- name: GetModelByProviderAndModelID :one
|
||||
SELECT * FROM models
|
||||
WHERE provider_id = sqlc.arg(provider_id)
|
||||
AND model_id = sqlc.arg(model_id)
|
||||
LIMIT 1;
|
||||
|
||||
Reference in New Issue
Block a user