| from openai import AzureOpenAI |
| import json |
| import time |
| import pandas as pd |
|
|
| client = AzureOpenAI( |
| |
| api_version="2025-01-01-preview", |
| api_key="M4hT7ULYSumBpJ3rREIyf0Xxd286HwKG", |
| |
| azure_endpoint="http://api.gameai-llm.woa.com/llm-service/azure/public", |
| ) |
|
|
| local_assets = pd.read_excel("../assets/copy.xlsx", skiprows=2) |
| captions = local_assets["caption_clip"].tolist() |
|
|
| |
| def generate_room_descriptions(n=100, batch_size=50): |
| descriptions = [] |
| |
| prompt_template = """Generate {count} unique, simple and clear room descriptions. |
| Each user_input should include both a description of the room and a brief scene setup. |
| Provide 0 to 5 simple and common objects in the user_input. The objects can only be chosen from {captions}. |
| Moreover, the length and width of the room are 5.0 meters, and the height is 3.0 meters. |
| The description should not include spatial relationships (front, back, left, right, above, under, etc.) and should not mention doors or windows. |
| The description should not include words like 'high-poly', 'material', 'high quality' or similar terms. |
| The output format should be a JSON list where each item is formatted as: |
| {{ |
| "user_input": "<room description>", |
| }} |
| |
| Examples: |
| [ |
| {{ |
| "user_input": "A cozy living room in a warm style with a brown fabric sofa, a brand new large screen TV with thin bezel and stand.", |
| }}, |
| {{ |
| "user_input": "This is a kid bedroom. There is a single bed, a modern style minimalist dressing table with drawers, and a folding wooden dining chair.", |
| }}, |
| {{ |
| "user_input": "Design me a room with a rectangular billiard table in entertainment area. The room should have a modern style.", |
| }} |
| ... |
| ] |
| |
| Now generate {count} descriptions following this format. |
| """ |
|
|
| for i in range(0, n, batch_size): |
| count = min(batch_size, n - i) |
| prompt = prompt_template.format(count=count, captions=captions) |
|
|
| try: |
| response = client.chat.completions.create( |
| model="gpt-4-1106-Preview", |
| messages=[{"role": "system", "content": "You are a creative assistant generating structured room descriptions, with a focus on meeting human practical needs."}, |
| {"role": "user", "content": prompt}], |
| temperature=0.7, |
| seed=35 |
| ) |
| result = json.loads(response.choices[0].message.content.strip("```json\n").strip("```")) |
| descriptions.extend(result) |
|
|
| except Exception as e: |
| print(f"Error at batch {i}: {e}") |
| time.sleep(0.2) |
| |
| |
| time.sleep(0.1) |
| print('--------------------------------') |
| print(f"Generated {i+count} descriptions") |
| print('--------------------------------') |
|
|
| return descriptions |
|
|
| import time |
| start_time = time.time() |
| |
| room_data = generate_room_descriptions(n=400, batch_size=50) |
| end_time = time.time() |
| print(f"Time taken: {(end_time - start_time) / 60} minutes") |
|
|
| |
| file_path = "8.json" |
| with open(file_path, "w") as f: |
| json.dump(room_data, f) |
|
|
| print(f"Room descriptions saved to: {file_path}") |
|
|