To solve this optimization problem, we need to define the decision variables, objective function, and constraints. Let's break down the problem:

- Decision variables: 
  - \(x_t\): Number of gourmet truffles to produce.
  - \(x_c\): Number of chocolate bars to produce.

- Objective function: Maximize profit. The profit from selling \(x_t\) gourmet truffles at $7 each and \(x_c\) chocolate bars at $3 each can be represented as \(7x_t + 3x_c\).

- Constraints:
  - **Cocoa availability constraint**: Each gourmet truffle weighs 700 grams, and each chocolate bar weighs 300 grams. Given that there are 30,000 grams of cocoa available, the total weight used should not exceed this amount: \(700x_t + 300x_c \leq 30,000\).
  - **Minimum production constraint for gourmet truffles**: At least 10 gourmet truffles must be made: \(x_t \geq 10\).
  - **Consumer research constraint**: The number of chocolate bars needed is at least twice the amount of gourmet truffles: \(x_c \geq 2x_t\).
  - **Non-negativity constraints**: Since we cannot produce a negative number of products, both \(x_t\) and \(x_c\) must be non-negative.

Given these definitions, we can now formulate the problem in Gurobi code to find out how many gourmet truffles and chocolate bars Cacaotier should prepare to maximize profit:

```python
from gurobipy import *

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

# Decision variables
x_t = m.addVar(vtype=GRB.INTEGER, name="gourmet_truffles", lb=0)
x_c = m.addVar(vtype=GRB.INTEGER, name="chocolate_bars", lb=0)

# Objective function: Maximize profit
m.setObjective(7*x_t + 3*x_c, GRB.MAXIMIZE)

# Constraints
m.addConstr(700*x_t + 300*x_c <= 30000, "cocoa_availability")
m.addConstr(x_t >= 10, "minimum_gourmet_truffles")
m.addConstr(x_c >= 2*x_t, "consumer_research")

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Gourmet Truffles: {x_t.x}")
    print(f"Chocolate Bars: {x_c.x}")
    print(f"Maximum Profit: ${7*x_t.x + 3*x_c.x}")
else:
    print("No optimal solution found")
```