Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -14,6 +14,7 @@ import uuid
|
|
14 |
from langgraph.graph import StateGraph, END
|
15 |
import logging
|
16 |
from typing import Dict, TypedDict, Optional, Any, List
|
|
|
17 |
|
18 |
# --- Configure logging ---
|
19 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
@@ -26,9 +27,18 @@ BLOCKS_FOLDER = "blocks/"
|
|
26 |
GEN_PROJECT_FOLDER = "generated_projects/"
|
27 |
STATIC_FOLDER = "static/"
|
28 |
|
29 |
-
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
|
33 |
# --- LLM / Vision model setup ---
|
34 |
os.environ["GROQ_API_KEY"] = os.getenv("GROQ_API_KEY_2", "default_key_or_placeholder")
|
@@ -237,23 +247,28 @@ def update_project_with_sprite_positions(project_json: dict, sprite_positions: d
|
|
237 |
return updated_project
|
238 |
|
239 |
# Helper function to load the block catalog from a JSON file
|
240 |
-
def
|
241 |
-
"""
|
|
|
|
|
|
|
|
|
|
|
242 |
try:
|
243 |
-
|
244 |
-
|
245 |
-
logger.info(f"Successfully loaded block catalog from {
|
246 |
return catalog
|
|
|
247 |
except FileNotFoundError:
|
248 |
-
logger.error(f"Error: Block catalog file not found at {
|
249 |
-
# Return an empty dict or raise an error, depending on desired behavior
|
250 |
-
return {}
|
251 |
except json.JSONDecodeError as e:
|
252 |
-
logger.error(f"Error decoding JSON from {
|
253 |
-
return {}
|
254 |
except Exception as e:
|
255 |
-
logger.error(f"
|
256 |
-
|
|
|
|
|
257 |
|
258 |
# --- Global variable for the block catalog ---
|
259 |
ALL_SCRATCH_BLOCKS_CATALOG = {}
|
|
|
14 |
from langgraph.graph import StateGraph, END
|
15 |
import logging
|
16 |
from typing import Dict, TypedDict, Optional, Any, List
|
17 |
+
from pathlib import Path
|
18 |
|
19 |
# --- Configure logging ---
|
20 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
|
|
27 |
GEN_PROJECT_FOLDER = "generated_projects/"
|
28 |
STATIC_FOLDER = "static/"
|
29 |
|
30 |
+
BASE_DIR = Path(__file__).parent
|
31 |
+
BLOCKS_DIR = BASE_DIR / "blocks"
|
32 |
+
STATIC_DIR = BASE_DIR / "static"
|
33 |
+
GEN_PROJECT_DIR = BASE_DIR / "generated_projects"
|
34 |
+
ASSET_DIR = STATIC_DIR / "assets"
|
35 |
+
BACKDROP_DIR = ASSET_DIR / "backdrops"
|
36 |
+
SPRITE_DIR = ASSET_DIR / "sprites"
|
37 |
+
SOUND_DIR = ASSET_DIR / "sounds"
|
38 |
+
|
39 |
+
# Create them if they're missing:
|
40 |
+
for d in (BLOCKS_DIR, STATIC_DIR, GEN_PROJECT_DIR, ASSET_DIR, BACKDROP_DIR, SPRITE_DIR, SOUND_DIR):
|
41 |
+
d.mkdir(parents=True, exist_ok=True)
|
42 |
|
43 |
# --- LLM / Vision model setup ---
|
44 |
os.environ["GROQ_API_KEY"] = os.getenv("GROQ_API_KEY_2", "default_key_or_placeholder")
|
|
|
247 |
return updated_project
|
248 |
|
249 |
# Helper function to load the block catalog from a JSON file
|
250 |
+
def _load_block_catalog_safe(block_type: str) -> Dict:
|
251 |
+
"""
|
252 |
+
Loads the Scratch block catalog named '{block_type}_blocks.json'
|
253 |
+
from the <project_root>/blocks/ folder. Returns {} on any error.
|
254 |
+
"""
|
255 |
+
catalog_path = BLOCKS_DIR / f"{block_type}_blocks.json"
|
256 |
+
|
257 |
try:
|
258 |
+
text = catalog_path.read_text() # will raise FileNotFoundError if missing
|
259 |
+
catalog = json.loads(text) # will raise JSONDecodeError if malformed
|
260 |
+
logger.info(f"Successfully loaded block catalog from {catalog_path}")
|
261 |
return catalog
|
262 |
+
|
263 |
except FileNotFoundError:
|
264 |
+
logger.error(f"Error: Block catalog file not found at {catalog_path}")
|
|
|
|
|
265 |
except json.JSONDecodeError as e:
|
266 |
+
logger.error(f"Error decoding JSON from {catalog_path}: {e}")
|
|
|
267 |
except Exception as e:
|
268 |
+
logger.error(f"Unexpected error loading {catalog_path}: {e}")
|
269 |
+
|
270 |
+
# In all error cases, return an empty dict so the rest of your app can continue
|
271 |
+
return {}
|
272 |
|
273 |
# --- Global variable for the block catalog ---
|
274 |
ALL_SCRATCH_BLOCKS_CATALOG = {}
|