You could use a set on sorted tuple values or convert the list to a dictionary where the key is the tuple in sorted order. This will leave only one value per combination:
list({*map(tuple,map(sorted,myanimals))})
or
list(dict(zip(map(tuple,map(sorted,myanimals)),myanimals)).values())
Broken down
[*map(sorted,myanimals)] # sorted tuples
# [['cat', 'dog'], ['callitrix', 'platypus'], ['anaconda', 'python'], ['girafe', 'mouse'], ['callitrix', 'platypus']]
# notice that both ('callitrix', 'platypus') and ('platypus', 'callitrix')
# are converted to ('callitrix', 'platypus')
Since this gives a list of lists and dictionary keys need to be hashable, we convert the items to tuples:
[*map(tuple,map(sorted,myanimals))]
# [('cat', 'dog'), ('callitrix', 'platypus'), ('anaconda', 'python'), ('girafe', 'mouse'), ('callitrix', 'platypus')]
Those can already be converted to a list of unique pairs by placing it in a set and converting the set back to a list:
list({*map(tuple,map(sorted,myanimals))})
# [('girafe', 'mouse'), ('callitrix', 'platypus'), ('anaconda', 'python'), ('cat', 'dog')]
If you don't care about the original order of values in each tuple, you can stop there. But, if you need ('mouse','girafe') to remain in that order, then we need an extra step to separate uniqueness filtering from tuple contents. This is where the dictionary comes in. We will want to use these sorted tuples as keys but retain the original order as values. The zip function allows this by combining the key part with the original tuples:
[*zip(map(tuple,map(sorted,myanimals)),myanimals)]
# [(('cat', 'dog'), ('cat', 'dog')), (('callitrix', 'platypus'), ('callitrix', 'platypus')), (('anaconda', 'python'), ('anaconda', 'python')), (('girafe', 'mouse'), ('mouse', 'girafe')), (('callitrix', 'platypus'), ('platypus', 'callitrix'))]
Feeding that into a dictionary will only keep the last value for each distinct key and we can simply pick up the values to form the resulting list of tuples:
list(dict(zip(map(tuple,map(sorted,myanimals)),myanimals)).values())
[('cat', 'dog'), ('platypus', 'callitrix'), ('anaconda', 'python'), ('mouse', 'girafe')]
Alternatively
Note that the above selected ('platypus', 'callitrix') over ('platypus', 'callitrix') because it retains the last occurrence of duplicate entries.
If you need the first occurrence to be kept, you can use a different approach that progressively fills a set of both tuple orders and filters based on first addition of each tuple to the set.
[t for s in [{myanimals}] for t in myanimals
if t not in s and not s.update((t,t[::-1]))]
# [('cat', 'dog'), ('callitrix', 'platypus'), ('anaconda', 'python'), ('mouse', 'girafe')]