## Step 1: Define the symbolic variables
Let's define the symbolic variables for the problem:
- $x_1$ represents the number of individual servings
- $x_2$ represents the number of family servings

## Step 2: Translate the objective function into symbolic notation
The objective function is to maximize profit. Each individual serving is sold for a profit of $3, and each family serving is sold for a profit of $10. Therefore, the objective function can be represented as:
\[ \max 3x_1 + 10x_2 \]

## 3: Translate the constraints into symbolic notation
The constraints are:
1. The total amount of soup used is at most 50000 ml: $250x_1 + 1200x_2 \leq 50000$
2. The number of individual servings is at least three times the number of family servings: $x_1 \geq 3x_2$
3. The number of family servings is at least 10: $x_2 \geq 10$
4. Non-negativity constraints: $x_1 \geq 0, x_2 \geq 0$

However, since $x_1$ and $x_2$ represent the number of servings, they must be integers. But for the purpose of linear programming relaxation, we'll first consider them as continuous variables and check for integer solutions later if necessary.

## 4: List the symbolic representation of the problem
The symbolic representation is:
```json
{
'sym_variables': [('x1', 'individual servings'), ('x2', 'family servings')],
'objective_function': '3*x1 + 10*x2',
'constraints': [
    '250*x1 + 1200*x2 <= 50000',
    'x1 >= 3*x2',
    'x2 >= 10',
    'x1 >= 0',
    'x2 >= 0'
]
}
```

## 5: Convert the problem into Gurobi code
Now, let's convert this into Gurobi code in Python:
```python
import gurobi

def solve_soup_kitchen_problem():
    # Create a new model
    model = gurobi.Model()

    # Define the variables
    x1 = model.addVar(name="individual_servings", lb=0, vtype=gurobi.GRB.INTEGER)
    x2 = model.addVar(name="family_servings", lb=0, vtype=gurobi.GRB.INTEGER)

    # Objective function: maximize 3*x1 + 10*x2
    model.setObjective(3*x1 + 10*x2, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(250*x1 + 1200*x2 <= 50000, name="soup_limit")
    model.addConstr(x1 >= 3*x2, name="individual_to_family_ratio")
    model.addConstr(x2 >= 10, name="min_family_servings")

    # Solve the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: individual servings = {x1.varValue}, family servings = {x2.varValue}")
    else:
        print("No optimal solution found")

solve_soup_kitchen_problem()
```