1. In a large pot, heat the oil over medium heat and cook the onion, stirring frequently, until it begins to brown, about 4 minutes. Add the garlic and tomatoes. Cook, stirring, until the tomato juices are reduced, 4 to 5 minutes. Add the broth, carrots, celery, serrano chiles, bay leaves, oregano, and thyme. Bring to a boil, then reduce the heat to low, cover and simmer until the vegetables are tender, 12 to 14 minutes.
2. Remove the serrano chiles and bay leaves from the soup. Add the fish, cilantro, and salt. Cook until the fish is opaque inside, 6 to 8 minutes. Serve the soup hot with lime wedges.