Skip to content

Commit d8a4726

Browse files
committed
Adicionado spAddEmbeddings revisado
1 parent f3a0223 commit d8a4726

6 files changed

Lines changed: 685 additions & 354 deletions

File tree

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*#info
2+
# Autor
3+
Rodrigo Ribeiro Gomes
4+
5+
# descricao
6+
Implementa a sp_AddEmbeddings para o Azure OpenAI
7+
Vide sp_AddEmbeddings.sql
8+
*/
9+
10+
11+
CREATE OR ALTER PROC sp_GetEmbeddings_AzureOpenai (
12+
@result nvarchar(max) OUTPUT
13+
,@params json
14+
)
15+
AS
16+
17+
DECLARE
18+
@texts nvarchar(max) = CONVERT(nvarchar(max),JSON_QUERY(@params,'$.texts'))
19+
,@model varchar(max) = CONVERT(nvarchar(max),JSON_VALUE(@params,'$.model'))
20+
,@dimensions int = CONVERT(int,JSON_VALUE(@params,'$.dimensions'))
21+
,@options nvarchar(max) = CONVERT(nvarchar(max),JSON_QUERY(@params,'$.options'))
22+
,@credential nvarchar(max) = CONVERT(nvarchar(max),JSON_VALUE(@params,'$.credential'))
23+
,@IsExternal bit = CONVERT(bit,JSON_VALUE(@params,'$.IsExternal'))
24+
,@url nvarchar(max) = CONVERT(nvarchar(max),JSON_VALUE(@params,'$.url')) -- url alternativa!
25+
26+
27+
IF @IsExternal = 1
28+
BEGIN
29+
SELECT
30+
@model = name
31+
,@url = ISNULL(@url,location)
32+
FROM
33+
sys.external_models em
34+
WHERE
35+
name = @model
36+
END
37+
38+
39+
IF @model IS NULL
40+
SET @model = 'text-embedding-3-small'
41+
42+
43+
IF @url IS NULL
44+
BEGIN
45+
RAISERROR('Must set url in @options',16,1);
46+
RETURN;
47+
END
48+
49+
IF @credential IS NULL
50+
BEGIN
51+
set @credential = REGEXP_SUBSTR(CONVERT(nvarchar(4000),@url),'(^https?\://.+?)/',1,1,'c',1)
52+
END
53+
54+
-- Agora é invocar!
55+
declare @response nvarchar(max)
56+
declare @retval int
57+
declare @reqopts nvarchar(max) = (
58+
select
59+
input = JSON_QUERY(@texts)
60+
,dimensions = @dimensions
61+
,model = @model
62+
for json path,without_array_wrapper
63+
)
64+
65+
66+
exec @retval = sp_invoke_external_rest_endpoint
67+
@url = @url,
68+
@method = 'POST',
69+
@credential = @credential,
70+
@payload = @reqopts,
71+
@response = @response output
72+
73+
74+
set @result = (
75+
select
76+
embeddings = JSON_QUERY((
77+
select
78+
JSON_ARRAYAGG( JSON_QUERY(r.value,'$.embedding') ORDER BY r.[key] )
79+
from
80+
openjson(@response,'$.result.data') r
81+
))
82+
,ok = convert(bit,1)
83+
for json path, without_array_wrapper
84+
)
85+
86+
GO
87+
88+
89+

AI/Embeddings/spAddEmbs.cohere.sql

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
/*#info
2+
# Autor
3+
Rodrigo Ribeiro Gomes
4+
5+
# descricao
6+
Implementa a sp_AddEmbeddings para a Cohere
7+
Vide sp_AddEmbeddings.sql
8+
*/
9+
10+
CREATE OR ALTER PROC sp_GetEmbeddings_cohere (
11+
@result nvarchar(max) OUTPUT
12+
,@params json
13+
)
14+
AS
15+
16+
DECLARE
17+
@texts nvarchar(max) = CONVERT(nvarchar(max),JSON_QUERY(@params,'$.texts'))
18+
,@model varchar(max) = CONVERT(nvarchar(max),JSON_VALUE(@params,'$.model'))
19+
,@dimensions int = CONVERT(int,JSON_VALUE(@params,'$.dimensions'))
20+
,@options nvarchar(max) = CONVERT(nvarchar(max),JSON_QUERY(@params,'$.options'))
21+
,@credential nvarchar(max) = CONVERT(nvarchar(max),JSON_VALUE(@params,'$.credential'))
22+
,@IsExternal bit = CONVERT(bit,JSON_VALUE(@params,'$.IsExternal'))
23+
,@url nvarchar(max) = CONVERT(nvarchar(max),JSON_VALUE(@params,'$.url')) -- url alternativa!
24+
25+
26+
27+
declare @Debug bit = convert(int,SESSION_CONTEXT(N'AddEmbeddings-Debug'))
28+
29+
30+
if @model is null
31+
set @model = 'embed-v4.0'
32+
33+
-- exige autenticacao!
34+
if @credential is null
35+
set @credential = 'https://api.cohere.com'
36+
37+
-- https://docs.cohere.com/v2/reference/embed
38+
declare
39+
@SupportedModels TABLE(model varchar(200), Dimensions json)
40+
41+
42+
43+
insert into @SupportedModels
44+
values
45+
('embed-english-v3.0', '[1024]')
46+
,('embed-multilingual-v3.0','[1024]')
47+
,('embed-english-light-v3.0','[384]')
48+
,('embed-multilingual-light-v3.0','[384]')
49+
,('embed-english-v2.0','[4096]')
50+
,('embed-english-light-v2.0','[1024]')
51+
,('embed-multilingual-v2.0','[768]')
52+
,('embed-v4.0','[256,512,1024,1536]')
53+
54+
55+
if not exists(select * From @SupportedModels where model = @model and JSON_CONTAINS(Dimensions,@dimensions,'$[*]') = 1)
56+
begin
57+
RAISERROR('Model %s not supported with dimensions %d',16,1,@model,@dimensions);
58+
return;
59+
end
60+
61+
-- Agora é invocar!
62+
declare @response nvarchar(max)
63+
declare @retval int
64+
declare @reqoptions nvarchar(max) = (
65+
select
66+
texts = JSON_QUERY(@texts)
67+
,model = @model
68+
,input_type = 'search_document'
69+
,embedding_types = JSON_QUERY('["float"]')
70+
,output_dimension = @dimensions
71+
for json path,without_array_wrapper
72+
)
73+
74+
if @Debug = 1
75+
raiserror('[cohere] reqoptions: %s',0,1,@reqoptions) with nowait;
76+
77+
exec @retval = sp_invoke_external_rest_endpoint
78+
@url = 'https://api.cohere.com/v2/embed',
79+
@method = 'POST',
80+
@credential = @credential,
81+
@payload = @reqoptions,
82+
@response = @response output
83+
84+
if @Debug = 1
85+
raiserror('[cohere] result: %s',0,1, @response ) with nowait;
86+
87+
declare
88+
@HttpStatus int = JSON_VALUE(@response,'$.response.status.http.code')
89+
,@HttpResult nvarchar(max) = JSON_QUERY(@response,'$.result')
90+
91+
set @result = (
92+
select
93+
ok = iif(@HttpStatus = 200,1,0)
94+
,error = iif(@HttpStatus = 200,null,JSON_QUERY(@HttpResult))
95+
,embeddings = JSON_QUERY(@response,'$.result.embeddings.float')
96+
for json path, without_array_wrapper
97+
)
98+
99+
GO

AI/Embeddings/spAddEmbs.openai.sql

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/*#info
2+
# Autor
3+
Rodrigo Ribeiro Gomes
4+
5+
# descricao
6+
Implementa a sp_AddEmbeddings para a OpenAi
7+
Vide sp_AddEmbeddings.sql
8+
*/
9+
10+
CREATE OR ALTER PROC sp_GetEmbeddings_openai (
11+
@result nvarchar(max) OUTPUT
12+
,@params json
13+
)
14+
AS
15+
16+
DECLARE
17+
@texts nvarchar(max) = CONVERT(nvarchar(max),JSON_QUERY(@params,'$.texts'))
18+
,@model varchar(max) = CONVERT(nvarchar(max),JSON_VALUE(@params,'$.model'))
19+
,@dimensions int = CONVERT(int,JSON_VALUE(@params,'$.dimensions'))
20+
,@options nvarchar(max) = CONVERT(nvarchar(max),JSON_QUERY(@params,'$.options'))
21+
,@credential nvarchar(max) = CONVERT(nvarchar(max),JSON_VALUE(@params,'$.credential'))
22+
,@IsExternal bit = CONVERT(bit,JSON_VALUE(@params,'$.IsExternal'))
23+
,@url nvarchar(max) = CONVERT(nvarchar(max),JSON_VALUE(@params,'$.url')) -- url alternativa!
24+
25+
26+
declare @Debug bit = convert(int,SESSION_CONTEXT(N'AddEmbeddings-Debug'))
27+
28+
IF @IsExternal = 1
29+
BEGIN
30+
SELECT
31+
@model = name
32+
,@url = ISNULL(@url,location)
33+
FROM
34+
sys.external_models em
35+
WHERE
36+
name = @model
37+
END
38+
39+
IF @model IS NULL
40+
SET @model = 'text-embedding-3-small'
41+
42+
-- Agora é invocar!
43+
declare @response nvarchar(max)
44+
declare @retval int
45+
declare @reqoptions nvarchar(max) = (
46+
select
47+
input = JSON_QUERY(@texts)
48+
,dimensions = @dimensions
49+
,model = @model
50+
for json path,without_array_wrapper
51+
)
52+
53+
-- exige autenticacao!
54+
if @credential is null
55+
set @credential = 'https://api.openai.com'
56+
57+
if @url is null
58+
set @url = 'https://api.openai.com/v1/embeddings'
59+
60+
if @Debug = 1
61+
raiserror('[openai] reqoptions: %s',0,1,@reqoptions) with nowait;
62+
63+
exec @retval = sp_invoke_external_rest_endpoint
64+
@url = @url,
65+
@method = 'POST',
66+
@credential = @credential,
67+
@payload = @reqoptions,
68+
@response = @response output
69+
70+
if @Debug = 1
71+
raiserror('[openai] result: %s',0,1, @response ) with nowait;
72+
73+
declare
74+
@HttpStatus int = JSON_VALUE(@response,'$.response.status.http.code')
75+
,@HttpResult nvarchar(max) = JSON_QUERY(@response,'$.result')
76+
77+
set @result = (
78+
select
79+
ok = iif(@HttpStatus = 200,1,0)
80+
,error = iif(@HttpStatus = 200,null,JSON_QUERY(@HttpResult))
81+
,RawResponse = JSON_QUERY(iif(@Debug = 1,@response,null))
82+
,embeddings = JSON_QUERY((
83+
select
84+
JSON_ARRAYAGG( JSON_QUERY(r.value,'$.embedding') ORDER BY r.[key] )
85+
from
86+
openjson(@response,'$.result.data') r
87+
))
88+
for json path, without_array_wrapper
89+
)
90+
91+
GO
92+

0 commit comments

Comments
 (0)