diff --git a/slop_with_models.py b/slop_with_models.py index 4ac055f..df49f02 100644 --- a/slop_with_models.py +++ b/slop_with_models.py @@ -68,6 +68,8 @@ def save_memory_to_file(memory_data): try: with open(MEMORY_FILE, "w") as f: json.dump(memory_data, f) + f.flush() # Ensure write is completed + os.fsync(f.fileno()) # Sync to disk logger.debug(f"Saved memory to {MEMORY_FILE}: {memory_data}") except Exception as e: logger.error(f"Error saving memory to {MEMORY_FILE}: {str(e)}", exc_info=True) @@ -111,6 +113,8 @@ def save_resources_to_file(resources_data): try: with open(RESOURCES_FILE, "w") as f: json.dump(resources_data, f) + f.flush() # Ensure write is completed + os.fsync(f.fileno()) # Sync to disk logger.debug(f"Saved resources to {RESOURCES_FILE}: {resources_data}") except Exception as e: logger.error( @@ -247,7 +251,7 @@ tools = { }, } -# Load resources from file at startup +# Load resources from file at startup (initial load only) resources = load_resources_from_file() @@ -255,6 +259,7 @@ resources = load_resources_from_file() def get_or_create_wallet(agent_id): wallet_key = f"casino/wallet/agent_{agent_id}" with resource_lock: + resources = load_resources_from_file() # Always load fresh if wallet_key not in resources: resources[wallet_key] = { "id": wallet_key, @@ -268,6 +273,7 @@ def get_or_create_wallet(agent_id): def get_or_create_stats(game, agent_id): stats_key = f"casino/{game}/stats/agent_{agent_id}" with resource_lock: + resources = load_resources_from_file() # Always load fresh if stats_key not in resources: if game == "slots": resources[stats_key] = { @@ -299,10 +305,8 @@ def get_or_create_stats(game, agent_id): def update_resource(resource_id, new_content): with resource_lock: - # If the resource doesn't exist, initialize it with the correct structure - if resource_id not in resources: - resources[resource_id] = {"id": resource_id, "content": None} - resources[resource_id]["content"] = new_content + resources = load_resources_from_file() # Always load fresh + resources[resource_id] = {"id": resource_id, "content": new_content} save_resources_to_file(resources) logger.debug(f"Updated resource {resource_id}: {new_content}") @@ -438,7 +442,12 @@ def play_blackjack(bet, agent_id, game_id=None, action=None): # Continue an existing game game_key = f"casino/blackjack/games/{game_id}" with resource_lock: + resources = load_resources_from_file() + logger.debug( + f"Checking for game {game_key} in resources: {list(resources.keys())}" + ) if game_key not in resources: + logger.warning(f"Game {game_id} not found in resources") return {"error": f"Game {game_id} not found"} game_state = resources[game_key]["content"] @@ -447,6 +456,7 @@ def play_blackjack(bet, agent_id, game_id=None, action=None): if game_state["status"] != "active": return {"error": "This game is already complete"} if action not in ["hit", "stand"]: + logger.warning(f"Invalid action '{action}' received for game {game_id}") return {"error": "Action must be 'hit' or 'stand'"} wallet = get_or_create_wallet(agent_id) @@ -761,6 +771,7 @@ def use_tool(tool_id): def list_resources(): logger.info("Received /resources request") with resource_lock: + resources = load_resources_from_file() resource_list = list(resources.values()) logger.debug(f"Returning resources: {resource_list}") return jsonify({"resources": resource_list}), 200 @@ -770,8 +781,6 @@ def list_resources(): def get_resource(resource_id): logger.info(f"Received /resources/{resource_id} GET request") with resource_lock: - # Reload resources to ensure we have the latest state - global resources resources = load_resources_from_file() logger.debug(f"Resources after reload: {list(resources.keys())}") if resource_id in resources: @@ -802,6 +811,7 @@ def update_resource_endpoint(resource_id): logger.warning(f"Invalid resource update request: {data}") return jsonify({"error": "Missing 'content'"}), 400 with resource_lock: + resources = load_resources_from_file() resources[resource_id] = {"id": resource_id, "content": data["content"]} save_resources_to_file(resources) logger.info(f"Updated/created resource {resource_id}: {resources[resource_id]}")