Change summary
providers/anthropic/anthropic.go | 19 +++++++++++--------
providers/openai/language_model_hooks.go | 5 +++++
providers/openaicompat/language_model_hooks.go | 5 +++++
3 files changed, 21 insertions(+), 8 deletions(-)
Detailed changes
@@ -547,16 +547,19 @@ func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBl
continue
}
// TODO: handle other file types
- if !strings.HasPrefix(file.MediaType, "image/") {
- continue
+ if strings.HasPrefix(file.MediaType, "image/") {
+ base64Encoded := base64.StdEncoding.EncodeToString(file.Data)
+ imageBlock := anthropic.NewImageBlockBase64(file.MediaType, base64Encoded)
+ if cacheControl != nil {
+ imageBlock.OfImage.CacheControl = anthropic.NewCacheControlEphemeralParam()
+ }
+ anthropicContent = append(anthropicContent, imageBlock)
}
-
- base64Encoded := base64.StdEncoding.EncodeToString(file.Data)
- imageBlock := anthropic.NewImageBlockBase64(file.MediaType, base64Encoded)
- if cacheControl != nil {
- imageBlock.OfImage.CacheControl = anthropic.NewCacheControlEphemeralParam()
+ if strings.HasPrefix(file.MediaType, "text/") {
+ anthropicContent = append(anthropicContent, anthropic.NewDocumentBlock(anthropic.PlainTextSourceParam{
+ Data: string(file.Data),
+ }))
}
- anthropicContent = append(anthropicContent, imageBlock)
}
}
} else if msg.Role == fantasy.MessageRoleTool {
@@ -359,6 +359,11 @@ func DefaultToPrompt(prompt fantasy.Prompt, _, _ string) ([]openai.ChatCompletio
}
switch {
+ case strings.HasPrefix(filePart.MediaType, "text/"):
+ base64Encoded := base64.StdEncoding.EncodeToString(filePart.Data)
+ content = append(content, openai.FileContentPart(openai.ChatCompletionContentPartFileFileParam{
+ FileData: param.NewOpt(base64Encoded),
+ }))
case strings.HasPrefix(filePart.MediaType, "image/"):
// Handle image files
base64Encoded := base64.StdEncoding.EncodeToString(filePart.Data)
@@ -209,6 +209,11 @@ func ToPromptFunc(prompt fantasy.Prompt, _, _ string) ([]openaisdk.ChatCompletio
}
switch {
+ case strings.HasPrefix(filePart.MediaType, "text/"):
+ base64Encoded := base64.StdEncoding.EncodeToString(filePart.Data)
+ content = append(content, openaisdk.FileContentPart(openaisdk.ChatCompletionContentPartFileFileParam{
+ FileData: param.NewOpt(base64Encoded),
+ }))
case strings.HasPrefix(filePart.MediaType, "image/"):
// Handle image files
base64Encoded := base64.StdEncoding.EncodeToString(filePart.Data)