""" HTMLバリアント生成API 允E�EHTMLと変更点を受け取り、Eつの新しいHTMLを提案すめE """ import os from src.clients.llm_client import LLMClient import json import re from typing import List from pydantic import BaseModel, Field from datetime import datetime import pytz from src.utils.tracer import customtracer def _ask_raw_hf(messages, model, response_format=None): """Compatibility wrapper: routes OpenAI-style messages through HF LLMClient.""" from src.clients.llm_client import LLMClient import json as _json client = LLMClient() system_prompt = None user_text = "" images = [] for msg in messages: role = msg.get("role", "") c = msg.get("content", "") if role == "system": if isinstance(c, str): system_prompt = c elif role == "user": if isinstance(c, str): user_text = c elif isinstance(c, list): for part in c: if isinstance(part, dict): if part.get("type") == "text": user_text += part.get("text", "") elif part.get("type") == "image_url": url = part.get("image_url", {}).get("url", "") if url.startswith("data:"): images.append(url.split(",", 1)[1] if "," in url else url) else: images.append(url) if response_format is not None and hasattr(response_format, "model_json_schema"): result = client.call( prompt=user_text, schema=response_format, model=model, system_prompt=system_prompt, images=images if images else None, temperature=0, ) return _json.dumps(result.model_dump(), ensure_ascii=False) else: return client.call_raw( prompt=user_text, model=model, system_prompt=system_prompt, images=images if images else None, ) class HtmlVariant(BaseModel): html : str description: str changes: list[str] class HtmlVariantsResponse(BaseModel): variants : list[HtmlVariant] def get_openai_request(messages, format, openai_key): """OpenAI APIを呼び出ぁE"" client = LLMClient() response = _ask_raw_hf([{"role":"user","content":p}], model, model="meta-llama/Llama-3.3-70B-Instruct", messages=messages, top_p=1, frequency_penalty=0, presence_penalty=0, response_format=format, temperature=0.7 # バリエーションを�Eすため少し高めに設宁E ) return response @customtracer def html2variants(original_html: str, change_points: str, openai_key=os.environ.get('OPENAI_KEY')): """ input1 (text):