Skip to content

Commit f98235f

Browse files
2 parents d9e7f89 + afc881e commit f98235f

File tree

11 files changed

+41
-42
lines changed

11 files changed

+41
-42
lines changed

content-gen/scripts/create_image_search_index.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
"""
1111

1212
import asyncio
13-
import json
1413
import os
1514
import sys
1615
from pathlib import Path

content-gen/scripts/post_deploy.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,11 @@
3636
import argparse
3737
import asyncio
3838
import base64
39-
import json
4039
import os
4140
import sys
42-
import time
4341
from dataclasses import dataclass
4442
from pathlib import Path
45-
from typing import Optional, List, Dict, Any
43+
from typing import Dict
4644

4745
try:
4846
import httpx

content-gen/scripts/sample_content_generation.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import asyncio
2929
import argparse
3030
import json
31-
import os
3231
import sys
3332
from datetime import datetime
3433
from pathlib import Path
@@ -288,7 +287,7 @@ async def main():
288287

289288
# Generate content
290289
try:
291-
result = await generate_content_sample(
290+
await generate_content_sample(
292291
brief=brief,
293292
products=products,
294293
generate_images=not args.no_images,

content-gen/scripts/test_content_generation.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
"""
1313

1414
import asyncio
15-
import json
1615
import sys
1716
import os
1817
from typing import Dict, Any

content-gen/src/backend/app.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -661,8 +661,6 @@ async def generate_content():
661661
662662
Returns streaming response with generated content.
663663
"""
664-
import asyncio
665-
666664
data = await request.get_json()
667665

668666
brief_data = data.get("brief", {})
@@ -861,8 +859,6 @@ async def regenerate_content():
861859
862860
Returns regenerated image with the modification applied.
863861
"""
864-
import asyncio
865-
866862
data = await request.get_json()
867863

868864
modification_request = data.get("modification_request", "")

content-gen/src/backend/orchestrator.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1526,11 +1526,12 @@ async def generate_content(
15261526
try:
15271527
prompt_data = json.loads(json_match.group(1))
15281528
prompt_text = prompt_data.get('prompt', prompt_data.get('image_prompt', prompt_text))
1529-
except Exception:
1529+
except Exception as parse_error:
1530+
# Best-effort JSON extraction from markdown code block; on failure,
1531+
# fall back to the original prompt_text without interrupting image generation.
15301532
logger.debug(
1531-
"Failed to parse JSON image prompt from markdown code block; "
1532-
"continuing with original prompt_text.",
1533-
exc_info=True
1533+
"Failed to parse JSON from markdown code block for image prompt: %s",
1534+
parse_error,
15341535
)
15351536

15361537
# Build product description for image generation context
@@ -1595,8 +1596,13 @@ async def generate_content(
15951596
for v in results["violations"]
15961597
)
15971598
except (json.JSONDecodeError, KeyError):
1598-
# Failed to parse compliance response JSON; violations will remain empty
1599-
logger.debug("Could not parse compliance violations from response", exc_info=True)
1599+
# If the compliance response is not valid JSON or missing expected keys,
1600+
# continue without structured violations data but log for observability.
1601+
logger.debug(
1602+
"Could not parse structured compliance violations from response; "
1603+
"proceeding without 'violations' / 'requires_modification'.",
1604+
exc_info=True,
1605+
)
16001606

16011607
except Exception as e:
16021608
logger.exception(f"Error generating content: {e}")
@@ -1764,13 +1770,10 @@ async def regenerate_image(
17641770
prompt_data = json.loads(json_match.group(1))
17651771
prompt_text = prompt_data.get('prompt', prompt_text)
17661772
change_summary = prompt_data.get('change_summary', modification_request)
1767-
except Exception:
1768-
# If JSON extraction fails here, fall back to the original
1769-
# prompt_text and change_summary values set earlier.
1773+
except Exception as parse_error:
17701774
logger.debug(
1771-
"Failed to parse JSON from markdown in regenerate_image; "
1772-
"using original prompt_text and modification_request.",
1773-
exc_info=True
1775+
"Failed to parse JSON from image modification response fallback: %s",
1776+
parse_error,
17741777
)
17751778

17761779
results["image_prompt"] = prompt_text

content-gen/src/backend/services/cosmos_service.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,8 +308,13 @@ async def get_conversation(
308308
max_item_count=1
309309
):
310310
return item
311-
except Exception:
312-
pass
311+
except Exception as exc:
312+
logger.warning(
313+
"Cross-partition conversation lookup failed for id=%s, user_id=%s: %s",
314+
conversation_id,
315+
user_id,
316+
exc,
317+
)
313318

314319
return None
315320

content-gen/tests/rai_testing.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,9 @@
2626
import argparse
2727
import asyncio
2828
import json
29-
import os
30-
import subprocess
3129
import sys
3230
import time
33-
from dataclasses import dataclass, asdict
31+
from dataclasses import dataclass
3432
from datetime import datetime
3533
from enum import Enum
3634
from pathlib import Path
@@ -41,9 +39,17 @@
4139
# Try to import Azure Identity for auth
4240
try:
4341
from azure.identity import AzureCliCredential, InteractiveBrowserCredential
44-
AZURE_IDENTITY_AVAILABLE = True
4542
except ImportError:
46-
AZURE_IDENTITY_AVAILABLE = False
43+
# Azure Identity is optional; provide stubs that fail clearly if Azure auth is requested.
44+
class _MissingAzureIdentityCredential:
45+
def __init__(self, *args, **kwargs) -> None:
46+
raise RuntimeError(
47+
"The 'azure-identity' package is required to use '--use-azure-auth'. "
48+
"Install it with 'pip install azure-identity' and try again."
49+
)
50+
51+
AzureCliCredential = _MissingAzureIdentityCredential
52+
InteractiveBrowserCredential = _MissingAzureIdentityCredential
4753

4854

4955
class TestCategory(Enum):
@@ -966,7 +972,7 @@ async def main():
966972

967973
# Generate report
968974
report_path = runner.generate_report(args.output_dir)
969-
print(f"\nReports saved to: {args.output_dir}")
975+
print(f"\nReports saved to: {report_path}")
970976

971977
return runner.print_summary()
972978

content-gen/tests/test_agents.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22
Unit tests for the Content Generation agents.
33
"""
44

5-
import pytest
6-
from unittest.mock import AsyncMock, MagicMock, patch
7-
8-
from backend.models import CreativeBrief, Product, ComplianceSeverity
5+
from backend.models import CreativeBrief, Product
96
from backend.agents.text_content_agent import validate_text_compliance
107
from backend.agents.compliance_agent import comprehensive_compliance_check
118

docs/generate_architecture.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from diagrams.azure.compute import ContainerInstances, AppServices, ContainerRegistries
1616
from diagrams.azure.database import CosmosDb, BlobStorage
1717
from diagrams.azure.ml import CognitiveServices
18-
from diagrams.azure.network import VirtualNetworks, PrivateEndpoint, DNSZones
18+
from diagrams.azure.network import PrivateEndpoint
1919
from diagrams.azure.analytics import AnalysisServices
2020
from diagrams.onprem.client import User
2121

0 commit comments

Comments
 (0)