forked from emacs-openai/openai
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathopenai-embedding.el
72 lines (57 loc) · 2.64 KB
/
openai-embedding.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
;;; openai-embedding.el --- Create embeddings with OpenAI API -*- lexical-binding: t; -*-
;; Copyright (C) 2023-2024 Shen, Jen-Chieh
;; This file is not part of GNU Emacs.
;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;
;; Get a vector representation of a given input that can be easily consumed by
;; machine learning models and algorithms.
;;
;; See https://platform.openai.com/docs/api-reference/embeddings
;;
;;; Code:
(require 'openai)
;;
;;; API
(cl-defun openai-embedding-create ( input callback
&key
(base-url openai-base-url)
(parameters openai-parameters)
(content-type "application/json")
(key openai-key)
org-id
(model "text-embedding-ada-002")
(user openai-user))
"Create an embedding vector representing the input text.
INPUT text to get embeddings for, encoded as a string or array of tokens. To
get embeddings for multiple inputs in a single request, pass an array of
strings or array of token arrays. Each input must not exceed 8192 tokens in
length.
The argument CALLBACK is executed after the request is made.
Arguments BASE-URL, PARAMETERS, CONTENT-TYPE, KEY, ORG-ID and USER are global
options; however, you can overwrite the value by passing it in.
The rest of the arguments are optional, please see OpenAI API reference page
for more information. Arguments here refer to MODEL."
(openai-request (concat base-url "/embeddings")
:type "POST"
:params parameters
:headers (openai--headers content-type key org-id)
:data (openai--json-encode
`(("model" . ,model)
("input" . ,input)
("user" . ,user)))
:parser 'json-read
:complete (cl-function
(lambda (&key data &allow-other-keys)
(funcall callback data)))))
(provide 'openai-embedding)
;;; openai-embedding.el ends here