Skip to content

Commit

Permalink
Accept image input
Browse files Browse the repository at this point in the history
  • Loading branch information
herumes committed Jun 27, 2024
1 parent 709279a commit 5610dcc
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 2 deletions.
31 changes: 31 additions & 0 deletions examples/chat_with_image.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env python


from shuttleai import ShuttleAI
from shuttleai.schemas.chat.completions import ( # Helper for messages
ChatMessage,
ChatMessageContentPartImage, # For v5 use
ChatMessageContentPartText, # For v5 use
)


def main() -> None:
model = "shuttle-2-turbo"

client = ShuttleAI()

chat_response = client.chat.completions.create(
model=model,
messages=[
ChatMessage(
role="user",
content="what is in this image?"
)
],
image="https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"
)
print(chat_response.choices[0].message.content)


if __name__ == "__main__":
main()
2 changes: 1 addition & 1 deletion shuttleai/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
__title__ = "shuttleai"
__version__ = "4.1.7"
__version__ = "4.1.8"

import json
import time
Expand Down
3 changes: 3 additions & 0 deletions shuttleai/client/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ def _make_chat_request(
self,
messages: List[Any],
model: Optional[str] = None,
image: Optional[str] = None,
tools: Optional[List[Dict[str, Any]]] = None,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None,
Expand All @@ -133,6 +134,8 @@ def _make_chat_request(
}
if model:
request_data["model"] = model
if image:
request_data["image"] = image
if tools:
request_data["tools"] = self._parse_tools(tools)
if tool_choice:
Expand Down
8 changes: 8 additions & 0 deletions shuttleai/resources/chat/completions.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ async def create( # type: ignore
self,
messages: Union[List[ChatMessage], List[Dict[str, Any]]],
model: Optional[str] = None,
image: Optional[str] = None,
tools: Optional[List[Dict[str, Any]]] = None,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None,
Expand All @@ -43,6 +44,7 @@ async def create(
self,
messages: Union[List[ChatMessage], List[Dict[str, Any]]],
model: Optional[str] = None,
image: Optional[str] = None,
tools: Optional[List[Dict[str, Any]]] = None,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None,
Expand All @@ -55,6 +57,7 @@ async def create(
self,
messages: Union[List[ChatMessage], List[Dict[str, Any]]],
model: Optional[str] = None,
image: Optional[str] = None,
tools: Optional[List[Dict[str, Any]]] = None,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None,
Expand All @@ -65,6 +68,7 @@ async def create(
request = self._client._make_chat_request(
messages,
model,
image=image,
tools=tools,
temperature=temperature,
max_tokens=max_tokens,
Expand All @@ -88,6 +92,7 @@ def create( # type: ignore
self,
messages: Union[List[ChatMessage], List[Dict[str, Any]]],
model: Optional[str] = None,
image: Optional[str] = None,
tools: Optional[List[Dict[str, Any]]] = None,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None,
Expand All @@ -101,6 +106,7 @@ def create(
self,
messages: Union[List[ChatMessage], List[Dict[str, Any]]],
model: Optional[str] = None,
image: Optional[str] = None,
tools: Optional[List[Dict[str, Any]]] = None,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None,
Expand All @@ -113,6 +119,7 @@ def create(
self,
messages: Union[List[ChatMessage], List[Dict[str, Any]]],
model: Optional[str] = None,
image: Optional[str] = None,
tools: Optional[List[Dict[str, Any]]] = None,
temperature: Optional[float] = None,
max_tokens: Optional[int] = None,
Expand All @@ -123,6 +130,7 @@ def create(
request = self._client._make_chat_request(
messages,
model,
image=image,
tools=tools,
temperature=temperature,
max_tokens=max_tokens,
Expand Down
17 changes: 16 additions & 1 deletion shuttleai/schemas/chat/completions.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ class FunctionCall(BaseModel):
arguments: str


class ContentPartType(str, Enum):
text = "text"
image_url = "image_url"


class ToolCall(BaseModel):
id: str = "call_null"
type: ToolType = ToolType.function
Expand All @@ -33,9 +38,19 @@ class ToolChoice(str, Enum):
none: str = "none"


class ChatMessageContentPartText(BaseModel):
type: ContentPartType = ContentPartType.text
text: str


class ChatMessageContentPartImage(BaseModel):
type: ContentPartType = ContentPartType.image_url
image_url: str


class ChatMessage(BaseModel):
role: str
content: Optional[Union[str, List[str]]] = None
content: Optional[Union[str, List[Union[ChatMessageContentPartText, ChatMessageContentPartImage]]]] = None
name: Optional[str] = None
tool_calls: Optional[List[ToolCall]] = None
tool_call_id: Optional[str] = None
Expand Down

0 comments on commit 5610dcc

Please sign in to comment.