feat: use AI provider chat APIs (#25415)

This commit is contained in:
Michael Suchacz
2026-05-22 07:53:23 +02:00
committed by GitHub
parent 10efde3e6c
commit 06526a5822
41 changed files with 2195 additions and 1126 deletions
@@ -21,6 +21,17 @@ ORDER BY
created_at ASC,
id ASC;
-- name: GetAIProviderKeyPresence :many
-- Returns the provider IDs that have at least one provider-scoped key.
SELECT DISTINCT
provider_id
FROM
ai_provider_keys
WHERE
provider_id = ANY(@provider_ids::uuid[])
ORDER BY
provider_id ASC;
-- name: GetAIProviderKeys :many
-- Returns AI provider key rows. By default, only rows whose parent
-- provider is live (deleted = FALSE) are returned, so the API list
+12
View File
@@ -6,6 +6,18 @@ FROM
WHERE
id = @id::uuid AND deleted = FALSE;
-- name: GetAIProviderByIDForReferenceLock :one
SELECT
*
FROM
ai_providers
WHERE
id = @id::uuid AND deleted = FALSE
-- Lock the provider row until the model-config write completes. The
-- transaction alone does not stop a concurrent soft-delete or disable
-- between validation and writing the model config reference.
FOR SHARE;
-- name: GetAIProviderByName :one
SELECT
*
+21 -8
View File
@@ -34,12 +34,17 @@ SELECT
cmc.*
FROM
chat_model_configs cmc
JOIN
chat_providers cp ON cp.provider = cmc.provider
LEFT JOIN
ai_providers ap ON ap.id = cmc.ai_provider_id
LEFT JOIN
chat_providers cp ON cp.provider = cmc.provider AND cmc.ai_provider_id IS NULL
WHERE
cmc.enabled = TRUE
AND cmc.deleted = FALSE
AND cp.enabled = TRUE
AND (
(cmc.ai_provider_id IS NOT NULL AND ap.enabled = TRUE AND ap.deleted = FALSE)
OR (cmc.ai_provider_id IS NULL AND cp.enabled = TRUE)
)
ORDER BY
cmc.provider ASC,
cmc.model ASC,
@@ -53,13 +58,18 @@ FROM
chat_model_configs cmc
-- Providers can be disabled independently of their model configs.
-- Check both to ensure the selected config is actually usable.
JOIN
chat_providers cp ON cp.provider = cmc.provider
LEFT JOIN
ai_providers ap ON ap.id = cmc.ai_provider_id
LEFT JOIN
chat_providers cp ON cp.provider = cmc.provider AND cmc.ai_provider_id IS NULL
WHERE
cmc.id = @id::uuid
AND cmc.deleted = FALSE
AND cmc.enabled = TRUE
AND cp.enabled = TRUE;
AND (
(cmc.ai_provider_id IS NOT NULL AND ap.enabled = TRUE AND ap.deleted = FALSE)
OR (cmc.ai_provider_id IS NULL AND cp.enabled = TRUE)
);
-- name: InsertChatModelConfig :one
INSERT INTO chat_model_configs (
@@ -72,7 +82,8 @@ INSERT INTO chat_model_configs (
is_default,
context_limit,
compression_threshold,
options
options,
ai_provider_id
) VALUES (
@provider::text,
@model::text,
@@ -83,7 +94,8 @@ INSERT INTO chat_model_configs (
@is_default::boolean,
@context_limit::bigint,
@compression_threshold::integer,
@options::jsonb
@options::jsonb,
sqlc.narg('ai_provider_id')::uuid
)
RETURNING
*;
@@ -101,6 +113,7 @@ SET
context_limit = @context_limit::bigint,
compression_threshold = @compression_threshold::integer,
options = @options::jsonb,
ai_provider_id = sqlc.narg('ai_provider_id')::uuid,
updated_at = NOW()
WHERE
id = @id::uuid