[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/gptel 0f173bace5: gptel-anthropic: Add support for sending
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/gptel 0f173bace5: gptel-anthropic: Add support for sending PDFs (#459) |
Date: |
Tue, 5 Nov 2024 00:59:55 -0500 (EST) |
branch: elpa/gptel
commit 0f173bace51c0f68d0dc3667a340355996b418f0
Author: Karthik Chikmagalur <karthikchikmagalur@gmail.com>
Commit: Karthik Chikmagalur <karthikchikmagalur@gmail.com>
gptel-anthropic: Add support for sending PDFs (#459)
* gptel-anthropic.el (gptel-make-anthropic,
gptel--anthropic-parse-multipart, gptel--anthropic-models): Add
support for sending PDFs to the model
`claude-3-5-sonnet-20241022'. This is the only model that
supports reading PDFs as of now. Cache sent PDFs so follow up the
input cost of reading the PDF in follow up messages is 90%
cheaper.
---
gptel-anthropic.el | 31 +++++++++++++++++++++++--------
1 file changed, 23 insertions(+), 8 deletions(-)
diff --git a/gptel-anthropic.el b/gptel-anthropic.el
index 78a28c2f25..544854325e 100644
--- a/gptel-anthropic.el
+++ b/gptel-anthropic.el
@@ -132,18 +132,31 @@ format."
for part in parts
for n upfrom 1
with last = (length parts)
+ with type
for text = (plist-get part :text)
+ for mime = (plist-get part :mime)
for media = (plist-get part :media)
if text do
(and (or (= n 1) (= n last)) (setq text (gptel--trim-prefixes text))) and
unless (string-empty-p text)
collect `(:type "text" :text ,text) into parts-array end
else if media
- collect
- `(:type "image"
+ do
+ (setq type (cond ;Currently supported: Images and PDFs
+ ((equal (substring mime 0 5) "image") "image")
+ ;; NOTE: Only Claude 3.5 Sonnet supports PDF documents:
+ ((equal mime "application/pdf") "document")
+ (t (error (concat "(gptel-anthropic) Request aborted: "
+ "trying to send unsupported MIME type %s")
+ mime))))
+ and collect
+ `(:type ,type
:source (:type "base64"
:media_type ,(plist-get part :mime)
- :data ,(gptel--base64-encode media)))
+ :data ,(gptel--base64-encode media))
+ ;; TODO Make media caching a user option
+ ,@(and (gptel--model-capable-p 'cache)
+ '(:cache_control (:type "ephemeral"))))
into parts-array
finally return (vconcat parts-array)))
@@ -186,15 +199,15 @@ files in the context."
(defconst gptel--anthropic-models
'((claude-3-5-sonnet-20241022
:description "Highest level of intelligence and capability"
- :capabilities (media tool)
- :mime-types ("image/jpeg" "image/png" "image/gif" "image/webp")
+ :capabilities (media tool cache)
+ :mime-types ("image/jpeg" "image/png" "image/gif" "image/webp"
"application/pdf")
:context-window 200
:input-cost 3
:output-cost 15
:cutoff-date "2024-04")
(claude-3-5-sonnet-20240620
:description "Highest level of intelligence and capability"
- :capabilities (media tool)
+ :capabilities (media tool cache)
:mime-types ("image/jpeg" "image/png" "image/gif" "image/webp")
:context-window 200
:input-cost 3
@@ -202,7 +215,7 @@ files in the context."
:cutoff-date "2024-04")
(claude-3-opus-20240229
:description "Top-level performance, intelligence, fluency, and
understanding"
- :capabilities (media tool)
+ :capabilities (media tool cache)
:mime-types ("image/jpeg" "image/png" "image/gif" "image/webp")
:context-window 200
:input-cost 15
@@ -262,7 +275,9 @@ sources:
(header
(lambda () (when-let (key (gptel--get-api-key))
`(("x-api-key" . ,key)
- ("anthropic-version" . "2023-06-01")))))
+ ("anthropic-version" . "2023-06-01")
+ ("anthropic-beta" . "pdfs-2024-09-25")
+ ("anthropic-beta" . "prompt-caching-2024-07-31")))))
(models gptel--anthropic-models)
(host "api.anthropic.com")
(protocol "https")
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [nongnu] elpa/gptel 0f173bace5: gptel-anthropic: Add support for sending PDFs (#459),
ELPA Syncer <=