To solve Julia's dietary optimization problem, we can formulate it as a linear programming (LP) problem. The goal is to minimize the total cost of her diet while ensuring she meets her daily requirements for protein and carbohydrates without exceeding the limit for fat intake.

Let's define the variables:
- \(x_1\): Number of servings of vanilla protein bars
- \(x_2\): Number of servings of organic meal replacement shakes

The objective function to minimize is the total cost: \(10x_1 + 15x_2\).

The constraints are as follows:
1. Protein requirement: \(30x_1 + 10x_2 \geq 155\)
2. Carbohydrate requirement: \(50x_1 + 20x_2 \geq 140\)
3. Fat limit: \(2x_1 + 5x_2 \leq 55\)

Since Julia cannot consume a negative number of servings, we also have:
- \(x_1 \geq 0\)
- \(x_2 \geq 0\)

Now, let's translate this problem into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
m = Model("Julia_Diet")

# Define the variables
x1 = m.addVar(name="vanilla_protein_bars", vtype=GRB.CONTINUOUS, lb=0)
x2 = m.addVar(name="organic_meal_replacement_shakes", vtype=GRB.CONTINUOUS, lb=0)

# Set the objective function
m.setObjective(10*x1 + 15*x2, GRB.MINIMIZE)

# Add constraints
m.addConstr(30*x1 + 10*x2 >= 155, name="protein_requirement")
m.addConstr(50*x1 + 20*x2 >= 140, name="carbohydrate_requirement")
m.addConstr(2*x1 + 5*x2 <= 55, name="fat_limit")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Vanilla protein bars: {x1.x}")
    print(f"Organic meal replacement shakes: {x2.x}")
    print(f"Total cost: {m.objVal}")
else:
    print("No optimal solution found")
```