Skip to content

Commit fb831bc

Browse files
committed
Add image upload to api
1 parent 46038c6 commit fb831bc

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

g4f/api/__init__.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class Annotated:
3939
from g4f.client import AsyncClient, ChatCompletion, ImagesResponse, convert_to_provider
4040
from g4f.providers.response import BaseConversation
4141
from g4f.client.helper import filter_none
42-
from g4f.image import is_accepted_format, images_dir
42+
from g4f.image import is_accepted_format, is_data_uri_an_image, images_dir
4343
from g4f.typing import Messages
4444
from g4f.errors import ProviderNotFoundError, ModelNotFoundError, MissingAuthError
4545
from g4f.cookies import read_cookie_files, get_cookies_dir
@@ -93,6 +93,8 @@ class ChatCompletionsConfig(BaseModel):
9393
model: str = Field(default="")
9494
provider: Optional[str] = None
9595
stream: bool = False
96+
image: Optional[str] = None
97+
image_name: Optional[str] = None
9698
temperature: Optional[float] = None
9799
max_tokens: Optional[int] = None
98100
stop: Union[list[str], str, None] = None
@@ -263,6 +265,7 @@ async def model_info(model_name: str) -> ModelResponseModel:
263265
HTTP_200_OK: {"model": ChatCompletion},
264266
HTTP_401_UNAUTHORIZED: {"model": ErrorResponseModel},
265267
HTTP_404_NOT_FOUND: {"model": ErrorResponseModel},
268+
HTTP_422_UNPROCESSABLE_ENTITY: {"model": ErrorResponseModel},
266269
HTTP_500_INTERNAL_SERVER_ERROR: {"model": ErrorResponseModel},
267270
})
268271
async def chat_completions(
@@ -284,14 +287,20 @@ async def chat_completions(
284287
if config.provider in self.conversations[config.conversation_id]:
285288
conversation = self.conversations[config.conversation_id][config.provider]
286289

290+
if config.image is not None:
291+
try:
292+
is_data_uri_an_image(config.image)
293+
except ValueError as e:
294+
return ErrorResponse.from_message(f"The image you send must be a data URI. Example: data:image/webp;base64,...", status_code=HTTP_422_UNPROCESSABLE_ENTITY)
295+
287296
# Create the completion response
288297
response = self.client.chat.completions.create(
289298
**filter_none(
290299
**{
291300
"model": AppConfig.model,
292301
"provider": AppConfig.provider,
293302
"proxy": AppConfig.proxy,
294-
**config.dict(exclude_none=True),
303+
**config.model_dump(exclude_none=True),
295304
**{
296305
"conversation_id": None,
297306
"return_conversation": return_conversation,

0 commit comments

Comments
 (0)