feat: Add use_profile_image and detailed token usage fields to generation models.
This commit is contained in:
Binary file not shown.
@@ -131,9 +131,17 @@ class GoogleAdapter:
|
|||||||
else:
|
else:
|
||||||
logger.warning("No images text generated from parts")
|
logger.warning("No images text generated from parts")
|
||||||
|
|
||||||
|
input_tokens = 0
|
||||||
|
output_tokens = 0
|
||||||
|
if response.usage_metadata:
|
||||||
|
input_tokens = response.usage_metadata.prompt_token_count
|
||||||
|
output_tokens = response.usage_metadata.candidates_token_count
|
||||||
|
|
||||||
metrics = {
|
metrics = {
|
||||||
"api_execution_time_seconds": api_duration,
|
"api_execution_time_seconds": api_duration,
|
||||||
"token_usage": token_usage
|
"token_usage": token_usage,
|
||||||
|
"input_token_usage": input_tokens,
|
||||||
|
"output_token_usage": output_tokens
|
||||||
}
|
}
|
||||||
return generated_images, metrics
|
return generated_images, metrics
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class GenerationRequest(BaseModel):
|
|||||||
quality: Quality = Quality.ONEK
|
quality: Quality = Quality.ONEK
|
||||||
prompt: str
|
prompt: str
|
||||||
telegram_id: Optional[int] = None
|
telegram_id: Optional[int] = None
|
||||||
|
use_profile_image: bool = True
|
||||||
assets_list: List[str]
|
assets_list: List[str]
|
||||||
|
|
||||||
|
|
||||||
@@ -32,6 +33,8 @@ class GenerationResponse(BaseModel):
|
|||||||
execution_time_seconds: Optional[float] = None
|
execution_time_seconds: Optional[float] = None
|
||||||
api_execution_time_seconds: Optional[float] = None
|
api_execution_time_seconds: Optional[float] = None
|
||||||
token_usage: Optional[int] = None
|
token_usage: Optional[int] = None
|
||||||
|
input_token_usage: Optional[int] = None
|
||||||
|
output_token_usage: Optional[int] = None
|
||||||
progress: int = 0
|
progress: int = 0
|
||||||
created_at: datetime = datetime.now(UTC)
|
created_at: datetime = datetime.now(UTC)
|
||||||
updated_at: datetime = datetime.now(UTC)
|
updated_at: datetime = datetime.now(UTC)
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -154,7 +154,8 @@ class GenerationService:
|
|||||||
char_info = await self.dao.chars.get_character(generation.linked_character_id, with_image_data=True)
|
char_info = await self.dao.chars.get_character(generation.linked_character_id, with_image_data=True)
|
||||||
if char_info is None:
|
if char_info is None:
|
||||||
raise Exception(f"Character ID {generation.linked_character_id} not found")
|
raise Exception(f"Character ID {generation.linked_character_id} not found")
|
||||||
media_group_bytes.append(char_info.character_image_data)
|
if generation.use_profile_image:
|
||||||
|
media_group_bytes.append(char_info.character_image_data)
|
||||||
generation_prompt = f"""You are creating image for {char_info.character_bio}"""
|
generation_prompt = f"""You are creating image for {char_info.character_bio}"""
|
||||||
|
|
||||||
reference_assets = await self.dao.assets.get_assets_by_ids(generation.assets_list)
|
reference_assets = await self.dao.assets.get_assets_by_ids(generation.assets_list)
|
||||||
@@ -182,9 +183,12 @@ class GenerationService:
|
|||||||
gemini=self.gemini
|
gemini=self.gemini
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Update metrics from API (Common for both)
|
||||||
# Update metrics from API (Common for both)
|
# Update metrics from API (Common for both)
|
||||||
generation.api_execution_time_seconds = metrics.get("api_execution_time_seconds")
|
generation.api_execution_time_seconds = metrics.get("api_execution_time_seconds")
|
||||||
generation.token_usage = metrics.get("token_usage")
|
generation.token_usage = metrics.get("token_usage")
|
||||||
|
generation.input_token_usage = metrics.get("input_token_usage")
|
||||||
|
generation.output_token_usage = metrics.get("output_token_usage")
|
||||||
|
|
||||||
except GoogleGenerationException as e:
|
except GoogleGenerationException as e:
|
||||||
generation.status = GenerationStatus.FAILED
|
generation.status = GenerationStatus.FAILED
|
||||||
@@ -247,7 +251,7 @@ class GenerationService:
|
|||||||
end_time = datetime.now()
|
end_time = datetime.now()
|
||||||
generation.execution_time_seconds = (end_time - start_time).total_seconds()
|
generation.execution_time_seconds = (end_time - start_time).total_seconds()
|
||||||
|
|
||||||
logger.info(f"DEBUG: Saving generation {generation.id}. Metrics: api_exec={generation.api_execution_time_seconds}, tokens={generation.token_usage}, exec={generation.execution_time_seconds}")
|
logger.info(f"DEBUG: Saving generation {generation.id}. Metrics: api_exec={generation.api_execution_time_seconds}, tokens={generation.token_usage}, in_tokens={generation.input_token_usage}, out_tokens={generation.output_token_usage}, exec={generation.execution_time_seconds}")
|
||||||
|
|
||||||
await self.dao.generations.update_generation(generation)
|
await self.dao.generations.update_generation(generation)
|
||||||
logger.info(f"Generation {generation.id} completed successfully. {len(created_assets)} assets created. Total Time: {generation.execution_time_seconds:.2f}s")
|
logger.info(f"Generation {generation.id} completed successfully. {len(created_assets)} assets created. Total Time: {generation.execution_time_seconds:.2f}s")
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ class Generation(BaseModel):
|
|||||||
failed_reason: Optional[str] = None
|
failed_reason: Optional[str] = None
|
||||||
linked_character_id: Optional[str] = None
|
linked_character_id: Optional[str] = None
|
||||||
telegram_id: Optional[int] = None
|
telegram_id: Optional[int] = None
|
||||||
|
use_profile_image: bool = True
|
||||||
aspect_ratio: AspectRatios
|
aspect_ratio: AspectRatios
|
||||||
quality: Quality
|
quality: Quality
|
||||||
prompt: str
|
prompt: str
|
||||||
@@ -29,6 +30,8 @@ class Generation(BaseModel):
|
|||||||
execution_time_seconds: Optional[float] = None
|
execution_time_seconds: Optional[float] = None
|
||||||
api_execution_time_seconds: Optional[float] = None
|
api_execution_time_seconds: Optional[float] = None
|
||||||
token_usage: Optional[int] = None
|
token_usage: Optional[int] = None
|
||||||
|
input_token_usage: Optional[int] = None
|
||||||
|
output_token_usage: Optional[int] = None
|
||||||
|
|
||||||
created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
|
created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
|
||||||
updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
|
updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user