Skip to content

Commit a722abb

Browse files
authored
Merge pull request xtekky#2421 from hlohaus/model
Fix optional fields in api
2 parents f2849fc + 0043e04 commit a722abb

File tree

4 files changed

+21
-18
lines changed

4 files changed

+21
-18
lines changed

.github/workflows/publish-workflow.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ jobs:
2424
python -m etc.tool.openapi
2525
- uses: actions/upload-artifact@v4
2626
with:
27+
name: openapi
2728
path: openapi.json
2829
publish:
2930
runs-on: ubuntu-latest

g4f/api/__init__.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,15 @@ def create_app_debug(g4f_api_key: str = None):
9191
class ChatCompletionsConfig(BaseModel):
9292
messages: Messages = Field(examples=[[{"role": "system", "content": ""}, {"role": "user", "content": ""}]])
9393
model: str = Field(default="")
94-
provider: Optional[str] = Field(examples=[None])
94+
provider: Optional[str] = None
9595
stream: bool = False
96-
temperature: Optional[float] = Field(examples=[None])
97-
max_tokens: Optional[int] = Field(examples=[None])
98-
stop: Union[list[str], str, None] = Field(examples=[None])
99-
api_key: Optional[str] = Field(examples=[None])
100-
web_search: Optional[bool] = Field(examples=[None])
101-
proxy: Optional[str] = Field(examples=[None])
102-
conversation_id: Optional[str] = Field(examples=[None])
96+
temperature: Optional[float] = None
97+
max_tokens: Optional[int] = None
98+
stop: Union[list[str], str, None] = None
99+
api_key: Optional[str] = None
100+
web_search: Optional[bool] = None
101+
proxy: Optional[str] = None
102+
conversation_id: Optional[str] = None
103103

104104
class ImageGenerationConfig(BaseModel):
105105
prompt: str

g4f/client/__init__.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,7 @@ async def async_iter_response(
152152
content = filter_json(content)
153153
yield ChatCompletion.model_construct(content, finish_reason, completion_id, int(time.time()))
154154
finally:
155-
if hasattr(response, 'aclose'):
156-
await safe_aclose(response)
155+
await safe_aclose(response)
157156

158157
async def async_iter_append_model_and_provider(
159158
response: AsyncChatCompletionResponseType
@@ -167,8 +166,7 @@ async def async_iter_append_model_and_provider(
167166
chunk.provider = last_provider.get("name")
168167
yield chunk
169168
finally:
170-
if hasattr(response, 'aclose'):
171-
await safe_aclose(response)
169+
await safe_aclose(response)
172170

173171
class Client(BaseClient):
174172
def __init__(
@@ -292,7 +290,7 @@ async def async_generate(
292290
proxy = self.client.proxy
293291

294292
response = None
295-
if isinstance(provider, type) and issubclass(provider, AsyncGeneratorProvider):
293+
if hasattr(provider_handler, "create_async_generator"):
296294
messages = [{"role": "user", "content": f"Generate a image: {prompt}"}]
297295
async for item in provider_handler.create_async_generator(model, messages, prompt=prompt, **kwargs):
298296
if isinstance(item, ImageResponse):
@@ -354,7 +352,7 @@ async def async_create_variation(
354352
if proxy is None:
355353
proxy = self.client.proxy
356354

357-
if isinstance(provider, type) and issubclass(provider, AsyncGeneratorProvider):
355+
if hasattr(provider, "create_async_generator"):
358356
messages = [{"role": "user", "content": "create a variation of this image"}]
359357
generator = None
360358
try:
@@ -364,8 +362,7 @@ async def async_create_variation(
364362
response = chunk
365363
break
366364
finally:
367-
if generator and hasattr(generator, 'aclose'):
368-
await safe_aclose(generator)
365+
await safe_aclose(generator)
369366
elif hasattr(provider, 'create_variation'):
370367
if asyncio.iscoroutinefunction(provider.create_variation):
371368
response = await provider.create_variation(image, model=model, response_format=response_format, proxy=proxy, **kwargs)
@@ -454,7 +451,11 @@ def create(
454451
)
455452
stop = [stop] if isinstance(stop, str) else stop
456453

457-
response = provider.create_completion(
454+
if hasattr(provider, "create_async_generator"):
455+
create_handler = provider.create_async_generator
456+
else:
457+
create_handler = provider.create_completion
458+
response = create_handler(
458459
model,
459460
messages,
460461
stream=stream,

g4f/client/helper.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ def filter_none(**kwargs) -> dict:
4646

4747
async def safe_aclose(generator: AsyncGenerator) -> None:
4848
try:
49-
await generator.aclose()
49+
if generator and hasattr(generator, 'aclose'):
50+
await generator.aclose()
5051
except Exception as e:
5152
logging.warning(f"Error while closing generator: {e}")
5253

0 commit comments

Comments
 (0)