To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation. This involves defining variables for the quantities of violins and harps produced, formulating the objective function that represents the total profit, and specifying the constraints related to woodworking and assembling time.

Let's denote:
- \(x_1\) as the number of violins produced,
- \(x_2\) as the number of harps produced.

The profit per violin is $200, and the profit per harp is $350. Therefore, the objective function to maximize profits can be represented as:
\[ \text{Maximize:} \quad 200x_1 + 350x_2 \]

Given the time constraints:
- A violin takes 6 hours of woodworking time and 2.5 hours of assembling time.
- A harp takes 2 hours of woodworking time and 10 hours of assembling time.
- The factory has at most 100 hours of woodworking time and 150 hours of assembling time available per day.

The constraints can be represented as:
\[ 6x_1 + 2x_2 \leq 100 \] (woodworking time constraint)
\[ 2.5x_1 + 10x_2 \leq 150 \] (assembling time constraint)

Also, \(x_1 \geq 0\) and \(x_2 \geq 0\), since the number of instruments produced cannot be negative.

The symbolic representation in JSON format is:
```json
{
    'sym_variables': [('x1', 'number of violins'), ('x2', 'number of harps')],
    'objective_function': '200*x1 + 350*x2',
    'constraints': ['6*x1 + 2*x2 <= 100', '2.5*x1 + 10*x2 <= 150', 'x1 >= 0', 'x2 >= 0']
}
```

Now, let's implement this problem using Gurobi in Python:

```python
from gurobipy import *

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

# Create variables
x1 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="violins")
x2 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="harps")

# Set the objective function
m.setObjective(200*x1 + 350*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(6*x1 + 2*x2 <= 100, "woodworking_time")
m.addConstr(2.5*x1 + 10*x2 <= 150, "assembling_time")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Violins: {x1.x}")
    print(f"Harp: {x2.x}")
    print(f"Total Profit: {m.objVal}")
else:
    print("No optimal solution found")
```