Skip to content

Commit 62d4c8f

Browse files
authored
cogvideo 业务集成 (#44)
1 parent 87f0652 commit 62d4c8f

File tree

8 files changed

+183
-0
lines changed

8 files changed

+183
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from zhipuai import ZhipuAI
2+
import zhipuai
3+
4+
import logging
5+
import logging.config
6+
7+
8+
def test_videos(logging_conf):
9+
logging.config.dictConfig(logging_conf) # type: ignore
10+
client = ZhipuAI() # 填写您自己的APIKey
11+
try:
12+
response = client.videos.generations(
13+
model="cogvideo",
14+
prompt="一些相信光的人,举着奥特曼"
15+
)
16+
print(response)
17+
18+
19+
20+
except zhipuai.core._errors.APIRequestFailedError as err:
21+
print(err)
22+
except zhipuai.core._errors.APIInternalError as err:
23+
print(err)
24+
except zhipuai.core._errors.APIStatusError as err:
25+
print(err)
26+
27+
28+
def test_retrieve_videos_result(logging_conf):
29+
logging.config.dictConfig(logging_conf) # type: ignore
30+
client = ZhipuAI() # 填写您自己的APIKey
31+
try:
32+
response = client.videos.retrieve_videos_result(
33+
id="1014908828144164571910908"
34+
)
35+
print(response)
36+
37+
38+
except zhipuai.core._errors.APIRequestFailedError as err:
39+
print(err)
40+
except zhipuai.core._errors.APIInternalError as err:
41+
print(err)
42+
except zhipuai.core._errors.APIStatusError as err:
43+
print(err)

zhipuai/_client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ def __init__(
6060
self.batches = api_resource.Batches(self)
6161
self.knowledge = api_resource.Knowledge(self)
6262
self.tools = api_resource.Tools(self)
63+
self.videos = api_resource.Videos(self)
6364

6465
@property
6566
@override

zhipuai/api_resource/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@
2727
from .tools import (
2828
Tools
2929
)
30+
from .videos import (
31+
Videos,
32+
)
3033
__all__ = [
34+
'Videos',
3135
'AsyncCompletions',
3236
'Chat',
3337
'Completions',
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from .videos import (
2+
Videos,
3+
)
4+
__all__ = [
5+
'Videos',
6+
7+
]

zhipuai/api_resource/videos/videos.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
from __future__ import annotations
2+
3+
4+
from typing import TYPE_CHECKING, List, Mapping, cast, Optional, Dict
5+
from typing_extensions import Literal
6+
7+
from ...types.video import video_create_params
8+
from ...types.video import VideoObject
9+
from ...core import BaseAPI, maybe_transform
10+
from ...core import NOT_GIVEN, Body, Headers, NotGiven
11+
12+
import httpx
13+
14+
from ...core import (
15+
make_request_options,
16+
)
17+
from ...core import deepcopy_minimal, extract_files
18+
19+
if TYPE_CHECKING:
20+
from ..._client import ZhipuAI
21+
22+
__all__ = ["Videos"]
23+
24+
25+
class Videos(BaseAPI):
26+
27+
def __init__(self, client: "ZhipuAI") -> None:
28+
super().__init__(client)
29+
30+
def generations(
31+
self,
32+
model: str,
33+
prompt: str,
34+
*,
35+
request_id: str = None,
36+
extra_headers: Headers | None = None,
37+
extra_body: Body | None = None,
38+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
39+
) -> VideoObject:
40+
41+
if not model and not model:
42+
raise ValueError("At least one of `model` and `prompt` must be provided.")
43+
body = deepcopy_minimal(
44+
{
45+
"model": model,
46+
"prompt": prompt,
47+
"request_id": request_id,
48+
}
49+
)
50+
return self._post(
51+
"/videos/generations",
52+
body=maybe_transform(body, video_create_params.VideoCreateParams),
53+
options=make_request_options(
54+
extra_headers=extra_headers, extra_body=extra_body, timeout=timeout
55+
),
56+
cast_type=VideoObject,
57+
)
58+
59+
def retrieve_videos_result(
60+
self,
61+
id: str,
62+
*,
63+
extra_headers: Headers | None = None,
64+
extra_body: Body | None = None,
65+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
66+
) -> VideoObject:
67+
68+
if not id:
69+
raise ValueError("At least one of `id` must be provided.")
70+
71+
return self._get(
72+
f"/async-result/{id}",
73+
options=make_request_options(
74+
extra_headers=extra_headers, extra_body=extra_body, timeout=timeout
75+
),
76+
cast_type=VideoObject,
77+
)

zhipuai/types/video/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
from .video_object import (
3+
VideoObject,
4+
VideoResult
5+
)
6+
7+
__all__ = ["VideoObject", "VideoResult"]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from __future__ import annotations
2+
3+
from typing import List, Optional
4+
5+
from typing_extensions import Literal, Required, TypedDict
6+
7+
__all__ = ["VideoCreateParams"]
8+
9+
10+
class VideoCreateParams(TypedDict, total=False):
11+
model: str
12+
"""模型编码"""
13+
prompt: str
14+
"""所需视频的文本描述"""
15+
request_id: str
16+
"""由用户端传参,需保证唯一性;用于区分每次请求的唯一标识,用户端不传时平台会默认生成。"""

zhipuai/types/video/video_object.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from typing import Optional, List
2+
3+
from ...core import BaseModel
4+
5+
__all__ = ["VideoObject", "VideoResult"]
6+
7+
8+
class VideoResult(BaseModel):
9+
url: str
10+
"""视频url"""
11+
12+
13+
class VideoObject(BaseModel):
14+
id: Optional[str] = None
15+
"""智谱 AI 开放平台生成的任务订单号,调用请求结果接口时请使用此订单号"""
16+
17+
model: str
18+
"""模型名称"""
19+
20+
video_result: List[VideoResult]
21+
"""视频生成结果"""
22+
23+
task_status: str
24+
"""处理状态,PROCESSING(处理中),SUCCESS(成功),FAIL(失败)
25+
注:处理中状态需通过查询获取结果"""
26+
27+
request_id: str
28+
"""用户在客户端请求时提交的任务编号或者平台生成的任务编号"""

0 commit comments

Comments
 (0)