To solve this problem, we need to define the decision variables, the objective function, and the constraints.

Let's denote:
- $V$ as the amount of vanilla cake mix purchased (in kg)
- $C$ as the amount of chocolate cake mix purchased (in kg)

The objective is to minimize the total cost. Given that the cost per kg of vanilla cake mix is $10 and the cost per kg of chocolate cake mix is $15, the objective function can be written as:
\[ \text{Minimize} \quad 10V + 15C \]

There are two main constraints based on the requirements for leavening agent and flour in the final mixture:
1. The final mixture needs at least 0.3 kg of leavening agent.
   - Vanilla cake mix contains 3% leavening agent, so it contributes $0.03V$ to the total leavening agent.
   - Chocolate cake mix contains 2% leavening agent, so it contributes $0.02C$ to the total leavening agent.
   - The constraint for leavening agent is: $0.03V + 0.02C \geq 0.3$

2. The final mixture needs at least 10 kg of flour.
   - Vanilla cake mix contains 55% flour, so it contributes $0.55V$ to the total flour.
   - Chocolate cake mix contains 43% flour, so it contributes $0.43C$ to the total flour.
   - The constraint for flour is: $0.55V + 0.43C \geq 10$

Additionally, since we cannot purchase a negative amount of either cake mix, we have non-negativity constraints:
- $V \geq 0$
- $C \geq 0$

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

```python
from gurobipy import *

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

# Define the decision variables
V = m.addVar(name="Vanilla", vtype=GRB.CONTINUOUS, lb=0)
C = m.addVar(name="Chocolate", vtype=GRB.CONTINUOUS, lb=0)

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

# Add constraints
m.addConstr(0.03*V + 0.02*C >= 0.3, name="Leavening_Agent")
m.addConstr(0.55*V + 0.43*C >= 10, name="Flour")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Vanilla cake mix to buy: {V.x} kg")
    print(f"Chocolate cake mix to buy: {C.x} kg")
    print(f"Total cost: ${10*V.x + 15*C.x}")
else:
    print("No optimal solution found. The model is either infeasible or unbounded.")
```