mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-25 07:00:48 +09:00
b88ca96064
* refactor: move client_type to provider, replace model fields with config JSONB - Move `client_type` from `models` to `llm_providers` table - Add `icon` field to `llm_providers` - Replace `dimensions`, `input_modalities`, `supports_reasoning` on `models` with a single `config` JSONB column containing `dimensions`, `compatibilities` (vision, tool-call, image-output, reasoning), and `context_window` - Auto-imported models default to vision + tool-call + reasoning - Update all backend consumers (agent, flow resolver, handlers, memory) - Regenerate sqlc, swagger, and TypeScript SDK - Update frontend forms, display, and i18n for new schema * ui: show provider icon avatar in sidebar and detail header, remove icon input * feat: add built-in provider registry with YAML definitions and enable toggle - Add `enable` column to llm_providers (default true, backward-compatible) - Create internal/registry package to load YAML provider/model definitions on startup and upsert into database (new providers disabled by default) - Add conf/providers/ with OpenAI, Anthropic, Google YAML definitions - Add RegistryConfig to TOML config (providers_dir, default conf/providers) - Model listing APIs and conversation flow now filter by enabled providers - Frontend: enable switch in provider form, green status dot in sidebar, enabled providers sorted to top * fix: make 0041 migration idempotent for fresh databases Guard data migration steps with column-existence checks so the migration succeeds on databases created from the updated init schema.
174 lines
4.4 KiB
SQL
174 lines
4.4 KiB
SQL
-- name: CreateLlmProvider :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(api_key),
|
|
sqlc.arg(client_type),
|
|
sqlc.arg(icon),
|
|
sqlc.arg(enable),
|
|
sqlc.arg(metadata)
|
|
)
|
|
RETURNING *;
|
|
|
|
-- name: GetLlmProviderByID :one
|
|
SELECT * FROM llm_providers WHERE id = sqlc.arg(id);
|
|
|
|
-- name: GetLlmProviderByName :one
|
|
SELECT * FROM llm_providers WHERE name = sqlc.arg(name);
|
|
|
|
-- name: ListLlmProviders :many
|
|
SELECT * FROM llm_providers
|
|
ORDER BY created_at DESC;
|
|
|
|
-- name: UpdateLlmProvider :one
|
|
UPDATE llm_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),
|
|
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: CountLlmProviders :one
|
|
SELECT COUNT(*) FROM llm_providers;
|
|
|
|
-- name: CreateModel :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)
|
|
)
|
|
RETURNING *;
|
|
|
|
-- name: GetModelByID :one
|
|
SELECT * FROM models WHERE id = sqlc.arg(id);
|
|
|
|
-- name: GetModelByModelID :one
|
|
SELECT * FROM models WHERE model_id = sqlc.arg(model_id);
|
|
|
|
-- name: ListModelsByModelID :many
|
|
SELECT * FROM models
|
|
WHERE model_id = sqlc.arg(model_id)
|
|
ORDER BY created_at DESC;
|
|
|
|
-- name: ListModels :many
|
|
SELECT * FROM models
|
|
ORDER BY created_at DESC;
|
|
|
|
-- name: ListModelsByType :many
|
|
SELECT * FROM models
|
|
WHERE type = sqlc.arg(type)
|
|
ORDER BY created_at DESC;
|
|
|
|
-- name: ListModelsByProviderID :many
|
|
SELECT * FROM models
|
|
WHERE llm_provider_id = sqlc.arg(llm_provider_id)
|
|
ORDER BY created_at DESC;
|
|
|
|
-- name: ListModelsByProviderIDAndType :many
|
|
SELECT * FROM models
|
|
WHERE llm_provider_id = sqlc.arg(llm_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
|
|
WHERE p.client_type = sqlc.arg(client_type)
|
|
ORDER BY m.created_at DESC;
|
|
|
|
-- name: UpdateModel :one
|
|
UPDATE models
|
|
SET
|
|
model_id = sqlc.arg(model_id),
|
|
name = sqlc.arg(name),
|
|
llm_provider_id = sqlc.arg(llm_provider_id),
|
|
type = sqlc.arg(type),
|
|
config = sqlc.arg(config),
|
|
updated_at = now()
|
|
WHERE id = sqlc.arg(id)
|
|
RETURNING *;
|
|
|
|
-- name: DeleteModel :exec
|
|
DELETE FROM models WHERE id = sqlc.arg(id);
|
|
|
|
-- name: DeleteModelByModelID :exec
|
|
DELETE FROM models WHERE model_id = sqlc.arg(model_id);
|
|
|
|
-- name: CountModels :one
|
|
SELECT COUNT(*) FROM models;
|
|
|
|
-- name: CountModelsByType :one
|
|
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, '{}')
|
|
ON CONFLICT (name) DO UPDATE SET
|
|
icon = EXCLUDED.icon,
|
|
client_type = EXCLUDED.client_type,
|
|
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
|
|
name = EXCLUDED.name,
|
|
type = EXCLUDED.type,
|
|
config = EXCLUDED.config,
|
|
updated_at = now()
|
|
RETURNING *;
|
|
|
|
-- name: ListEnabledModels :many
|
|
SELECT m.*
|
|
FROM models m
|
|
JOIN llm_providers p ON m.llm_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
|
|
WHERE p.enable = true
|
|
AND m.type = sqlc.arg(type)
|
|
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
|
|
WHERE p.enable = true
|
|
AND p.client_type = sqlc.arg(client_type)
|
|
ORDER BY m.created_at DESC;
|
|
|
|
-- name: CreateModelVariant :one
|
|
INSERT INTO model_variants (model_uuid, variant_id, weight, metadata)
|
|
VALUES (
|
|
sqlc.arg(model_uuid),
|
|
sqlc.arg(variant_id),
|
|
sqlc.arg(weight),
|
|
sqlc.arg(metadata)
|
|
)
|
|
RETURNING *;
|
|
|
|
-- name: ListModelVariantsByModelUUID :many
|
|
SELECT * FROM model_variants
|
|
WHERE model_uuid = sqlc.arg(model_uuid)
|
|
ORDER BY weight DESC, created_at DESC;
|