chore: Add gpt-4o mode in vision command (#33637)

## Description
Add gpt-4o model in Open AI datasource's vision and chat commands

Fixes #`Issue Number`  
_or_  
Fixes `Issue URL`
> [!WARNING]  
> _If no issue exists, please create an issue first, and check with the
maintainers if the issue is valid._

## Automation

/ok-to-test tags="@tag.All"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/9541802412>
> Commit: 78eb94443c7e8ed5396f6e3369aac1e5373954bc
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9541802412&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: ``

<!-- end of auto-generated comment: Cypress test results  -->










## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Enhanced `VisionCommand` to support new model naming conventions,
including `gpt-4-vision-preview` and `gpt-4o`.

- **Bug Fixes**
- Improved message content handling in `transformUserMessages` and
`transformSystemMessages` methods to ensure proper data type casting.

- **Tests**
- Updated test cases to align with the new model name `gpt-4o`, ensuring
accurate test coverage.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Nirmal Sarswat <nirmal@appsmith.com>
This commit is contained in:
Diljit 2024-06-17 14:07:03 +05:30 committed by GitHub
parent 929873a2c6
commit c0ad2b8562
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 8 deletions

View File

@ -60,7 +60,8 @@ public class VisionCommand implements OpenAICommand {
private final Gson gson;
private final String regex = "(ft:)?(gpt).*(vision).*";
private final String regex =
"^(gpt-4-(vision-preview|\\d{4}-vision-preview)|gpt-4o(.*)?|ft:(gpt-4-(vision-preview|\\d{4}-vision-preview)|gpt-4o).*)$";
private final Pattern pattern = Pattern.compile(regex);
@Override
@ -135,12 +136,12 @@ public class VisionCommand implements OpenAICommand {
UserTextContent userContent = new UserTextContent();
userContent.setType(TEXT_TYPE);
userContent.setText(userQuery.getContent());
visionMessage.getContent().add(userContent);
((List<Object>) visionMessage.getContent()).add(userContent);
} else if (QueryType.IMAGE.equals(userQuery.getType())) {
UserImageContent userContent = new UserImageContent();
userContent.setType(IMAGE_TYPE);
userContent.setImageUrl(new UserImageContent.ImageUrl(userQuery.getContent()));
visionMessage.getContent().add(userContent);
((List<Object>) visionMessage.getContent()).add(userContent);
}
}
return List.of(visionMessage);
@ -168,7 +169,7 @@ public class VisionCommand implements OpenAICommand {
VisionMessage visionMessage = new VisionMessage();
if (StringUtils.hasText(systemMessageMap.get(CONTENT))) {
visionMessage.setRole(Role.system);
visionMessage.setContent(List.of(systemMessageMap.get(CONTENT)));
visionMessage.setContent(systemMessageMap.get(CONTENT));
visionMessages.add(visionMessage);
}
}

View File

@ -4,12 +4,10 @@ import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
public class VisionMessage {
Role role;
List<Object> content;
Object content;
}

View File

@ -144,7 +144,7 @@ public class VisionCommandTest {
"curie",
"davinci",
"gpt-4-vision-preview",
"gpt-4.5-vision-preview");
"gpt-4o");
int counter = 0;
for (String model : models) {
JSONObject jsonObject = new JSONObject(String.format("{\"%s\": \"%s\" }", ID, model));