Skip to content
This repository was archived by the owner on Mar 15, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions src/creative_agent/schemas/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,13 @@ class BuildCreativeRequest(BaseModel):
"""Request to build a creative (AdCP spec)."""

message: str # Creative brief or refinement instructions
format_id: str
target_format_id: str
format_source: HttpUrl | None = None
output_mode: Literal["manifest", "code"] = "manifest"
context_id: str | None = None # For iterative refinement
assets: list[AssetReference] = []
preview_options: PreviewOptions | None = None
finalize: bool = False
# User must provide their own Gemini API key
gemini_api_key: str | None = None


class CreativeOutput(BaseModel):
Expand Down
10 changes: 6 additions & 4 deletions src/creative_agent/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -417,18 +417,19 @@ def build_creative(
target_format_id: str | dict[str, Any],
creative_manifest: dict[str, Any] | None = None,
message: str | None = None,
gemini_api_key: str | None = None,
) -> ToolResult:
"""Transform or generate a creative manifest using AI.

Args:
target_format_id: Format ID to generate (string or FormatId object with agent_url and id)
creative_manifest: Source creative manifest with input assets (e.g., promoted_offerings for generative formats)
message: Natural language instructions for transformation or generation
gemini_api_key: User's Gemini API key for AI generation

Returns:
ToolResult with creative_manifest in structured_content

Note:
Requires GEMINI_API_KEY environment variable to be set for generative formats.
"""
try:
# Parse target_format_id
Expand Down Expand Up @@ -474,9 +475,10 @@ def build_creative(
structured_content={"error": error_msg},
)

# Validate gemini_api_key is provided for generation
# Get Gemini API key from environment
gemini_api_key = os.getenv("GEMINI_API_KEY")
if not gemini_api_key:
error_msg = "gemini_api_key is required for generative formats. Get one at https://ai.google.dev/"
error_msg = "GEMINI_API_KEY environment variable is required for generative formats. Get a key at https://ai.google.dev/"
return ToolResult(
content=[TextContent(type="text", text=f"Error: {error_msg}")],
structured_content={"error": error_msg},
Expand Down