Notebooks

In this section, you can find a few initial raw technical notebooks related to the site. (They are presented as-is; please excuse stray typos and jargon.) These notebooks attack problems on the ground level (without using any existing specialized modules) to see how things really work before we settle down on any specific path. For the tech-savvy, these samples may provide initial insights for their own experiments and exploration. For those who are technology students, working on your own through these challenges is a fun learning journey in itself – from algorithms to statistical analysis, you will encounter the full spectrum of complexities required to engineer a solution.

( Production level solutions are included in our member-onboarding crash-course. )

Chart Reader: Evaluation

Throwing a detailed astrological chart to LLMs for reading in a single pass signals some potential. Let's explore it.

In this notebook we split the reading into several tasks and ask for rated bullet points output format to run full evaluation: basic correctness, consistency, as well as token count, timing, etc. We also test if LLMs are able to extract and prioritize the angular relations from the list of planetary positions.

This is not a research-paper-grade evaluation, we simply want to know how much we can "trust" AI reading in the absence of explicit guidance (like ordered list of aspects). As a language-handling tool LLMs are a solid value for our case, however, we need to know when and where we have to provide supporting railways for a "proper reasoning."

AI team:

    gpt-oss # 20B agentic
    deepseek-r1:14b # thinking
    phi4' # 14B
    gemma3:12b # vision
    llama3.1 # 8B
        
from nbutil import * object_filter = ['SUN','MOON','MERCURY','VENUS','MARS','JUPITER','SATURN','URANUS','NEPTUNE','PLUTO'] aspect_filter = [0, 60, 90, 120, 150, 180] # natal chart data of a public person cid = 'bb704e5b-eed8-42db-9f3e-393c0f0eca01' natal = get_chart(cid) # curent transit data with natal houses transit = get_current(houses=natal['houses']) plot_astro(transit, object_filter, aspect_filter, title='Day Chart') plot_astro(natal, object_filter, aspect_filter, transit=transit, title='Natal Chart with Transit')

Extract and rank the aspects

For deep evaluation the output required to have 3 parts -- related yet different, the aspects section and the rank section should be the same except of order. The explanation section lets us check the ranking criteria the models claim to use, if different from ours, and if actually been used.

aspects_extraction_prompt = """You are practicing astrologer. Below is a day-chart: {positions} Define the aspects present in this chart and rank them by importance ({context}) within this chart context. Your answer should be in the following exact format (plain, concise, no extras): ASPECTS <list planetary aspects as following: * <planet-1> - <planet-2> - <aspect-name>> RANK <list your order as following: * <planet-1> - <planet-2> - <aspect-name>> EXPLANATION <list your ranking criteria ordered by priority> """ def read_positions( model: str, prompt: str, positions: list, temperature: float = 0.8, show_output: bool = True, ** kwargs, ) -> tuple: prompt = prompt.format(positions='\n'.join(positions), **kwargs) output, num_in_tokens, num_out_tokens, tm = ai_response( model, prompt, temperature=temperature, show_output=show_output) output = output.split('ASPECTS')[-1].split('RANK') aspects = extract_bullet_points(output[0]) if len(output) != 2: print('FAILED format') return aspects, [], num_in_tokens, num_out_tokens, tm rank = extract_bullet_points(output[1].split('EXPLANATION')[0]) return aspects, rank, num_in_tokens, num_out_tokens, tm positions = chart_to_text(transit, object_filter) context = 'natal interpretation' print(aspects_extraction_prompt.format(positions='\n'.join(positions), context=context)) You are practicing astrologer. Below is a day-chart: Sun: 1°57' Sagittarius Moon: 12°35' Capricorn (out-of-bond) Mercury: 23°47' Scorpio (retrograde) Venus: 21°23' Scorpio Mars: 14°07' Sagittarius Jupiter: 24°53' Cancer (retrograde) Saturn: 25°10' Pisces (retrograde) Uranus: 29°20' Taurus (retrograde) Neptune: 29°26' Pisces (retrograde) Pluto: 1°45' Aquarius Define the aspects present in this chart and rank them by importance (natal interpretation) within this chart context. Your answer should be in the following exact format (plain, concise, no extras): ASPECTS - - > RANK - - > EXPLANATION

There's a lot of room for subjectivity in aspects ranking, leave alone dependency on the context. Some common basic rules for a "soft" scoring: the inner-planets (fast moving, personal influence) given high priority; precision cut in ranges (we can always filter out marginal precision). Our main focus is the consistency overall, the score is less important.

        1. Aspect precision: ( < 1° ) > ( < 3° ) > ( >= 3° )
        2. Planetary hierarchy: ascendant = midheaven = inner planets > outer planets
        3. Planetary dignity: domicile > exaltation > none > fall > exile
        4. House placement significance: angular > succedent > cadent
        5. Aspect type: Conjunction > Opposition = Square > Trine > Sextile > Inconjunct
        
def aspect_rank(data): hierarchy = { 'AC':1, 'MC':1, 'SUN':1, 'MOON':1, 'MERCURY':2, 'VENUS':2, 'MARS':2, 'JUPITER':3, 'SATURN':3, 'URANUS':4, 'NEPTUNE':4, 'PLUTO':4 } rank = ['','domicile','exaltation','none','fall','exile'] priority = { 0:1, 90:2, 180:2, 120:3, 60:4, 150:5 } def order(aspect): a, b = aspect['objects'] ad, bd = aspect['dignities'] ah, bh = aspect['houses'] if 'houses' in aspect else (1, 1) a_strength = hierarchy[a] * rank.index(ad) * (ah % 3 or 3) b_strength = hierarchy[b] * rank.index(bd) * (bh % 3 or 3) precision = 1 if aspect['orb'] < 1 else 2 if aspect['orb'] < 3 else 3 return (precision, a_strength + b_strength, priority.get(aspect['aspect'], 6)) return sorted(data, key=order) def ranking_score(key, rank, table): # valid ranked aspects in target order target = {k:i for i,k in enumerate(table.keys()) if k in rank} # valid ranked aspects in rank order order = {x:i for i,x in enumerate([k for k in rank if k in target])} assert len(order) == len(target) # soft ranking score based on the distance from the target index if len(order) == 0 or not key in order: return 0 return 1 - ((target[key] - order[key])/len(table)) ** 2 # get full unfiltered ranked list aspects = aspect_rank(get_aspects(transit, object_filter)) aspects_text = aspects_to_text(transit, aspects) # hash-table: let's validate what we can validate - the real aspects aspect_table = {aspect_hash(a):[0] * len(team) for a in aspects_text} # filtered list: only major aspects which are also tight (that is what a human would go for first) major = aspect_rank([a for a in get_aspects(transit, object_filter, aspect_filter) if a['strength'] >= 0.5]) print(f'total: {len(aspects)}\n{len(major)} major:') # compare size print('\n'.join([aspect_hash(a) for a in aspects_to_text(transit, major)])) # major only total: 26 12 major: jupiter-saturn-trine sun-pluto-sextile uranus-neptune-sextile sun-neptune-trine mercury-jupiter-trine mercury-saturn-trine mercury-venus-conjunct neptune-pluto-sextile sun-uranus-oppos uranus-pluto-trine venus-jupiter-trine venus-saturn-trine for i, model in enumerate(team): print('====================================') print(f' {model}') print('====================================') output = read_positions(model, aspects_extraction_prompt, positions, context=context) extracted, rank, num_in_tokens, num_out_tokens, tm = output order = [aspect_hash(a) for a in rank] keys = set([aspect_hash(a) for a in extracted]) if len(keys - set(order)) != 0: print('FAILED: extract <-> rank') for key in keys: if not key in aspect_table: if key[0].isalpha(): print(f'NOT IN the TABLE: {key}') continue if not key in order: print(f'SUCCESS: {key:<30} FAILED ranking') else: print(f'SUCCESS: {key:<30} RANKING score:{ranking_score(key, order, aspect_table):>7.2%}') aspect_table[key][i] = 1 ==================================== llama3.1 ====================================

ASPECTS

  • Sun - Mars - Semi-Square (28°06')
  • Sun - Jupiter - Opposition (22°56')
  • Mercury - Venus - Conjunction (1°24')
  • Mercury - Saturn - Trine (14°23')
  • Moon - Neptune - Sextile (16°51')
  • Venus - Jupiter - Quincunx (3°30')
  • Mars - Jupiter - Semi-Square (9°46')

RANK

  • Sun - Jupiter - Opposition
  • Mercury - Venus - Conjunction
  • Mercury - Saturn - Trine
  • Moon - Neptune - Sextile

EXPLANATION

  1. Opposition: Significant tension and conflicts between the individual's desire for freedom and expansion (Sun) and their tendency to focus inwardly on family and past experiences (Jupiter). This aspect can indicate a strong sense of responsibility and duty.
  2. Conjunction: The blending of Mercury and Venus suggests a unique way of communicating emotions and values, possibly through creative or artistic expression. This combination can bring a charismatic and magnetic personality.
  3. Trine: A harmonious relationship between Mercury (communication) and Saturn (responsibility), indicating a practical and reliable approach to intellectual pursuits and personal growth.
FAILED: extract <-> rank NOT IN the TABLE: sun-jupiter-oppos NOT IN the TABLE: venus-jupiter-inconjunct NOT IN the TABLE: sun-mars-semisqua NOT IN the TABLE: mars-jupiter-semisqua SUCCESS: mercury-venus-conjunct RANKING score: 78.70% SUCCESS: mercury-saturn-trine RANKING score: 85.21% NOT IN the TABLE: moon-neptune-sextile ==================================== gemma3:12b ====================================

ASPECTS

  • Sun - Mars - Trine
  • Sun - Jupiter - Opposition
  • Moon - Saturn - Trine
  • Moon - Neptune - Opposition
  • Mercury - Venus - Conjunction
  • Mars - Jupiter - Opposition
  • Mercury - Pluto - Opposition
  • Venus - Pluto - Opposition
  • Mars - Uranus - Square
  • Saturn - Neptune - Conjunction

RANK

  • Sun - Mars - Trine
  • Jupiter - Mars - Opposition
  • Sun - Jupiter - Opposition
  • Moon - Saturn - Trine
  • Mercury - Venus - Conjunction
  • Venus - Pluto - Opposition
  • Mercury - Pluto - Opposition
  • Mars - Uranus - Square
  • Moon - Neptune - Opposition
  • Saturn - Neptune - Conjunction

EXPLANATION

  1. Major Dignities/Difficulties: Aspects involving the Sun and Moon are primary due to their foundational importance in a natal chart.
  2. Cardinal Planets: Aspects involving Mars and Jupiter, being cardinal signs, indicate significant drive and potential conflict.
  3. Retrograde Planets: Retrograde planets often intensify aspects and highlight areas needing deeper reflection. Multiple retrogrades in this chart amplify the complexity.
  4. Tense Aspects: Squares and oppositions indicate tension, challenge, and potential for growth.
  5. Harmonious Aspects: Trines represent ease, flow, and natural talent.
  6. Conjunctions: Close conjunctions blend energies, often creating a potent or complex expression.
NOT IN the TABLE: mars-jupiter-oppos NOT IN the TABLE: mercury-pluto-oppos NOT IN the TABLE: sun-jupiter-oppos NOT IN the TABLE: moon-saturn-trine NOT IN the TABLE: moon-neptune-oppos NOT IN the TABLE: venus-pluto-oppos NOT IN the TABLE: sun-mars-trine SUCCESS: saturn-neptune-conjunct RANKING score: 94.67% NOT IN the TABLE: mars-uranus-square SUCCESS: mercury-venus-conjunct RANKING score: 78.70% ==================================== phi4 ====================================

ASPECTS

  • Sun - Mars - Conjunction
  • Moon - Saturn - Opposition
  • Venus - Pluto - Square
  • Mercury - Uranus - Trine
  • Mars - Neptune - Quincunx
  • Jupiter - Pluto - Conjunct (retrograde)
  • Saturn - Neptune - Semisextile

RANK

  1. Sun - Mars - Conjunction
  2. Moon - Saturn - Opposition
  3. Venus - Pluto - Square
  4. Mercury - Uranus - Trine
  5. Jupiter - Pluto - Conjunct (retrograde)
  6. Mars - Neptune - Quincunx
  7. Saturn - Neptune - Semisextile

EXPLANATION

  1. Conjunctions often highlight key themes in the chart, particularly when involving core planets like the Sun and Mars, indicating significant internal energy and action-oriented potential.
  2. Oppositions create tension between polarized forces; Moon-Saturn here suggests challenges with emotional security or support structures.
  3. Squares show dynamic tensions that may require resolution, important for understanding conflicts or transformative potentials in this chart, especially concerning relationships (Venus) and transformational power (Pluto).
  4. Trines are harmonious aspects indicating ease; the Mercury-Uranus trine suggests creative communication strategies or unconventional thinking.
  5. Conjuncts between slow-moving planets like Jupiter and Pluto amplify significant themes related to growth and deep change, even more potent when retrograde for introspection or delayed action.
  6. Quincunxes indicate challenges in integrating energies; Mars-Neptune here could point to confusion around desires or illusions of power.
  7. Semisextiles are less intense aspects but can still highlight areas of subtle influence and growth opportunities, like Saturn-Neptune's themes of structure versus idealism.
NOT IN the TABLE: moon-saturn-oppos NOT IN the TABLE: jupiter-pluto-conjunct NOT IN the TABLE: venus-pluto-square NOT IN the TABLE: mars-neptune-inconjunct NOT IN the TABLE: mercury-uranus-trine NOT IN the TABLE: sun-mars-conjunct NOT IN the TABLE: saturn-neptune-semisext ==================================== gpt-oss ====================================

ASPECTS

  • Sun - Pluto - conjunction
  • Mercury - Venus - conjunction
  • Mercury - Jupiter - conjunction
  • Mercury - Saturn - conjunction
  • Venus - Jupiter - conjunction
  • Venus - Saturn - conjunction
  • Jupiter - Saturn - conjunction
  • Uranus - Neptune - conjunction
  • Moon - Mars - conjunction

RANK

  • Sun - Pluto - conjunction
  • Mercury - Saturn - conjunction
  • Mercury - Jupiter - conjunction
  • Mercury - Venus - conjunction
  • Jupiter - Saturn - conjunction
  • Uranus - Neptune - conjunction
  • Moon - Mars - conjunction

EXPLANATION

  • Core‑planet involvement (Sun, Mercury, Jupiter, Saturn, Venus, Pluto) – higher priority for aspects that include a major planet.
  • Power of the aspect: conjunctions are the strongest; among them, Sun‑Pluto is most intense, followed by Mercury‑Saturn (discipline), Mercury‑Jupiter (expansion), Mercury‑Venus (communication of values).
  • Hierarchical planetary influence: Sun > Mercury > Jupiter > Saturn > Venus > Uranus/Neptune > Moon.
  • Functional significance: aspects that shape identity, will, communication, and personal power are ranked above those affecting social/collective themes or generational patterns.
FAILED: extract <-> rank NOT IN the TABLE: mercury-saturn-conjunct NOT IN the TABLE: mercury-jupiter-conjunct NOT IN the TABLE: venus-jupiter-conjunct NOT IN the TABLE: uranus-neptune-conjunct NOT IN the TABLE: sun-pluto-conjunct NOT IN the TABLE: jupiter-saturn-conjunct SUCCESS: mercury-venus-conjunct RANKING score: 78.70% NOT IN the TABLE: venus-saturn-conjunct NOT IN the TABLE: moon-mars-conjunct ==================================== deepseek-r1:14b ==================================== Okay, so I'm trying to figure out how to approach this query where the user is asking me to act as a practicing astrologer. They provided a day-chart with various celestial bodies and their positions, along with some aspects. My task is to define the aspects present in the chart and then rank them by importance for natal interpretation.

First, I need to understand what each part of the query entails. The user wants me to list all the aspects as planetary pairs connected by an aspect name, like "Sun-Moon-Sextile." Then, I have to rank these aspects based on their astrological significance in this chart. Finally, I should explain why I ranked them that way, listing my criteria in order of priority.

I remember that in astrology, each planet's position and the aspects they form are crucial for interpreting a birth chart. The key aspects include the opposition (180°), trine (120°), square (90°), sextile (60°), and sometimes the conjunction (0°). Also, retrograde motion can influence how these aspects manifest.

Looking at the given chart:

  • Sun is at 1°57' Sagittarius.
  • Moon is at 12°35' Capricorn, out of bounds.
  • Mercury is retrograde at 23°47' Scorpio.
  • Venus is at 21°23' Scorpio.
  • Mars is at 14°07' Sagittarius.
  • Jupiter is retrograde at 24°53' Cancer.
  • Saturn is retrograde at 25°10' Pisces.
  • Uranus is retrograde at 29°20' Taurus.
  • Neptune is retrograde at 29°26' Pisces.
  • Pluto is at 1°45' Aquarius.

I'll start by identifying all the aspects between these planets. Let's go one by one:

  1. Sun (Sagittarius) to Mercury (Scorpio): The Sun at ~2° Sagittarius and Mercury at ~23° Scorpio. Sagittarius is 89 degrees from Scorpio, so 2° in Sagittarius would be near the end of Sagittarius, and 23° Scorpio is towards the end as well. The angle between them is about (30 - 2) + 23 = 41°. Wait, that doesn't sound right. Let me think: Sagittarius starts at 30°, so Sun is at 1°57' which is just into Sagittarius. Mercury is in Scorpio at 23°47', so the difference between them is 23°47' (Scorpio) + (30 - 1°57') = 23°47' + 28°03' = 51°50'. That's about a trine, which is 120°, but 51° isn't close. Maybe I miscalculated.

Wait, no, the Sun is at 1°57 Sagittarius, so that's just past Sagittarius 1°, and Mercury is at Scorpio 23°47'. The angle between them would be (360 - 1°57') + 23°47' = approximately 359° plus 23°47', which doesn't make sense. Maybe it's easier to use an online calculator, but since I'm doing this manually, perhaps they're not forming a major aspect.

Wait, maybe I should consider their positions relative to each other in the zodiac. The Sun is at around Sagittarius 2°, Mercury is at Scorpio 23°47'. So from the Sun's position, moving counterclockwise (eastward), Mercury is about (Scorpio spans 0° to 30°). So 23°47' Scorpio would be just before Sagittarius starts. The Sun is at ~1°57' Sagittarius. So the angle between them is (360 - 1°57') + 23°47' = 358°03' + 23°47' = 381°50', but that's over 360, so subtract 360 to get 21°50'. So about a 22° angle. That doesn't form a major aspect.

Wait, maybe I'm approaching this wrong. Maybe the Sun is at 1°57 Sagittarius and Mercury at 23°47 Scorpio. The difference in degrees is (23°47' - 0) because Scorpio comes before Sagittarius. So from the Sun's position to Mercury would be (360 - 1°57') + 23°47' = 358°03' + 23°47' = 381°50', which is equivalent to 21°50'. That's not a major aspect.

Hmm, maybe they don't form any significant aspect. Let me check other pairs.

Next, Sun (Sagittarius) to Venus (Scorpio): Venus is at 21°23' Scorpio. So again, from Sun at ~2° Sagittarius, the angle would be similar to Mercury's case. 21°23' - (360 - 1°57') = 21°23' + 28°03' = 49°26', which isn't a major aspect.

Sun to Mars: Both in Sagittarius. Sun at ~2°, Mars at 14°07'. So the difference is about 12°07', not a major aspect.

Sun to Jupiter (Cancer): Jupiter is at 24°53' Cancer. Cancer is opposite Sagittarius, so 24°53' from Cancer to opposite point would be 6°07' of Gemini? Wait, no, the opposition is 180° apart. So Sun in Sagittarius 2°, Jupiter in Cancer 24°53'. The angle between them is 180°, so they form an opposition.

Wait, yes: each zodiac sign has 30°, so Sagittarius starts at 270° (since Aries is 0°). So Sun at ~2° Sagittarius would be around 294°. Jupiter in Cancer is at 24°53' which is about 84.53° (Cancer spans 60-90°, so 24.53 + 60 = 84.53). The angle between them is 84.53 - 294 = negative, but in terms of the smaller arc, it's 180° apart because they're oppositions.

So Sun-Jupiter opposition: that's a major aspect, 180°, so an opposition. That would be significant.

Next, Sun to Saturn (Pisces): Pisces is opposite Virgo, so Pisces spans 330-360° or 0-30°. Saturn is at 25°10' Pisces, which is about 4.83 degrees after 330°, so around 334.83°. Sun is at ~294° (2° Sagittarius). The angle between them is 334.83 - 294 = 40.83°, which isn't a major aspect.

Sun to Uranus (Taurus): Taurus is 0-30° Aries? No, wait, no: Taurus is after Aries and before Gemini. So 30° Taurus would be at 60°. Wait, no: each sign is 30°, so Aries 0-30°, Taurus 30-60°, Gemini 60-90°, etc.

Uranus is at 29°20' Taurus, which is about 59.33° (since Taurus starts at 30°). Sun is at 294°. The angle between them is 59.33 - 294 = negative, but the smaller arc would be 294 - 59.33 = 234.67°, which isn't a major aspect.

Sun to Neptune (Pisces): Neptune is at 29°26' Pisces, so that's about 1.43° after 330°, so around 331.43°. Sun is at 294°. The angle between them is 331.43 - 294 = 37.43°, not a major aspect.

Sun to Pluto (Aquarius): Aquarius spans 30-60°, so Pluto at 1°45' Aquarius is about 31.75°. Sun is at 294°, so the angle between them is 294 - 31.75 = 262.25°, which isn't a major aspect.

Moving on to Moon (Capricorn) aspects: Moon is out of bounds at 12°35' Capricorn. Let's see its aspects with other planets.

Moon-Mercury: Mercury in Scorpio at 23°47', Moon in Capricorn at 12°35'. The angle between them: Capricorn starts at 300°, so Moon is at ~308.69° (since 300 + 12.58° = 312.58?), wait no: each degree in a sign adds to the previous total.

Wait, maybe it's easier to calculate their positions numerically:

  • Capricorn starts at 300°, so Moon at 12°35' Cap is 300 + (12 + 35/60) = 300 + 12.5833 = 312.5833°.

Mercury is in Scorpio, which starts at 270° (since Aries=0, Taurus=30, ..., Sagittarius=240? Wait no: wait, each sign is 30°, so starting from Aries 0°, Taurus 30°, Gemini 60°, Cancer 90°, Leo 120°, Virgo 150°, Libra 180°, Scorpio 210°, Sagittarius 240°, Capricorn 270°, Aquarius 300°, Pisces 330°.

So Mercury is in Scorpio at 23°47', which is 210 + (23 + 47/60) = 210 + 23.7833 ≈ 233.7833°.

The angle between Moon at 312.5833° and Mercury at 233.7833° is |312.5833 - 233.7833| = 78.8°, which isn't a major aspect.

Moon-Venus: Venus is in Scorpio at 21°23', so 210 + 21.3833 ≈ 231.3833°.

Angle between Moon (312.5833) and Venus (231.3833): |312.5833 - 231.3833| = 81.2°, not a major aspect.

Moon-Mars: Mars is in Sagittarius at 14°07', so 240 + 14.1167 ≈ 254.1167°.

Angle: |312.5833 - 254.1167| = 58.4666°, which is close to a 60° sextile but not exact. Considering Mercury retrograde and the exactness of aspects, maybe it's considered a minor aspect.

Moon-Jupiter: Jupiter in Cancer at 24°53', so 90 + (24 + 53/60) ≈ 114.8833°.

Angle: |312.5833 - 114.8833| = 197.7°, which is more than 180°, so the smaller arc would be 162.3° (360 - 197.7), not a major aspect.

Moon-Saturn: Saturn in Pisces at 25°10', which is 330 + (25 + 10/60) ≈ 355.1667°.

Angle between Moon and Saturn: |355.1667 - 312.5833| = 42.5834°, not a major aspect.

Moon-Uranus: Uranus in Taurus at 29°20', which is 30 + (29 + 20/60) ≈ 59.3333°.

Angle: |312.5833 - 59.3333| = 253.25°, not a major aspect.

Moon-Neptune: Neptune in Pisces at 29°26', so 330 + (29 + 26/60) ≈ 359.4333°.

Angle: |312.5833 - 359.4333| = negative, but the smaller arc is 359.4333 - 312.5833 = 46.85°, not a major aspect.

Moon-Pluto: Pluto in Aquarius at 1°45', so 300 + (1 + 45/60) ≈ 301.75°.

Angle: |312.5833 - 301.75| = 10.8333°, which is very close to a conjunction but still not exact. With planets in retrograde, maybe it's considered an opposition? No, that would be 180° apart. So perhaps no major aspect here.

Next, Mercury aspects: Mercury is retrograde at 23°47' Scorpio (210 + 23.7833 ≈ 233.7833°).

Mercury-Venus: Venus in Scorpio at 21°23' (~210 + 21.3833 = 231.3833°). The angle between them is |233.7833 - 231.3833| = 2.4°, which is a conjunction.

That's significant because Mercury and Venus are close to each other, so they form a conjunction in the same sign (Scorpio), both retrograde? Wait, no: Mercury is retrograde, but Venus is direct unless stated otherwise. So the angle between them is very small, indicating a strong connection.

Mercury-Mars: Mars in Sagittarius at 14°07' (~240 + 14.1167 = 254.1167°). Angle: |233.7833 - 254.1167| = 20.3334°, not a major aspect.

Mercury-Jupiter: Jupiter in Cancer at 114.8833° (from earlier). Angle: |233.7833 - 114.8833| = 118.9°, which is close to a square (90°), but not exact.

Mercury-Saturn: Saturn at 355.1667°. Angle: |233.7833 - 355.1667| = negative, so 355.1667 - 233.7833 ≈ 121.3834°, not a major aspect.

Mercury-Uranus: Uranus at 59.3333°. Angle: |233.7833 - 59.3333| = 174.45°, close to an opposition (180°), but not exact.

Mercury-Neptune: Neptune at 359.4333°. Angle: |233.7833 - 359.4333| = negative, so 360 - 125.65 ≈ 234.35°, not a major aspect.

Mercury-Pluto: Pluto at 301.75°. Angle: |233.7833 - 301.75| = 67.9667°, not a major aspect.

Moving on to Venus aspects: Venus in Scorpio at 231.3833°.

Venus-Mars: Mars at 254.1167°. Angle: |231.3833 - 254.1167| = 22.7334°, not a major aspect.

Venus-Jupiter: Jupiter at 114.8833°. Angle: |231.3833 - 114.8833| = 116.5°, which is close to a square but not exact.

Venus-Saturn: Saturn at 355.1667°. Angle: |231.3833 - 355.1667| ≈ negative, so 355.1667 - 231.3833 ≈ 123.7834°, not a major aspect.

Venus-Uranus: Uranus at 59.3333°. Angle: |231.3833 - 59.3333| = 172.05°, close to an opposition but not exact.

Venus-Neptune: Neptune at 359.4333°. Angle: |231.3833 - 359.4333| ≈ negative, so 360 - 128.05 ≈ 231.95°, not a major aspect.

Venus-Pluto: Pluto at 301.75°. Angle: |231.3833 - 301.75| ≈ 70.3667°, not a major aspect.

Next, Mars aspects: Mars in Sagittarius at 254.1167°.

Mars-Jupiter: Jupiter at 114.8833°. Angle: |254.1167 - 114.8833| = 139.2334°, which is more than a square (90°) but less than a trine (120°), so not a major aspect.

Mars-Saturn: Saturn at 355.1667°. Angle: |254.1167 - 355.1667| = negative, so 355.1667 - 254.1167 ≈ 101.05°, not a major aspect.

Mars-Uranus: Uranus at 59.3333°. Angle: |254.1167 - 59.3333| = 194.7834°, which is more than 180°, so the smaller arc is 165.2166°, not a major aspect.

Mars-Neptune: Neptune at 359.4333°. Angle: |254.1167 - 359.4333| ≈ negative, so 360 - 105.3166 ≈ 254.6834°, not a major aspect.

Mars-Pluto: Pluto at 301.75°. Angle: |254.1167 - 301.75| ≈ 47.6333°, not a major aspect.

Moving on to Jupiter aspects: Jupiter in Cancer at 114.8833°.

Jupiter-Saturn: Saturn at 355.1667°. Angle: |114.8833 - 355.1667| ≈ negative, so 355.1667 - 114.8833 ≈ 240.2834°, which is more than 180°, so the smaller arc is 119.7166°, not a major aspect.

Jupiter-Uranus: Uranus at 59.3333°. Angle: |114.8833 - 59.3333| = 55.55°, not a major aspect.

Jupiter-Neptune: Neptune at 359.4333°. Angle: |114.8833 - 359.4333| ≈ negative, so 360 - 244.55 ≈ 115.45°, not a major aspect.

Jupiter-Pluto: Pluto at 301.75°. Angle: |114.8833 - 301.75| ≈ negative, so 360 - 186.8667 ≈ 173.1333°, close to an opposition but not exact.

Next, Saturn aspects: Saturn in Pisces at 355.1667°.

Saturn-Uranus: Uranus at 59.3333°. Angle: |355.1667 - 59.3333| ≈ negative, so 360 - 295.8334 ≈ 64.1666°, not a major aspect.

Saturn-Neptune: Neptune at 359.4333°. Angle: |355.1667 - 359.4333| = 4.2667°, which is very close to a conjunction but not exact.

Saturn-Pluto: Pluto at 301.75°. Angle: |355.1667 - 301.75| ≈ 53.4167°, not a major aspect.

Next, Uranus aspects: Uranus in Taurus at 59.3333°.

Uranus-Neptune: Neptune at 359.4333°. Angle: |59.3333 - 359.4333| ≈ negative, so 360 - 300.1 ≈ 59.9°, not a major aspect.

Uranus-Pluto: Pluto at 301.75°. Angle: |59.3333 - 301.75| ≈ negative, so 360 - 242.4167 ≈ 117.5833°, not a major aspect.

Finally, Neptune aspects: Neptune in Pisces at 359.4333°.

Neptune-Pluto: Pluto at 301.75°. Angle: |359.4333 - 301.75| ≈ negative, so 360 - 57.6833 ≈ 302.3167°, which is more than 180°, so the smaller arc is 157.6833°, not a major aspect.

So compiling all significant aspects:

  • Mercury conjunct Venus (Scorpio) at ~2.4°, which is a very close conjunction.
  • Moon square Mars at ~58.4666°, but that's more than 45°, so not exact, but within orb for some interpretations.
  • Jupiter opposite Pluto at ~173.1333°, almost an opposition.
  • Saturn conjunct Neptune at ~4.2667°, very close to a conjunction.

But the most significant aspect is likely the Mercury-Venus conjunction in Scorpio.

Wait, but I might have missed some aspects earlier. Let me double-check:

Earlier, when looking at Moon-Mars, I calculated an angle of about 58.46°, which isn't exact, so perhaps not a major aspect. But with Mercury retrograde and other factors, it's possible that the Moon is opposing something else.

Wait, let me check again for Moon oppositions:

  • Moon opposite Uranus: Angle was ~253.25°, which is more than 180°, so not an opposition.
  • Moon opposite Neptune: Angle was ~46.85°, nope.
  • Moon opposite Pluto: ~10.8333°, a conjunction but close to a sextile.

Wait, perhaps I made a mistake earlier. Let me check Mercury-Venus: 2.4° apart in Scorpio, which is a tight conjunction, so that's significant.

Also, considering the signs:

  • Mercury and Venus are both in Scorpio, so their conjunction adds intensity.
  • Jupiter is in Cancer, opposite Pluto in Sagittarius (since I thought it was at ~173°, but need to confirm exact positions). Wait, no, if Jupiter is at 114.8833° (Cancer) and Pluto at 301.75°, the angle between them is |301.75 - 114.88| = 186.8667°, which is just over 180°, making it a biquintile (which I'm not sure about) or perhaps not an opposition. Wait, no: if two points are 180° apart, they oppose each other. Here, Jupiter at 114.88 and Pluto at 301.75: 301.75 - 114.88 = 186.8667°, which is just over 180°, so not a direct opposition but close to it.

Similarly, Saturn in Pisces (355.1667°) and Neptune at 359.4333°: the angle between them is about 4.2667°, which is very close to a conjunction, indicating they're nearly aligned.

So significant aspects are:

  • Mercury conjunct Venus (Scorpio)
  • Saturn conjunct Neptune
  • Jupiter opposite Pluto (nearly)
  • Moon square Mars (approx 58.46°)

But perhaps the most notable is Mercury-Venus conjunction, which would be very intense in Scorpio, adding depth and complexity.

Additionally, considering that both Mercury and Venus are retrograde at this time (if it's during their retrograde periods), which could amplify the introspection and intensity of communication and relationships.

In terms of personal practice, focusing on self-reflection, cautious communication, and emotional depth would be beneficial. Also, paying attention to underlying currents in relationships and seeking deeper understanding could be fruitful.

I think that's a reasonable analysis based on the given chart.

Based on the astrological chart provided, here is a concise summary of the key aspects and their implications:

  1. Mercury Conjunct Venus (Scorpio): This conjunction occurs at approximately 2.4°, indicating a strong emphasis on communication, relationships, and emotional depth. Expect intense conversations and a focus on personal values and connections.

  2. Saturn Conjunct Neptune: The close alignment of Saturn and Neptune (approximately 4.2667°) suggests a period of idealism and creativity tempered by practicality. This may involve setting realistic goals while maintaining a visionary approach.

  3. Jupiter Opposite Pluto: Although not exact, Jupiter at 114.8833° in Cancer and Pluto at 301.75° in Sagittarius create a dynamic that encourages transformation and expansion. Be prepared for significant shifts in your belief systems or life goals.

  4. Moon Square Mars (approx 58.46°): This aspect suggests some tension between emotions and actions. It may be challenging to balance feelings with assertiveness, requiring careful consideration of decisions and responses.

In personal practice, focus on introspection, cautious communication, and emotional depth. Be mindful of underlying currents in relationships and seek deeper understanding. Embrace opportunities for transformation and growth while maintaining a realistic approach to your goals and ideals.

FAILED format FAILED: extract <-> rank SUCCESS: mercury-venus-conjunct FAILED ranking

This is a failure. Hallucinations are all over. There's some sort of a mode-collapse situation in the example above with gpt, we've seen similar outcomes with gemma, but gemma picks opposition as a favorite (conjunctions and oppositions are the most discussed and could be over-represented in the training), deepseek got desperately lost in thinking. Unfortunately, we cannot get any reasonable measure of the models' consensus here with that much of hallucination. However, all but phi agree on the mercury-venus-conjunct -- conjunctions are easiest to spot (two planets in the same sign) -- something real is going on here.

Let's run a few rounds with random dates for reading and gather some statistics.

num_rounds = 12 major = ['conjunct','square','oppos','trine','sextile','inconjunct'] results = {m:[] for m in team} counts = {m:[] for m in team} counts['true-dist'] = [] success = [[] for _ in range(len(team))] # extracted aspect is true madeup = [[] for _ in range(len(team))] # extracted aspect is hallucination failed = [[0, 0] for _ in range(len(team))] # failed round: either format or consistency total = [] # number of major true aspects in each round score = [0] * len(team) # soft ranking score tokens = [0] * len(team) # response token count timer = [0] * len(team) # processing time freq = {x:0 for x in major} # true aspect counts favs = {x:freq.copy() for x in team} # track models' "favorite" aspects for n in range(num_rounds): # pick random transit date date = f'{np.random.randint(1930, 2030)}-{np.random.randint(1, 12):>02}-{np.random.randint(1, 25):>02}' transit = get_day_chart(date, objects=object_filter) positions = chart_to_text(transit, object_filter) # get true aspects and make validation table aspects = get_aspects(transit, object_filter) aspects_text = aspects_to_text(transit, aspects) aspect_table = {aspect_hash(a):[0] * len(team) for a in aspects_text} count = 0 for k in aspect_table: a = k.split('-')[-1] freq[a] = freq.get(a, 0) + 1 if a in major: count += 1 total.append(count) # major aspects only print(f'\n--------------------------------------------------- {date} >>{len(aspects)}<< --- {n + 1}') for i, model in enumerate(team): print(f'===================================== {model}') output = read_positions(model, aspects_extraction_prompt, positions, context=context, show_output=False) extracted, rank, num_in_tokens, num_out_tokens, tm = output order = [aspect_hash(a) for a in rank] # drop duplicates is any keys = set([aspect_hash(a) for a in extracted]) rs = sc = mu = ff = rf = 0 if len(keys - set(order)) != 0: rf += 1 print('FAILED extract <-> rank') for key in keys: if not key in aspect_table: if key[0].isalpha() and len(key.split('-'))==3: print('M', end='') # made-up mu += 1 else: print('F', end='') # failure ff = 1 continue if not key in order: print('s', end='') # partial success ff = 1 else: print('S', end='') # success rs += ranking_score(key, order, aspect_table) sc += 1 aspect_table[key][i] = 1 key = key.split('-')[-1] favs[model][key] = favs[model].get(key, 0) + 1 success[i].append(sc) madeup[i].append(mu) failed[i][0] += ff failed[i][1] += rf score[i] += rs/len(keys) tokens[i] += num_out_tokens timer[i] += tm # pad to the real aspects list length - if appears shorter it means there were dups print('.' * (len(aspects) - len(extracted))) print(f'EXTRACTION success:{sc/len(aspects):>6.2%} madeup:{mu/(sc + mu or 1):>7.2%}') print(f'RANKING score:{rs/len(keys):>6.2%}') --------------------------------------------------- 1951-06-15 >>23<< --- 1 ===================================== llama3.1 MMMMMMMS............... EXTRACTION success: 4.35% madeup: 87.50% RANKING score: 6.45% ===================================== gemma3:12b MMMMMSMMS.............. EXTRACTION success: 8.70% madeup: 77.78% RANKING score: 7.02% ===================================== phi4 MMMMMM................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gpt-oss SSSSSSSSSSSSS.......... EXTRACTION success:56.52% madeup: 0.00% RANKING score:87.70% ===================================== deepseek-r1:14b FAILED format FAILED extract <-> rank sFFF................ EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% --------------------------------------------------- 1992-11-16 >>15<< --- 2 ===================================== llama3.1 FAILED extract <-> rank MMMFMM......... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gemma3:12b FAILED extract <-> rank SMMMMMMMMM..... EXTRACTION success: 6.67% madeup: 90.00% RANKING score: 9.96% ===================================== phi4 MMMMMM......... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gpt-oss SSSSSSSSSSS.... EXTRACTION success:73.33% madeup: 0.00% RANKING score:92.57% ===================================== deepseek-r1:14b FAILED format FAILED extract <-> rank FsFM........... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% --------------------------------------------------- 1945-09-10 >>17<< --- 3 ===================================== llama3.1 MMMMMMMMMM....... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gemma3:12b FAILED extract <-> rank SMMMMMSMMMMMM.... EXTRACTION success:11.76% madeup: 84.62% RANKING score:15.04% ===================================== phi4 MMMMMMMFMMMM..... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gpt-oss MSSM............. EXTRACTION success:11.76% madeup: 50.00% RANKING score:48.88% ===================================== deepseek-r1:14b FAILED format FAILED extract <-> rank FFFM........... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% --------------------------------------------------- 1947-09-14 >>19<< --- 4 ===================================== llama3.1 MMMMMM............. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gemma3:12b MMMMMMMMM.......... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== phi4 MMMMSM............. EXTRACTION success: 5.26% madeup: 83.33% RANKING score:16.25% ===================================== gpt-oss SSSMS.............. EXTRACTION success:21.05% madeup: 20.00% RANKING score:67.04% ===================================== deepseek-r1:14b FAILED format FAILED extract <-> rank FF............... EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% --------------------------------------------------- 2007-09-15 >>23<< --- 5 ===================================== llama3.1 FAILED extract <-> rank MMMMFM................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gemma3:12b FAILED extract <-> rank SMMSMMMMMM............. EXTRACTION success: 8.70% madeup: 80.00% RANKING score:14.37% ===================================== phi4 MMMMM.................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gpt-oss MMMMMMMMMMMMMMMMMMMMMM. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== deepseek-r1:14b FAILED format FAILED extract <-> rank MMFFF.................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% --------------------------------------------------- 1963-02-23 >>21<< --- 6 ===================================== llama3.1 MMMMMFS.............. EXTRACTION success: 4.76% madeup: 83.33% RANKING score: 9.62% ===================================== gemma3:12b FAILED extract <-> rank MSMMMMMMMM........... EXTRACTION success: 4.76% madeup: 90.00% RANKING score: 4.20% ===================================== phi4 MMMMMM............... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gpt-oss FAILED format FAILED extract <-> rank F.................... EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% ===================================== deepseek-r1:14b FAILED format FAILED extract <-> rank FsF................. EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% --------------------------------------------------- 2019-11-03 >>21<< --- 7 ===================================== llama3.1 FAILED extract <-> rank MMMMMMMM............. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gemma3:12b MMMMMMMM............. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== phi4 MSMMM................ EXTRACTION success: 4.76% madeup: 80.00% RANKING score: 8.39% ===================================== gpt-oss MMMMMM............... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== deepseek-r1:14b SMSMMSS.............. EXTRACTION success:19.05% madeup: 42.86% RANKING score:49.53% --------------------------------------------------- 1936-07-15 >>20<< --- 8 ===================================== llama3.1 FAILED extract <-> rank SMMMMMM............. EXTRACTION success: 5.00% madeup: 85.71% RANKING score: 9.96% ===================================== gemma3:12b SMMMMMMMMMSMMMMMSMMMSMMMM EXTRACTION success:20.00% madeup: 84.00% RANKING score:14.26% ===================================== phi4 MMMM................ EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gpt-oss SMSMSSMM............ EXTRACTION success:20.00% madeup: 50.00% RANKING score:45.06% ===================================== deepseek-r1:14b MMMMMMMMM........... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% --------------------------------------------------- 1967-10-05 >>17<< --- 9 ===================================== llama3.1 MMMMM............ EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gemma3:12b MMMMMMMM......... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== phi4 MMMMMMM.......... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gpt-oss SSSSSMSSMS....... EXTRACTION success:47.06% madeup: 20.00% RANKING score:71.70% ===================================== deepseek-r1:14b FAILED format FAILED extract <-> rank sFFMMFs........ EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% --------------------------------------------------- 1986-06-05 >>18<< --- 10 ===================================== llama3.1 FAILED extract <-> rank MMMM.............. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gemma3:12b FAILED extract <-> rank MMMMMMMMMsMMMMMMM. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== phi4 MMMMM............. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gpt-oss MMMMMMMMMMMMMM.... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== deepseek-r1:14b FAILED format FAILED extract <-> rank MFF............ EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% --------------------------------------------------- 1995-11-04 >>20<< --- 11 ===================================== llama3.1 FAILED extract <-> rank MMMMMMM............. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gemma3:12b FAILED extract <-> rank MMMSMMMMSMMMMMM..... EXTRACTION success:10.00% madeup: 86.67% RANKING score: 4.05% ===================================== phi4 MMMMMMMM............ EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gpt-oss MMSMMMM............. EXTRACTION success: 5.00% madeup: 85.71% RANKING score:12.00% ===================================== deepseek-r1:14b SSMM................ EXTRACTION success:10.00% madeup: 50.00% RANKING score:39.75% --------------------------------------------------- 2004-10-14 >>19<< --- 12 ===================================== llama3.1 MMSMMMMM........... EXTRACTION success: 5.26% madeup: 87.50% RANKING score:10.80% ===================================== gemma3:12b FAILED extract <-> rank MMMMMMMMMMMMMMM.... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== phi4 MMMSM.............. EXTRACTION success: 5.26% madeup: 80.00% RANKING score:17.29% ===================================== gpt-oss MMMMMMSSMM......... EXTRACTION success:10.53% madeup: 80.00% RANKING score:14.65% ===================================== deepseek-r1:14b FAILED format FAILED extract <-> rank sFFFss........... EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00%

The plots below show the size of extracted lists, correct and hallucinated percentage on the Y-axis and the number of true aspects on the X-axis.

plot_test_result(total, madeup, success)

Sizes of the extracted list and its hallucinated partition seem to have no correlation with the number of true aspects present in the chart. However, the success partition has a slight negative correlation.

counts['true-dist'].append(freq.copy()) for i, model in enumerate(team): counts[model].append(favs[model].copy()) results[model].append({ 'success': sum(success[i])/sum(total), 'madeup': sum(madeup[i])/(sum(madeup[i]) + sum(success[i]) or 1), 'failed': sum(failed[i])/2/num_rounds, 'score': score[i]/num_rounds, '#tokens': tokens[i]/num_rounds, '%time': timer[i]/sum(timer) }) print(" ".join([f"{model:>15}"] + [f"{k}:{v:6,.0f}" if k=='#tokens' else f"{k}:{v:>7.2%}" for k,v in results[model][-1].items()])) llama3.1 success: 2.22% madeup: 94.94% failed: 37.50% score: 3.07% #tokens: 251 %time: 1.23% gemma3:12b success: 7.78% madeup: 90.54% failed: 33.33% score: 5.74% #tokens: 349 %time: 2.49% phi4 success: 1.67% madeup: 95.95% failed: 4.17% score: 3.49% #tokens: 349 %time: 2.51% gpt-oss success: 25.00% madeup: 59.09% failed: 8.33% score: 36.63% #tokens: 8,668 %time: 49.46% deepseek-r1:14b success: 3.33% madeup: 77.78% failed: 75.00% score: 7.44% #tokens: 5,402 %time: 44.31%

The winner is gpt, not overly consistent, but able to deliver rounds with multiple successes, some hallucination free. On the loosing side is deepseek unable to deliver the requested format seemingly distracted by the "thinking."

for m,f in zip(team, failed): print(f'{m:>15}: failed format {f[0]/num_rounds:>7.2%} failed consistency {f[1]/num_rounds:>7.2%}') llama3.1: failed format 25.00% failed consistency 50.00% gemma3:12b: failed format 8.33% failed consistency 58.33% phi4: failed format 8.33% failed consistency 0.00% gpt-oss: failed format 8.33% failed consistency 8.33% deepseek-r1:14b: failed format 75.00% failed consistency 75.00% # check if any particular aspect appears abnormally often for model in team: d = {k:v for k,v in favs[model].items() if k in major} print(f'{model:>15}: {d}') d = {k:v for k,v in freq.items() if k in major} print(f' true-aspects: {d}') llama3.1: {'conjunct': 3, 'square': 0, 'oppos': 0, 'trine': 1, 'sextile': 0, 'inconjunct': 0} gemma3:12b: {'conjunct': 10, 'square': 0, 'oppos': 3, 'trine': 1, 'sextile': 1, 'inconjunct': 0} phi4: {'conjunct': 2, 'square': 0, 'oppos': 0, 'trine': 0, 'sextile': 1, 'inconjunct': 0} gpt-oss: {'conjunct': 17, 'square': 3, 'oppos': 1, 'trine': 8, 'sextile': 15, 'inconjunct': 1} deepseek-r1:14b: {'conjunct': 8, 'square': 1, 'oppos': 1, 'trine': 1, 'sextile': 1, 'inconjunct': 1} true-aspects: {'conjunct': 30, 'square': 35, 'oppos': 14, 'trine': 35, 'sextile': 52, 'inconjunct': 14}

And, indeed, as expected the conjunction is everybody's favorite.

Bottom line – we shouldn't trust this team with the aspects extraction.

Aspects to the planets rank

Planets-ranking might be "easier" for LLMs due to a fixed list, at least we should be able to measure our team consensus here.

Planets ranking, same as the aspects ranking, has a lot of room for subjectivity. In this test we specify the exact criteria to follow, and in the scoring routine we weight the correctness of assessment of each involved factor more than the final rating index.

positions_reading_prompt = """You are practicing astrologer. Below is a day-chart: {positions} Define the aspects present in this chart and rank the planets by importance ({context}) based on: 1. Planet position strength (domicile > exaltation > none > fall > exile) 2. Planet aspects count Your answer should be in the following exact format (plain, concise, no extras): ASPECTS <list planetary aspects as following: * <planet-1> - <planet-2> - <aspect-name>> RANK <list your rank as following: * <planet-name> <{dignity}> <num-aspects>> EXPLANATION <explain your ranking choice> """ def planet_rank(data, aspects): # get aspect count count = {x: 0 for x in data if x in PLANETS} for a in aspects: count[a['objects'][0]] += 1 count[a['objects'][1]] += 1 # compile positioning specs props = [] for x, d in data.items(): if 'position' in d: s = SIGNS[int(d['position']//30)] priority = sum([ 1 if s in PLANETS[x]['domicile'] else 0, 2 if s in PLANETS[x]['exaltation'] else 0, 4 if s in PLANETS[x]['fall'] else 0, 5 if s in PLANETS[x]['exile'] else 0, ]) props.append((x, priority or 3, count[x])) return sorted(props, key=lambda p:p[1:]) planet_rank(transit, aspects) [('JUPITER', 3, 2), ('PLUTO', 3, 3), ('URANUS', 3, 4), ('MERCURY', 3, 5), ('MOON', 3, 6), ('NEPTUNE', 4, 3), ('SUN', 4, 4), ('VENUS', 4, 4), ('MARS', 5, 3), ('SATURN', 5, 4)] # planetary hierarchy order HIERARCHY = '|'.join(list(PLANETS.keys())) # planetary dignities order DIGNITY = 'DOMICILE|EXALT|NONE|FALL|EXILE' print(positions_reading_prompt.format(positions='\n'.join(positions), context=context, dignity=DIGNITY)) You are practicing astrologer. Below is a day-chart: Sun: 20°59' Libra (eclipse) Moon: 19°29' Libra Mercury: 26°48' Libra Venus: 12°02' Virgo Mars: 11°25' Libra Jupiter: 4°02' Libra Saturn: 26°45' Cancer Uranus: 3°12' Pisces (retrograde) Neptune: 12°38' Aquarius (retrograde) Pluto: 20°03' Sagittarius Define the aspects present in this chart and rank the planets by importance (natal interpretation) based on: 1. Planet position strength (domicile > exaltation > none > fall > exile) 2. Planet aspects count Your answer should be in the following exact format (plain, concise, no extras): ASPECTS - - > RANK > EXPLANATION def match_ranking_props(text): text = text.upper() rank = DIGNITY.split('|') # match requested format match = re.match(fr".*({HIERARCHY}).*({DIGNITY}).*(\d+).*", text) if match: return (match.groups()[0], rank.index(match.groups()[1]) + 1, int(match.groups()[2])) # match ranking factors separately planet = set(re.findall(fr"{HIERARCHY}", text)) if len(planet) == 1: planet = planet.pop() digns = set(re.findall(fr"{DIGNITY}", text)) if len(digns) == 1: digns = rank.index(digns.pop()) + 1 return (planet, digns, None) return (planet, None, None) return ('', None, None) match_ranking_props('Uranus none 3') ('URANUS', 3, 3) def ranking_score(index: list, order: list, weight: list): """ weighted average of matched ranking factors """ table = { x[0]:x[1:] + (i,) for i,x in enumerate(order) } score = lambda x:sum([(table[x[0]][i]==x[i]) * weight[i] for i in range(len(weight))])/sum(weight) return sum([score(index[i] + (i,)) if i < len(index) and index[i][0] != '' else 0 for i in range(len(order))])/len(order) # ranking-score: position-strength, aspects-count, ranking-index weight = [3, 2, 1] # get full unfiltered ranked list aspects = aspect_rank(get_aspects(transit, object_filter)) aspects_text = aspects_to_text(transit, aspects) # hash-table: let's validate what we can validate - the real aspects aspect_table = {aspect_hash(a):[0] * len(team) for a in aspects_text} # planets rank by our criteria order = planet_rank(transit, aspects) # gather ratings for consensus measure ratings = {x:[0] * len(team) for x in object_filter} for i, model in enumerate(team): print('====================================') print(f' {model}') print('====================================') output = read_positions(model, positions_reading_prompt, positions, context=context, dignity=DIGNITY) extracted, rank, num_in_tokens, num_out_tokens, tm = output index = [] # ranking index for p in rank: props = match_ranking_props(p) if not props[0] in ratings: print('FAILED format') continue if ratings[props[0]][i] > 0: print('DUPLICATE ranking') continue index.append(props) ratings[props[0]][i] = len(index) for key in set([aspect_hash(a) for a in extracted]): if not key in aspect_table: if key[0].isalpha(): print(f'NOT IN the TABLE: {key}') continue print(f'SUCCESS: {key}') aspect_table[key][i] = 1 # compare (position-score, aspects-count, ranking-index) print('\n target (ps, ac, ri) vs output\n____________________________________') A = sorted([x + (i,) for i,x in enumerate(order)], key=lambda x:x[0]) B = sorted([x + (i,) for i,x in enumerate(index)], key=lambda x:x[0]) for a,b in zip(A,B): print(f'{a[0]:>8}: {str(a[1:]):>10} <->{str(b[1:]):>10}') print(f'\nRANKING score:{ranking_score(index, order, weight):>6.2%}') ==================================== llama3.1 ====================================

ASPECTS

  • Sun - Moon - Sextile
  • Mercury - Uranus - Square
  • Venus - Mars - Square
  • Moon - Jupiter - Conjunction
  • Mercury - Saturn - Quincunx
  • Mars - Jupiter - Opposition
  • Venus - Saturn - Trine
  • Moon - Neptune - Sextile
  • Mercury - Pluto - Sextile
  • Sun - Neptune - Tenth Harmonic (Minor aspect)

RANK

  • Moon EXALT 4
  • Jupiter NONE 2
  • Mars RETROGRADE NONE 3
  • Saturn DOMICILE 5
  • Venus NONE 1
  • Uranus NONE 1
  • Neptune NONE 2
  • Sun NONE 0
  • Mercury RETROGRADE NONE 4
  • Pluto NONE 1

EXPLANATION The Moon, being in its exaltation sign Leo and having four aspects, is the most emphasized planet in the chart. Saturn's domicile position and five aspects give it importance but not as much as the Moon. Jupiter's conjunction with the Moon makes it a close second to the Moon, despite lacking planetary influence due to being retrograde.

NOT IN the TABLE: mars-jupiter-oppos NOT IN the TABLE: mercury-saturn-inconjunct SUCCESS: mercury-uranus-square SUCCESS: moon-jupiter-conjunct NOT IN the TABLE: venus-mars-square NOT IN the TABLE: mercury-pluto-sextile NOT IN the TABLE: venus-saturn-trine NOT IN the TABLE: moon-neptune-sextile NOT IN the TABLE: sun-moon-sextile target (ps, ac, ri) vs output ____________________________________ JUPITER: (3, 3, 1) <-> (3, 2, 1) MARS: (3, 4, 5) <-> (3, 3, 2) MERCURY: (3, 5, 6) <-> (3, 4, 8) MOON: (3, 4, 3) <-> (2, 4, 0) NEPTUNE: (3, 6, 8) <-> (3, 2, 6) PLUTO: (3, 2, 0) <-> (3, 1, 9) SATURN: (4, 3, 9) <-> (1, 5, 3) SUN: (3, 4, 2) <-> (3, 0, 7) URANUS: (3, 5, 7) <-> (3, 1, 5) VENUS: (3, 4, 4) <-> (3, 1, 4) RANKING score: 3.33% ==================================== gemma3:12b ====================================

ASPECTS

  • Sun - Jupiter - Trine
  • Moon - Mercury - Square
  • Moon - Venus - Trine
  • Moon - Saturn - Square
  • Mercury - Uranus - Square
  • Mercury - Neptune - Trine
  • Venus - Saturn - Square
  • Venus - Uranus - Trine
  • Mars - Saturn - Square
  • Mars - Uranus - Trine
  • Uranus - Neptune - Opposition
  • Pluto - Mercury - Trine

RANK

  • Sun DOMICILE 1
  • Moon DOMICILE 2
  • Mercury EXALT 2
  • Venus EXALT 1
  • Jupiter DOMICILE 1
  • Saturn DOMICILE 1
  • Uranus DOMICILE 1
  • Neptune EXALT 1
  • Mars EXILE 1
  • Pluto NONE 1

EXPLANATION Sun (domicile) and Moon (domicile) are highest due to their fundamental positions. Mercury and Venus have exaltation, ranking them highly. Jupiter, Saturn, Uranus and Neptune hold domicile strength, followed by Mars (exile) and Pluto (none). Aspect count is secondary to position strength in this ranking.

NOT IN the TABLE: venus-uranus-trine NOT IN the TABLE: mars-saturn-square SUCCESS: mercury-uranus-square NOT IN the TABLE: moon-venus-trine NOT IN the TABLE: mars-uranus-trine NOT IN the TABLE: moon-mercury-square NOT IN the TABLE: mercury-neptune-trine NOT IN the TABLE: sun-jupiter-trine NOT IN the TABLE: uranus-neptune-oppos SUCCESS: venus-saturn-square NOT IN the TABLE: moon-saturn-square NOT IN the TABLE: mercury-pluto-trine target (ps, ac, ri) vs output ____________________________________ JUPITER: (3, 3, 1) <-> (1, 1, 4) MARS: (3, 4, 5) <-> (5, 1, 8) MERCURY: (3, 5, 6) <-> (2, 2, 2) MOON: (3, 4, 3) <-> (1, 2, 1) NEPTUNE: (3, 6, 8) <-> (2, 1, 7) PLUTO: (3, 2, 0) <-> (3, 1, 9) SATURN: (4, 3, 9) <-> (1, 1, 5) SUN: (3, 4, 2) <-> (1, 1, 0) URANUS: (3, 5, 7) <-> (1, 1, 6) VENUS: (3, 4, 4) <-> (2, 1, 3) RANKING score: 1.67% ==================================== phi4 ====================================

ASPECTS

  • Sun - Moon - Sextile
  • Mercury - Mars - Trine
  • Venus - Uranus - Conjunction
  • Jupiter - Saturn - Square
  • Neptune - Pluto - Conjunction

RANK

  1. Moon EXALT 3
  2. Saturn DOMICILE 1
  3. Mercury DOMICILE 2
  4. Sun DOMICILE 2
  5. Mars FALL 2
  6. Venus FALLEN HOUSE 2
  7. Uranus TRINE HOUSE 2
  8. Jupiter EXILE 1
  9. Neptune EXILE 1
  10. Pluto EXILE 1

EXPLANATION
The Moon is given the highest importance due to its exaltation in Leo and having three aspects, which enhances its influence significantly. Saturn follows, as it's well placed in its domicile of Aries with one aspect (square), providing stability and authority. Mercury ranks third due to its strong domicile position in Aquarius coupled with two aspects, making communication a central theme. The Sun is also domiciled in Pisces but has fewer aspects compared to Mercury. Mars' fall in Virgo and two aspects highlight tension and challenges, placing it fifth. Venus, though not as strongly placed, affects personal relationships through its aspects and fallen house position. Uranus has trine from domicile with two aspects indicating unexpected changes or liberation. Jupiter's exilic position is softened by one aspect (square), suggesting learning through obstacles. Neptune and Pluto both hold important transformative roles due to their exile positions and one aspect each, pointing towards deep psychological themes.

NOT IN the TABLE: mercury-mars-trine NOT IN the TABLE: sun-moon-sextile NOT IN the TABLE: neptune-pluto-conjunct NOT IN the TABLE: jupiter-saturn-square NOT IN the TABLE: venus-uranus-conjunct target (ps, ac, ri) vs output ____________________________________ JUPITER: (3, 3, 1) <-> (5, 1, 7) MARS: (3, 4, 5) <-> (4, 2, 4) MERCURY: (3, 5, 6) <-> (1, 2, 2) MOON: (3, 4, 3) <-> (2, 3, 0) NEPTUNE: (3, 6, 8) <-> (5, 1, 8) PLUTO: (3, 2, 0) <-> (5, 1, 9) SATURN: (4, 3, 9) <-> (1, 1, 1) SUN: (3, 4, 2) <-> (1, 2, 3) URANUS: (3, 5, 7) <->(None, None, 6) VENUS: (3, 4, 4) <-> (4, 2, 5) RANKING score:11.67% ==================================== gpt-oss ====================================

ASPECTS

  • Sun - Mars - trine
  • Sun - Uranus - sextile
  • Sun - Neptune - conjunction
  • Moon - Jupiter - opposition
  • Venus - Jupiter - opposition
  • Mercury - Mars - square
  • Mars - Uranus - sextile
  • Mars - Neptune - trine
  • Uranus - Neptune - sextile

RANK

  • Mars NONE 4
  • Sun NONE 3
  • Uranus NONE 3
  • Neptune NONE 3
  • Jupiter NONE 2
  • Moon NONE 1
  • Mercury NONE 1
  • Venus NONE 1
  • Saturn NONE 0
  • Pluto NONE 0

EXPLANATION All planets are in the "NONE" category because none occupy a domicile, exaltation, fall or exile sign. Therefore the importance ranking is based solely on the number of aspects each planet participates in. Mars has the highest count (4 aspects), followed by Sun, Uranus and Neptune each with 3, then Jupiter (2), Moon, Mercury and Venus (1 each), and finally Saturn and Pluto with no aspects.

NOT IN the TABLE: mercury-mars-square SUCCESS: uranus-neptune-sextile NOT IN the TABLE: venus-jupiter-oppos NOT IN the TABLE: sun-mars-trine NOT IN the TABLE: moon-jupiter-oppos NOT IN the TABLE: mars-uranus-sextile NOT IN the TABLE: sun-uranus-sextile NOT IN the TABLE: sun-neptune-conjunct NOT IN the TABLE: mars-neptune-trine target (ps, ac, ri) vs output ____________________________________ JUPITER: (3, 3, 1) <-> (3, 2, 4) MARS: (3, 4, 5) <-> (3, 4, 0) MERCURY: (3, 5, 6) <-> (3, 1, 6) MOON: (3, 4, 3) <-> (3, 1, 5) NEPTUNE: (3, 6, 8) <-> (3, 3, 3) PLUTO: (3, 2, 0) <-> (3, 0, 9) SATURN: (4, 3, 9) <-> (3, 0, 8) SUN: (3, 4, 2) <-> (3, 3, 1) URANUS: (3, 5, 7) <-> (3, 3, 2) VENUS: (3, 4, 4) <-> (3, 1, 7) RANKING score: 8.33% ==================================== deepseek-r1:14b ==================================== Okay, so I'm trying to figure out how to define the aspects and rank the planets based on their position strength and aspect count in this day chart. Let's break it down step by step.

First, I need to list all the planets and their positions:

  • Sun: 1°06' Pisces
  • Moon: 17°39' Leo
  • Mercury: 28°18' Aquarius (retrograde)
  • Venus: 19°02' Capricorn
  • Mars: 0°37' Virgo (retrograde)
  • Jupiter: 20°51' Leo (retrograde)
  • Saturn: 12°05' Aries
  • Uranus: 1°44' Gemini
  • Neptune: 2°53' Aries
  • Pluto: 5°54' Aquarius

I need to define the aspects present. Aspects are angles between planets, and common ones include conjunction (0°), opposition (180°), trine (120°), square (90°), quintile (72°), sextile (60°), semi-square (45°), sesquiquadrate (135°), and quincunx (150°).

Looking at each planet's position, I'll calculate the differences between their degrees to find any aspects.

Starting with Sun in Pisces: 1°06'. Let's see which other planets could form aspects with it. For example, Moon is in Leo at 17°39', so Sun (Pisces) and Moon (Leo) are about 158° apart because Leo starts at 120°, so 17°39' minus 120° is -102°, but considering the next sign, it's actually 180° - (Sun position + Moon position in terms of their signs). Wait, maybe a better approach is to convert each planet's position to degrees from 0° Aries.

Let me do that:

  • Sun: Pisces starts at 360° (or 0°) minus 30° for Aquarius, so Pisces starts at 330°. So 1°06' in Pisces is 330 + 1.1 = 331.1°
  • Moon: Leo starts at 120°, so 17°39' is 120 + 17.65 ≈ 137.65°
  • Mercury: Aquarius ends at 300°, so 28°18' is 300 - (360 - 28.3) = wait, no. Wait, Aquarius is 30° from Capricorn, which starts at 300°, so Aquarius is 300 to 330°. So 28°18' in Aquarius is 300 + 28.3 ≈ 328.3°
  • Venus: Capricorn ends at 300°, so 19°02' is 300 - (360 - 19.03) = wait no, Capricorn starts at 300°, so adding degrees: 300 + 19.03 ≈ 319.03°
  • Mars: Virgo starts at 240°, so 0°37' is 240.61°
  • Jupiter: Leo ends at 150°, so 20°51' in Leo is 120 + 20.85 ≈ 140.85°
  • Saturn: Aries starts at 0°, so 12°05' is 12.08°
  • Uranus: Gemini starts at 60°, so 1°44' is 61.73°
  • Neptune: Aries ends at 30°, so 2°53' is 2.88° (since it's in Aries)
  • Pluto: Aquarius ends at 330°, so 5°54' is 5.9° into Aquarius, which is 360 - 5.9 ≈ 354.1°

Wait, maybe I'm complicating this. Let me list each planet with their degree positions from Aries:

  • Sun: Pisces 1°06' = 330 + 1.1 = 331.1°
  • Moon: Leo 17°39' = 120 + 17.65 ≈ 137.65°
  • Mercury: Aquarius 28°18' = 300 + 28.3 ≈ 328.3° (but since it's retrograde, does that affect aspects? Maybe not the aspect type, just direction)
  • Venus: Capricorn 19°02' = 300 + 19.03 ≈ 319.03°
  • Mars: Virgo 0°37' = 240 + 0.61 ≈ 240.61°
  • Jupiter: Leo 20°51' = 120 + 20.85 ≈ 140.85°
  • Saturn: Aries 12°05' = 12.08°
  • Uranus: Gemini 1°44' = 60 + 1.73 ≈ 61.73°
  • Neptune: Aries 2°53' = 2.88°
  • Pluto: Aquarius 5°54' = 360 - (5.9) ≈ 354.1°

Now, let's compute the differences between each pair of planets to find aspects.

Starting with Sun at 331.1°:

  • To Moon: 137.65 - 331.1 = negative, so add 360: 137.65 + 360 - 331.1 ≈ 166.55° → Opposite sign, but the actual angle is |137.65 - 331.1| = 193.45° which isn't a common aspect. Wait, maybe I should subtract and take modulo 360.

Alternatively, compute all possible pairs and see if any differences match standard aspects (0°, 30°, 45°, 60°, 72°, 90°, 120°, 150°).

Let me make a table of each planet's degree:

Sun: 331.1 Moon: 137.65 Mercury: 328.3 (but retrograde) Venus: 319.03 Mars: 240.61 Jupiter: 140.85 Saturn: 12.08 Uranus: 61.73 Neptune: 2.88 Pluto: 354.1

Now, let's compute the differences for each pair:

Sun (331.1) with others:

  • Moon: |331.1 - 137.65| = 193.45 → Not a standard aspect.
  • Mercury: |331.1 - 328.3| = 2.8° → Conjunction (0°) or very close, but exact? Maybe a conjunction.
  • Venus: |331.1 - 319.03| ≈ 12.07° → Not an aspect.
  • Mars: |331.1 - 240.61| ≈ 90.5° → Close to a square (90°), so square?
  • Jupiter: |331.1 - 140.85| = 190.25 → No.
  • Saturn: |331.1 - 12.08| ≈ 319.02 → Opposite, 180° apart? Wait, 331.1 - 12.08 is about 319.02, which is more than 180, so the smaller angle would be 360 - 319.02 = 40.98° → Not an aspect.
  • Uranus: |331.1 - 61.73| ≈ 269.37 → No.
  • Neptune: |331.1 - 2.88| ≈ 328.22 → No.
  • Pluto: |331.1 - 354.1| ≈ 23°, which is not an aspect.

So Sun has a conjunction with Mercury (approx 2.8°) and a square with Mars (~90.5°). But let's check exactness; 2.8° is very close to a conjunction, so we can consider it a conjunction. The square is at ~90°, which is close enough.

Next, Moon (137.65):

  • Mercury: |137.65 - 328.3| = 190.65 → No.
  • Venus: |137.65 - 319.03| ≈ 181.38°, which is ~ opposition (180°). Close enough.
  • Mars: |137.65 - 240.61| ≈ 102.96 → No.
  • Jupiter: |137.65 - 140.85| ≈ 3.2° → Conjunction (exact?) Yes, very close.
  • Saturn: |137.65 - 12.08| = 125.57 → No.
  • Uranus: |137.65 - 61.73| ≈ 75.92 → No.
  • Neptune: |137.65 - 2.88| ≈ 134.77 → No.
  • Pluto: |137.65 - 354.1| ≈ 216.45 → No.

So Moon has a conjunction with Jupiter (~3°) and an opposition with Venus (≈180°). Wait, 181.38 is almost exactly opposite, so that's an opposition.

Mercury (328.3):

  • Venus: |328.3 - 319.03| ≈ 9.27 → No.
  • Mars: |328.3 - 240.61| ≈ 87.69° → Close to a square (90°). So square?
  • Jupiter: |328.3 - 140.85| = 187.45 → No.
  • Saturn: |328.3 - 12.08| ≈ 316.22 → No.
  • Uranus: |328.3 - 61.73| ≈ 266.57 → No.
  • Neptune: |328.3 - 2.88| ≈ 325.42 → No.
  • Pluto: |328.3 - 354.1| ≈ 25.8 → No.

So Mercury has a square with Mars (~87.69°), close enough.

Venus (319.03):

  • Mars: |319.03 - 240.61| ≈ 78.42 → Close to a square but not exact.
  • Jupiter: |319.03 - 140.85| = 178.18° → Close to opposition (180°).
  • Saturn: |319.03 - 12.08| ≈ 306.95 → No.
  • Uranus: |319.03 - 61.73| ≈ 257.3 → No.
  • Neptune: |319.03 - 2.88| ≈ 316.15 → No.
  • Pluto: |319.03 - 354.1| ≈ 35.07 → No.

So Venus has an opposition with Jupiter (~178°), which is close enough, and maybe a square with Mars but not exact.

Jupiter (140.85):

  • Saturn: |140.85 - 12.08| ≈ 128.77 → No.
  • Uranus: |140.85 - 61.73| ≈ 79.12 → Close to a square, but not exact.
  • Neptune: |140.85 - 2.88| ≈ 137.97 → No.
  • Pluto: |140.85 - 354.1| ≈ 213.25 → No.

So maybe no aspects from Jupiter except the opposition with Venus.

Saturn (12.08):

  • Uranus: |12.08 - 61.73| ≈ 49.65 → Not an aspect.
  • Neptune: |12.08 - 2.88| ≈ 9.2 → Close to a conjunction, maybe.
  • Pluto: |12.08 - 354.1| ≈ 342.02 → No.

So Saturn has a conjunction with Neptune (approx 9.2°), which is close enough.

Uranus (61.73):

  • Neptune: |61.73 - 2.88| ≈ 58.85 → Close to a sextile (60°). So sextile.
  • Pluto: |61.73 - 354.1| ≈ 292.37 → No.

So Uranus has a sextile with Neptune (~58.85°), which is close enough.

Neptune (2.88):

  • Pluto: |2.88 - 354.1| ≈ 351.22 → No.

Pluto doesn't form an aspect with anyone else except maybe Sun, but we've already covered that.

Wait, let's check other possible aspects:

For example, Mercury at 328.3 and Pluto at 354.1: |328.3 - 354.1| ≈ 25.8° → Not an aspect.

Mars at 240.61 and Jupiter at 140.85: |240.61 - 140.85| ≈ 99.76° → Close to a square, but not exact.

Venus at 319.03 and Uranus at 61.73: |319.03 - 61.73| = 257.3 → Opposite is 180°, so 257.3 - 180 = 77.3°, not an aspect.

Wait, perhaps I missed some aspects:

Let me check each planet against all others systematically.

Sun (331.1):

  • Mercury: 331.1 - 328.3 ≈ +2.8 → Conjunction
  • Mars: 240.61 to 331.1 is 90.5° → Square

Moon (137.65):

  • Jupiter: 140.85 - 137.65 ≈ +3.2 → Conjunction
  • Venus: 319.03 - 137.65 ≈ 181.38 → Opposition

Mercury (328.3):

  • Mars: 240.61 to 328.3 is 87.69 → Square

Venus (319.03):

  • Jupiter: 140.85, Venus at 319.03; |319.03 - 140.85| ≈ 178.18 → Opposition

Jupiter (140.85):

No other aspects except the conjunction with Moon and opposition with Venus.

Saturn (12.08):

  • Neptune: 2.88; |12.08 - 2.88| ≈ 9.2 → Conjunction

Uranus (61.73):

  • Neptune: 2.88; |61.73 - 2.88| ≈ 58.85 → Sextile

So compiling all these, the aspects are:

  1. Sun conjunct Mercury
  2. Sun square Mars
  3. Moon conjunct Jupiter
  4. Moon opposition Venus
  5. Mercury square Mars
  6. Venus opposition Jupiter
  7. Saturn conjunction Neptune
  8. Uranus sextile Neptune

Wait, but I think I may have missed the aspect between Uranus and Pluto or others.

Let me check again:

Uranus is at 61.73°.

Pluto is at 354.1°.

The difference is |354.1 - 61.73| = 292.37°, which is more than 180°, so the smaller angle is 67.63°, which isn't an aspect.

Neptune at 2.88° and Uranus at 61.73°: |61.73 - 2.88| = 58.85° → Sextile.

So that's correct.

Similarly, let's see if any other planets form aspects:

  • Mars (240.61) and Neptune (2.88): |240.61 - 2.88| ≈ 237.73 → Which is over 180°, so smaller angle is 122.27° → Not an aspect.

  • Mars (240.61) and Uranus (61.73): |240.61 - 61.73| = 178.88 → Close to opposition, so that's an opposition between Mars and Uranus.

Wait, I didn't consider that before. So:

Mars at 240.61° and Uranus at 61.73°: The difference is 240.61 - 61.73 = 178.88°, which is almost exactly 180°, so that's an opposition.

So I missed that aspect earlier.

Similarly, let me check:

  • Mars (240.61) and Uranus (61.73): opposition
  • Mercury (328.3) and Pluto (354.1): |328.3 - 354.1| ≈ 25.8° → No.
  • Venus (319.03) and Neptune (2.88): |319.03 - 2.88| ≈ 316.15°, which is over 180°, so smaller angle is ~43.85° → Not an aspect.

So adding Mars opposition Uranus as another aspect.

Similarly, Venus at 319.03 and Neptune at 2.88: the angle between them is 319.03 - 2.88 = 316.15°, which is more than 180°, so the smaller angle is 43.85° → Not an aspect.

Similarly, Mercury at 328.3 and Neptune at 2.88: |328.3 - 2.88| ≈ 325.42°, which is over 180°, so smaller angle is ~34.58° → No.

So now the aspects are:

  1. Sun conjunct Mercury
  2. Sun square Mars
  3. Moon conjunct Jupiter
  4. Moon opposition Venus
  5. Mercury square Mars
  6. Venus opposition Jupiter
  7. Saturn conjunction Neptune
  8. Uranus sextile Neptune
  9. Mars opposition Uranus

Are there any more?

Check between Venus and Neptune: as above, no.

Between Jupiter and others:

Jupiter is at 140.85°. Any other planet near that? Moon is at 137.65° (conjunct), Venus at 319.03° (opposition).

So yes, already covered.

I think those are all the aspects within a degree or so.

Now, moving on to step two: determine each planet's house and sign based on the birth chart data provided earlier.

Wait, but I don't have the birth chart data yet; the user only mentioned they're practicing. So perhaps I should proceed as if I'm analyzing a general case or maybe use an example.

Alternatively, perhaps I can outline the process without specific data. But since the user is practicing, let me assume some hypothetical positions for planets and houses to demonstrate the process.

Wait, but in the initial problem statement, the user hasn't provided specific birth chart details. So perhaps I should explain how to analyze each planet's position in terms of sign and house, then determine their modus operandi based on that.

But given that the user asked for a detailed thought process, maybe they want me to go through an example using made-up data or perhaps use a real chart. Since no specific details are provided, I might proceed with hypotheticals.

Alternatively, perhaps the user wants me to explain the method rather than applying it to specific data. Let's clarify: I think the user is practicing astrology and wants to understand how to analyze each planet in a birth chart by their sign and house position, then determine modus operandi. So my role is to guide them through that process.

So, for each planet (Sun, Moon, Mercury, Venus, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto), I need to consider:

  1. The zodiac sign they're in.
  2. The house they're located in.
  3. Aspects they form with other planets (conjunctions, oppositions, squares, trines, etc.).
  4. How these factors influence the individual's behavior and characteristics.

But since no specific chart is given, I'll explain the general approach.

Firstly, determine each planet's sign by its degree along the ecliptic. For example, if a planet is at 15° Aries, it's in Aries.

Secondly, determine the house based on the ascendant (rising sign) and the chart's time and date. Each house spans 30°, so depending on where the zodiac signs fall into houses, we can assign each planet to a specific house.

Thirdly, look at aspects: which planets are conjunct, opposition, square, trine, etc., as I did earlier in the aspect analysis.

Now, for modus operandi (Latin for "way of operating"), this refers to how each planet functions based on its sign and house position. It's about understanding how a planet expresses itself-its behavior, tendencies, strengths, and weaknesses.

For example:

  • Sun in Leo in the 5th house: The individual might be theatrical, creative, and enjoys attention. They could express leadership through entertainment or creative projects.

But without specific data, I can't provide detailed modus operandi for each planet. However, if we had a hypothetical chart, say, with certain positions, I could outline how to analyze them.

Let me proceed by creating a hypothetical birth chart as an example to illustrate the process.

Example Hypothetical Birth Chart:

  • Date: April 15, 2000
  • Time: 9:30 PM
  • Location: New York City (40°N, 74°W)

Using this data, I can compute the positions of planets and houses. But for brevity, let's assume:

  • Ascendant is Aries, so first house starts at 0° Aries.
  • Planets are placed as follows:
    • Sun: 25° Taurus (2nd house)
    • Moon: 10° Virgo (6th house)
    • Mercury: 18° Aries (1st house)
    • Venus: 3° Gemini (11th house)
    • Mars: 15° Libra (7th house)
    • Jupiter: 29° Cancer (4th house)
    • Saturn: 10° Sagittarius (9th house)
    • Uranus: 23° Pisces (12th house)
    • Neptune: 16° Capricorn (8th house)
    • Pluto: 7° Aquarius (11th or 12th house, depending on exact position)

Now, for each planet:

  1. Sun in Taurus (2nd house): The individual's core identity is influenced by Taurus traits-practical, grounded, possibly materialistic. In the 2nd house, they might have a strong connection to their personal values and resources, perhaps valuing comfort and security.

  2. Moon in Virgo (6th house): Emotional responses are analytical and detail-oriented. The 6th house indicates attention to health and service; the person may be concerned with wellness and efficiency in their daily routines.

  3. Mercury in Aries (1st house): Communication is direct, assertive, and possibly impulsive. In the first house, this affects how they present themselves and interact with others, perhaps being more competitive or pioneering in communication.

  4. Venus in Gemini (11th house): Love and relationships are influenced by Venus in Gemini-intellectual, communicative, and perhaps a bit scattered. In the 11th house, social connections and friendships are important; they might value diverse social interactions but may struggle with commitment.

  5. Mars in Libra (7th house): Action and energy are harmonious and diplomatic, possibly leading to indecisiveness. In the 7th house, which deals with partnerships, this person might approach relationships with a desire for balance and harmony, perhaps seeking partners who complement their social nature.

  6. Jupiter in Cancer (4th home): Optimism and growth are influenced by Cancer's emotional depth and nurturing nature. In the 4th house, this could enhance family life and domestic happiness, possibly indicating a supportive home environment or a tendency to create comfort in personal spaces.

  7. Saturn in Sagittarius (9th house): Structure and discipline are approached with a philosophical and expansive outlook. In the 9th house, which governs higher education and travel, this person might seek knowledge through exploration and have a broad perspective on life, perhaps dealing with restrictions or responsibilities in pursuit of their goals.

  8. Uranus in Pisces (12th house): Innovation and originality are influenced by Pisces' intuition and compassion. In the 12th house, which deals with spiritual matters and self-sacrifice, this person might have a strong connection to spirituality or engage in unconventional creative expressions.

  9. Neptune in Capricorn (8th house): Imagination and creativity are grounded and practical. In the 8th house, which deals with shared resources and transformations, this person might use their artistic talents to bring about change or work in fields that require emotional depth and intuition.

  10. Pluto in Aquarius (11th or 12th house): Transformative power is directed towards innovation and group dynamics. Depending on the exact position, if in the 11th house, they might focus on societal changes through community efforts; if in the 12th, it could manifest more personally through hidden processes and deep transformations.

This example illustrates how each planet's position (sign and house) influences behavior and traits. The modus operandi would then be about how each planet expresses its energy under those conditions. For instance, Mercury in Aries might lead to quick-witted communication but possibly impatience, while Venus in Gemini could result in charming social interactions but may lack depth in relationships.

In conclusion, analyzing each planet's position and aspects can provide a comprehensive understanding of an individual's behavior and characteristics. Each planet's modus operandi is shaped by its sign and house placement, influencing how it operates within the context of the birth chart.

To analyze each planet's modus operandi in a hypothetical birth chart, we consider their zodiac signs and house positions:

  1. Sun in Taurus (2nd House): The individual likely has a practical, grounded approach to life, valuing comfort and security. They may express leadership through reliability and patience.

  2. Moon in Virgo (6th House): Emotionally analytical and detail-oriented, this person focuses on health and efficiency. Their emotional responses are calm and nurturing.

  3. Mercury in Aries (1st House): Communication is direct and assertive, leading to a pioneering approach in interactions. This may sometimes manifest as impulsiveness.

  4. Venus in Gemini (11th House): Relationships are intellectual and social, valuing diverse connections but potentially lacking depth. Social engagement is key.

  5. Mars in Libra (7th House): Actions are harmonious and diplomatic, possibly leading to indecisiveness. Partnerships are balanced, seeking complementarity.

  6. Jupiter in Cancer (4th House): Optimism and growth are emotionally deep, enhancing family life. There's a tendency for generosity and comfort in personal spaces.

  7. Saturn in Sagittarius (9th House): Structure is approached philosophically, seeking wisdom through exploration. Responsibilities are taken on with a broad perspective.

  8. Uranus in Pisces (12th House): Innovation is intuitive and compassionate, often expressed spiritually or through unconventional creativity.

  9. Neptune in Capricorn (8th House): Creativity is grounded and practical, used to bring about change through emotional depth.

  10. Pluto in Aquarius (11th/12th House): Transformative power focuses on innovation and group dynamics, influencing societal change or personal hidden processes.

Each planet's position influences their modus operandi, shaping behavior and traits within the birth chart context.

FAILED format target (ps, ac, ri) vs output ____________________________________ RANKING score: 0.00%

Not a surprise, hallucination appears in the assessment of the planetary position strength as much as in the aspects extraction: due to that most explanations are plain nonsense. Notable, llama and phi had shared hallucination, both pick Moon on the top for its exaltation in Leo which is wrong... And again, gpt is the best, however, none is really good.

Let's see if there's any consensus between the LLMs.

rank_bar_chart(ratings, 'Planet-Rank') ratings {'SUN': [8, 1, 4, 2, 0], 'MOON': [1, 2, 1, 6, 0], 'MERCURY': [9, 3, 3, 7, 0], 'VENUS': [5, 4, 6, 8, 0], 'MARS': [3, 9, 5, 1, 0], 'JUPITER': [2, 5, 8, 5, 0], 'SATURN': [4, 6, 2, 9, 0], 'URANUS': [6, 7, 7, 3, 0], 'NEPTUNE': [7, 8, 9, 4, 0], 'PLUTO': [10, 10, 10, 10, 0]} def get_consensus(ratings): """ ranking order based on consolidated opinions """ score = [(k, float(np.std(v) + sum([x == 0 for x in v])), float(np.mean([x for x in v if x != 0] if sum(v) > 0 else [-1]))) for k,v in ratings.items()] return sorted([v for v in score if v[-1] != -1], key=lambda x:(x[-1],x[1])) get_consensus(ratings) [('MOON', 3.0976176963403033, 2.5), ('SUN', 3.8284271247461903, 3.75), ('MARS', 4.2, 4.5), ('JUPITER', 3.756809750418044, 5.0), ('SATURN', 4.124099870362661, 5.25), ('MERCURY', 4.2, 5.5), ('VENUS', 3.65329983228432, 5.75), ('URANUS', 3.727636339397171, 5.75), ('NEPTUNE', 4.261901286060018, 7.0), ('PLUTO', 5.0, 10.0)] def consensus_score(ratings): return 1 - float(np.mean([x[1] for x in get_consensus(ratings)])/8) consensus_score(ratings) 0.5018776012548911

Yes, there's some consensus. Let's go for stats.

results['consensus'] = [] success = [[] for _ in range(len(team))] madeup = [[] for _ in range(len(team))] failed = [[0, 0] for _ in range(len(team))] total = [] consensus = [] score = [0] * len(team) tokens = [0] * len(team) timer = [0] * len(team) freq = {x:0 for x in major} favs = {x:freq.copy() for x in team} for n in range(num_rounds): # pick random date transit date = f'{np.random.randint(1930, 2030)}-{np.random.randint(1, 12):>02}-{np.random.randint(1, 25):>02}' transit = get_day_chart(date, objects=object_filter) positions = chart_to_text(transit, object_filter) # make validation table aspects = get_aspects(transit, object_filter) aspects_text = aspects_to_text(transit, aspects) aspect_table = {aspect_hash(a):[0] * len(team) for a in aspects_text} count = 0 for k in aspect_table: a = k.split('-')[-1] freq[a] = freq.get(a, 0) + 1 if a in major: count += 1 order = planet_rank(transit, aspects) total.append(count) ratings = {x:[0] * len(team) for x in object_filter} print(f'\n--------------------------------------------------- {date} >>{len(aspects)}<< --- {n + 1}') for i, model in enumerate(team): print(f'===================================== {model}') output = read_positions(model, positions_reading_prompt, positions, context=context, dignity=DIGNITY, show_output=False) extracted, rank, num_in_tokens, num_out_tokens, tm = output rs = sc = mu = ff = rf = 0 for key in set([aspect_hash(a) for a in extracted]): if not key in aspect_table: if key[0].isalpha() and len(key.split('-'))==3: print('M', end='') # made-up mu += 1 else: print('F', end='') # failure ff = 1 continue elif aspect_table[key][i] == 0: print('S', end='') # success sc += 1 aspect_table[key][i] = 1 else: print('D', end='') # duplicate key = key.split('-')[-1] favs[model][key] = favs[model].get(key, 0) + 1 index = [] for p in rank: props = match_ranking_props(p) if props[0] == '': ff = 1 continue if ratings[props[0]][i] > 0: # duplicate rf = 1 continue index.append(props) ratings[props[0]][i] = len(index) if len(index) <= len(object_filter) else 0 if len(index) != len(PLANETS): rf = 1 rs = ranking_score(index, order, weight) success[i].append(sc) madeup[i].append(mu) failed[i][0] += ff failed[i][1] += rf score[i] += rs tokens[i] += num_out_tokens timer[i] += tm print('.' * (len(aspects) - len(extracted))) print(f'EXTRACTION success:{sc/len(aspects):>6.2%} madeup:{mu/(sc + mu or 1):>7.2%}') print(f'RANKING score:{rs:>6.2%}') consensus.append(consensus_score(ratings)) print(f'\nCONSENSUS score: {consensus[-1]:.2%}') --------------------------------------------------- 1963-06-09 >>20<< --- 1 ===================================== llama3.1 MMMMMMMMMFMMMMMMMMMM EXTRACTION success: 0.00% madeup:100.00% RANKING score: 3.33% ===================================== gemma3:12b MMSMMMMMSS.......... EXTRACTION success:15.00% madeup: 70.00% RANKING score: 5.00% ===================================== phi4 MFS............... EXTRACTION success: 5.00% madeup: 50.00% RANKING score:15.00% ===================================== gpt-oss MSS................. EXTRACTION success:10.00% madeup: 33.33% RANKING score:13.33% ===================================== deepseek-r1:14b FAILED format FFF.............. EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% CONSENSUS score: 53.11% --------------------------------------------------- 1978-11-03 >>18<< --- 2 ===================================== llama3.1 MMMMMMMMMMMMM..... EXTRACTION success: 0.00% madeup:100.00% RANKING score:13.33% ===================================== gemma3:12b SMSMMMMSMSM....... EXTRACTION success:22.22% madeup: 63.64% RANKING score: 6.67% ===================================== phi4 MMMMM............. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 5.00% ===================================== gpt-oss SSSSSSSSS......... EXTRACTION success:50.00% madeup: 0.00% RANKING score:10.00% ===================================== deepseek-r1:14b FAILED format SMFFFS EXTRACTION success:11.11% madeup: 33.33% RANKING score: 0.00% CONSENSUS score: 47.30% --------------------------------------------------- 1982-10-10 >>18<< --- 3 ===================================== llama3.1 MMMMMMM........... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 3.33% ===================================== gemma3:12b MMMMMMMSSMMMS..... EXTRACTION success:16.67% madeup: 76.92% RANKING score:10.00% ===================================== phi4 MMSMS............. EXTRACTION success:11.11% madeup: 60.00% RANKING score: 3.33% ===================================== gpt-oss SSSS.............. EXTRACTION success:22.22% madeup: 0.00% RANKING score:10.00% ===================================== deepseek-r1:14b FAILED format SFFFM........... EXTRACTION success: 5.56% madeup: 50.00% RANKING score: 0.00% CONSENSUS score: 50.93% --------------------------------------------------- 2023-09-22 >>22<< --- 4 ===================================== llama3.1 MS.................... EXTRACTION success: 4.55% madeup: 50.00% RANKING score: 0.00% ===================================== gemma3:12b MMMMMMMM.............. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 5.00% ===================================== phi4 MSMMMM................ EXTRACTION success: 4.55% madeup: 83.33% RANKING score: 0.00% ===================================== gpt-oss MMMMMMMMMMMMMMM....... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 6.67% ===================================== deepseek-r1:14b FAILED format MSFSM................. EXTRACTION success: 9.09% madeup: 50.00% RANKING score: 0.00% CONSENSUS score: 51.97% --------------------------------------------------- 2012-08-08 >>24<< --- 5 ===================================== llama3.1 MMMMMMMMMMSMSMS......... EXTRACTION success:12.50% madeup: 80.00% RANKING score: 6.67% ===================================== gemma3:12b MMMSMMMMMMM............. EXTRACTION success: 4.17% madeup: 90.91% RANKING score: 8.33% ===================================== phi4 MMMMMM.................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 8.33% ===================================== gpt-oss MMMM.................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 8.33% ===================================== deepseek-r1:14b MMMMMMMMMMMMMMMMMM...... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 8.33% CONSENSUS score: 78.55% --------------------------------------------------- 1950-01-22 >>23<< --- 6 ===================================== llama3.1 MMMMM.................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% ===================================== gemma3:12b MMMMSMMMM.............. EXTRACTION success: 4.35% madeup: 88.89% RANKING score: 0.00% ===================================== phi4 MMMMSMMMMM............. EXTRACTION success: 4.35% madeup: 90.00% RANKING score: 5.00% ===================================== gpt-oss SSSS................... EXTRACTION success:17.39% madeup: 0.00% RANKING score:10.00% ===================================== deepseek-r1:14b FAILED format MMFFM................ EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% CONSENSUS score: 46.31% --------------------------------------------------- 1991-01-12 >>18<< --- 7 ===================================== llama3.1 SMMMMMMM.......... EXTRACTION success: 5.56% madeup: 87.50% RANKING score: 1.67% ===================================== gemma3:12b SMMMMMMMMM........ EXTRACTION success: 5.56% madeup: 90.00% RANKING score: 6.67% ===================================== phi4 MMMMM............. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 6.67% ===================================== gpt-oss MMMMMSMMMMMMM..... EXTRACTION success: 5.56% madeup: 92.31% RANKING score:13.33% ===================================== deepseek-r1:14b FAILED format FSFMFMS......... EXTRACTION success:11.11% madeup: 50.00% RANKING score: 0.00% CONSENSUS score: 47.46% --------------------------------------------------- 2019-02-15 >>19<< --- 8 ===================================== llama3.1 MMMMMFMMM.......... EXTRACTION success: 0.00% madeup:100.00% RANKING score:11.67% ===================================== gemma3:12b MMMMSSMMM.......... EXTRACTION success:10.53% madeup: 77.78% RANKING score: 1.67% ===================================== phi4 MMMSM.............. EXTRACTION success: 5.26% madeup: 80.00% RANKING score: 1.67% ===================================== gpt-oss SSSSSSS............ EXTRACTION success:36.84% madeup: 0.00% RANKING score:10.00% ===================================== deepseek-r1:14b FAILED format MSFSMFMM.......... EXTRACTION success:10.53% madeup: 66.67% RANKING score: 0.00% CONSENSUS score: 48.71% --------------------------------------------------- 1976-08-04 >>19<< --- 9 ===================================== llama3.1 MMMMSMM............ EXTRACTION success: 5.26% madeup: 85.71% RANKING score:10.00% ===================================== gemma3:12b MMMMMMMM........... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 1.67% ===================================== phi4 MMFSM.............. EXTRACTION success: 5.26% madeup: 75.00% RANKING score:10.00% ===================================== gpt-oss SSSSSSSSSS......... EXTRACTION success:52.63% madeup: 0.00% RANKING score: 6.67% ===================================== deepseek-r1:14b FAILED format FSF................ EXTRACTION success: 5.26% madeup: 0.00% RANKING score: 0.00% CONSENSUS score: 55.97% --------------------------------------------------- 2021-01-15 >>20<< --- 10 ===================================== llama3.1 MMMMMMSM............ EXTRACTION success: 5.00% madeup: 87.50% RANKING score: 6.67% ===================================== gemma3:12b MMMMMMMMMM.......... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 3.33% ===================================== phi4 MMMSMMMMMM.......... EXTRACTION success: 5.00% madeup: 90.00% RANKING score:18.33% ===================================== gpt-oss SSMMSMMMMMM......... EXTRACTION success:15.00% madeup: 72.73% RANKING score: 5.00% ===================================== deepseek-r1:14b FAILED format SFFSFFM............. EXTRACTION success:10.00% madeup: 33.33% RANKING score: 0.00% CONSENSUS score: 47.08% --------------------------------------------------- 1965-11-11 >>21<< --- 11 ===================================== llama3.1 MMSFMFS............. EXTRACTION success: 9.52% madeup: 60.00% RANKING score: 3.33% ===================================== gemma3:12b MSMMMMMSMMM.......... EXTRACTION success: 9.52% madeup: 81.82% RANKING score: 5.00% ===================================== phi4 SMMMMMMMMMMM......... EXTRACTION success: 4.76% madeup: 91.67% RANKING score: 5.00% ===================================== gpt-oss SSSSSSSS............. EXTRACTION success:38.10% madeup: 0.00% RANKING score: 8.33% ===================================== deepseek-r1:14b FAILED format FFF.......... EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% CONSENSUS score: 52.03% --------------------------------------------------- 1973-07-11 >>25<< --- 12 ===================================== llama3.1 MMMSMMMSM................ EXTRACTION success: 8.00% madeup: 77.78% RANKING score:11.67% ===================================== gemma3:12b MMMMMMMMM................ EXTRACTION success: 0.00% madeup:100.00% RANKING score: 1.67% ===================================== phi4 MMFMM.................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 6.67% ===================================== gpt-oss MMMMMMM.................. EXTRACTION success: 0.00% madeup:100.00% RANKING score:10.00% ===================================== deepseek-r1:14b FAILED format MFFS.................... EXTRACTION success: 4.00% madeup: 50.00% RANKING score: 0.00% CONSENSUS score: 56.21%

plot_test_result(total, madeup, success, consensus)

The same result as our first experiment: success has negative correlation with the crowdedness of the aspects space. Consensus, however, has positive correlation.

results['consensus'].append(np.median(consensus)) counts['true-dist'].append(freq.copy()) for i, model in enumerate(team): counts[model].append(favs[model].copy()) results[model].append({ 'success': sum(success[i])/sum(total), 'madeup': sum(madeup[i])/(sum(madeup[i]) + sum(success[i]) or 1), 'failed': sum(failed[i])/2/num_rounds, 'score': score[i]/num_rounds, '#tokens': tokens[i]/num_rounds, '%time': timer[i]/sum(timer) }) print(" ".join([f"{model:>15}"] + [f"{k}:{v:6,.0f}" if k=='#tokens' else f"{k}:{v:>7.2%}" for k,v in results[model][-1].items()])) llama3.1 success: 5.64% madeup: 89.62% failed: 20.83% score: 5.97% #tokens: 246 %time: 1.46% gemma3:12b success: 8.72% madeup: 85.71% failed: 16.67% score: 4.58% #tokens: 272 %time: 2.51% phi4 success: 4.62% madeup: 87.84% failed: 20.83% score: 7.08% #tokens: 362 %time: 3.17% gpt-oss success: 24.62% madeup: 49.47% failed: 0.00% score: 9.31% #tokens: 4,850 %time: 29.71% deepseek-r1:14b success: 6.67% madeup: 71.74% failed: 91.67% score: 0.69% #tokens: 6,282 %time: 63.14% print(f'consensus: avg:{np.mean(consensus):.2%} median:{np.median(consensus):.2%}') consensus: avg:52.97% median:51.45% for f,m in zip(failed, team): print(f'{m:>15}: failed format {f[0]/num_rounds:>7.2%} failed consistency {f[1]/num_rounds:>7.2%}') llama3.1: failed format 25.00% failed consistency 16.67% gemma3:12b: failed format 0.00% failed consistency 33.33% phi4: failed format 25.00% failed consistency 16.67% gpt-oss: failed format 0.00% failed consistency 0.00% deepseek-r1:14b: failed format 91.67% failed consistency 91.67%

Transit extraction and ranking

The last test is more difficult, as we focus on the aspects made by transiting planets to the natal, the lists are longer, and more attention to details required.

transit_aspects_extraction_prompt = """You are practicing astrologer. Below is a natal chart with transit: {positions} Define the transit aspects present in this chart and rank the transiting planets by strength of influence on the natal chart using following criteria: 1. Transiting planet house/sign position strength (angular/succedent/cadent, domicile/exile, exaltation/fall) 2. Number of the aspects this transiting planet makes to the natal planets/houses Your answer should be in the following exact format (plain, concise, no extras): ASPECTS <list planetary aspects as following: * transiting <planet-name> - natal <planet-name> - <aspect-name>> RANK <list your rank as following: * transiting <planet-name> <{modality}> <{dignity}> <num-aspects>> EXPLANATION <explain your ranking choice> """ transit = get_current(tz, object_filter, natal['houses']) positions = positions_to_text(natal, object_filter, prefix='Natal ') positions += [''] + positions_to_text(transit, object_filter, prefix='Transiting ') # house-modality MODALITY = 'ANGULAR|SUCCEDENT|CADENT' print(transit_aspects_extraction_prompt.format(positions='\n'.join(positions), context=context, modality=MODALITY, dignity=DIGNITY)) You are practicing astrologer. Below is a natal chart with transit: Natal Sun: 22°55' Gemini 11th House Natal Moon: 21°11' Sagittarius 5th House Natal Mercury: 8°51' Cancer 12th House (out-of-bond) Natal Venus: 25°44' Cancer 12th House Natal Mars: 26°46' Leo 1st House Natal Jupiter: 17°26' Libra 3rd House (retrograde) Natal Saturn: 23°49' Cancer 12th House Natal Uranus: 17°53' Gemini 11th House Natal Neptune: 5°50' Libra 3rd House (retrograde) Natal Pluto: 10°02' Leo 1st House (out-of-bond) Transiting Sun: 1°57' Sagittarius 5th House Transiting Moon: 12°35' Capricorn 6th House (out-of-bond) Transiting Mercury: 23°47' Scorpio 4th House (retrograde) Transiting Venus: 21°23' Scorpio 4th House Transiting Mars: 14°07' Sagittarius 5th House Transiting Jupiter: 24°53' Cancer 12th House (retrograde) Transiting Saturn: 25°10' Pisces 8th House (retrograde) Transiting Uranus: 29°20' Taurus 10th House (retrograde) Transiting Neptune: 29°26' Pisces 8th House (retrograde) Transiting Pluto: 1°45' Aquarius 7th House Define the transit aspects present in this chart and rank the transiting planets by strength of influence on the natal chart using following criteria: 1. Transiting planet house/sign position strength (angular/succedent/cadent, domicile/exile, exaltation/fall) 2. Number of the aspects this transiting planet makes to the natal planets/houses Your answer should be in the following exact format (plain, concise, no extras): ASPECTS - natal - > RANK > EXPLANATION def transit_planet_rank(data, aspects): # get aspect count count = {x: 0 for x in data if x in PLANETS} for a in aspects: count[a['objects'][0]] += 1 # get positioning specs props = [] for i, (x, d) in enumerate(data.items()): if 'position' in d: s = SIGNS[int(d['position']//30)] priority = sum([ 1 if s in PLANETS[x]['domicile'] else 0, 2 if s in PLANETS[x]['exaltation'] else 0, 4 if s in PLANETS[x]['fall'] else 0, 5 if s in PLANETS[x]['exile'] else 0, ]) props.append((x, data[x]['house'] % 3 or 3, priority or 3, count[x], i + 1)) return sorted(props, key=lambda p:p[1:]) transit_planet_rank(transit, aspects) [('PLUTO', 1, 3, 0, 10), ('MERCURY', 1, 3, 3, 3), ('URANUS', 1, 4, 1, 8), ('VENUS', 1, 5, 4, 4), ('NEPTUNE', 2, 1, 1, 9), ('SATURN', 2, 3, 1, 7), ('MARS', 2, 3, 3, 5), ('SUN', 2, 3, 4, 1), ('JUPITER', 3, 2, 2, 6), ('MOON', 3, 5, 6, 2)] def match_ranking_props(text): text = text.upper() pos_rank = DIGNITY.split('|') mod_rank = MODALITY.split('|') # match requested format match = re.match(fr"TRANSITING ({HIERARCHY}).*({MODALITY}).*({DIGNITY}).*(\d+).*", text) if match: return (match.groups()[0], mod_rank.index(match.groups()[1]) + 1, pos_rank.index(match.groups()[2]) + 1, int(match.groups()[3])) planet = set(re.findall(fr"{HIERARCHY}", text)) if len(planet) == 1: planet = planet.pop() house = set(re.findall(fr"{MODALITY}", text)) if len(house) == 1: house = mod_rank.index(house.pop()) + 1 digns = set(re.findall(fr"{DIGNITY}", text)) if len(digns) == 1: digns = pos_rank.index(digns.pop()) + 1 return (planet, house, digns, None) return (planet, house, None, None) return (planet, None, None, None) return ('', None, None, None) match_ranking_props('Transiting Pluto CADENT none 2') ('PLUTO', 3, 3, 2) weight = [3, 3, 2, 1] # full unfiltered list aspects = get_transit_aspects(natal, transit) aspects_text = transit_to_text(natal, transit, aspects) # hash-table: let's validate what we can validate - the real aspects aspect_table = {aspect_hash(a):[0] * len(team) for a in aspects_text} # planets rank by our criteria order = transit_planet_rank(transit, aspects) ratings = {x:[0] * len(team) for x in object_filter} for i, model in enumerate(team): print('====================================') print(f' {model}') print('====================================') output = read_positions(model, transit_aspects_extraction_prompt, positions, context=context, modality=MODALITY, dignity=DIGNITY) extracted, rank, num_in_tokens, num_out_tokens, tm = output index = [] for p in rank: props = match_ranking_props(p) if props[0] == '': print('FAILURE format') continue if ratings[props[0]][i] > 0: print('DUPLICATE ranking') continue index.append(props) ratings[props[0]][i] = len(index) for key in set([aspect_hash(a) for a in extracted]): if not key in aspect_table: if key[0].isalpha(): print(f'NOT IN the TABLE: {key}') continue print(f'SUCCESS: {key}') aspect_table[key][i] = 1 # house-pos, sign-pos, aspects-count, rank-index print('\n target (hs, ps, ac, ri) vs output\n____________________________________') A = sorted([x[:-1] + (i,) for i,x in enumerate(order)], key=lambda x:x[0]) B = sorted([x + (i,) for i,x in enumerate(index)], key=lambda x:x[0]) for a,b in zip(A,B): print(f'{a[0]:>8}: {str(a[1:]):>10} <-> {str(b[1:]):>10}') print(f'\nRANKING score:{ranking_score(index, order, weight):>7.2%}') print(f'\nCONSENSUS score:{consensus_score(ratings):>7.2%}') ==================================== llama3.1 ====================================

ASPECTS

  • Transiting Sun - Natal Moon - 5th House Conjunction
  • Transiting Mars - Natal Sun - Opposition
  • Transiting Venus - Natal Mercury - 12th House Square
  • Transiting Jupiter - Natal Uranus - Conjunction
  • Transiting Saturn - Natal Neptune - Conjunction
  • Transiting Pluto - Natal Jupiter - 3rd House Trine

RANK

  • Transiting Mars ANGULAR DOMICILE 1
  • Transiting Sun ANGULAR DOMICILE 1
  • Transiting Pluto CADENT EXALTATION 1
  • Transiting Venus SUCCEDENT NONE 2 (Mercury and Venus are not in close aspect, but also have a square with natal planets)
  • Transiting Jupiter CADENT NONE 3
  • Transiting Saturn CADENT FALL 1

EXPLANATION I ranked transiting Mars first due to its opposition to the natal Sun. Aspects made to the Sun and Moon are generally considered significant. Transiting Sun is second as it makes a conjunction with the natal Moon, which can be a powerful aspect in various areas of life. Transiting Pluto takes third place as it makes a trine with the natal Jupiter, indicating an opportunity for growth or expansion. The fact that Pluto has its exaltation in Cancer 8th House also adds to its influence. The ranking continues based on the number of aspects and house/sign position strength: Transiting Venus is ranked fourth due to its square with natal Mercury and Venus, but it's a succedent placement which has less impact compared to angular or cadent placements.

NOT IN the TABLE: transiting-mars-natal-sun-oppos NOT IN the TABLE: transiting-pluto-natal-jupiter-trine NOT IN the TABLE: transiting-venus-natal-mercury-square NOT IN the TABLE: transiting-sun-natal-moon-conjunct NOT IN the TABLE: transiting-jupiter-natal-uranus-conjunct NOT IN the TABLE: transiting-saturn-natal-neptune-conjunct target (hs, ps, ac, ri) vs output ____________________________________ JUPITER: (3, 2, 8, 8) <-> (3, 3, 3, 4) MARS: (2, 3, 4, 5) <-> (1, 1, 1, 0) MERCURY: (1, 3, 6, 1) <-> (3, 2, 1, 2) MOON: (3, 5, 5, 9) <-> (3, 4, 1, 5) NEPTUNE: (2, 1, 6, 4) <-> (1, 1, 1, 1) PLUTO: (1, 3, 5, 0) <-> (2, 3, 2, 3) RANKING score: 7.78% ==================================== gemma3:12b ====================================

ASPECTS

  • Transiting Sun - Natal Sun - Conjunction
  • Transiting Sun - Natal Mars - Trine
  • Transiting Sun - Natal Jupiter - Trine
  • Transiting Sun - Natal Neptune - Trine
  • Transiting Moon - Natal Moon - Trine
  • Transiting Mercury - Natal Mercury - Opposition
  • Transiting Mercury - Natal Venus - Trine
  • Transiting Venus - Natal Venus - Conjunction
  • Transiting Mars - Natal Sun - Trine
  • Transiting Mars - Natal Mars - Conjunction
  • Transiting Mars - Natal Jupiter - Trine
  • Transiting Mars - Natal Uranus - Trine
  • Transiting Jupiter - Natal Jupiter - Conjunction
  • Transiting Jupiter - Natal Saturn - Trine
  • Transiting Neptune - Natal Neptune - Conjunction
  • Transiting Pluto - Natal Pluto - Conjunction

RANK

  • Transiting Mars SUCCEDENT NONE 6
  • Transiting Sun ANGULAR NONE 3
  • Transiting Jupiter CADENT DOMICILE 3
  • Transiting Pluto ANGULAR NONE 2
  • Transiting Neptune CADENT NONE 1
  • Transiting Mercury SUCCEDENT NONE 1
  • Transiting Venus CADENT NONE 1
  • Transiting Moon ANGULAR NONE 1

EXPLANATION Mars holds the strongest influence due to its Succedent house position, lack of sign/house debility, and a high number of aspects (6). The Sun is second, positioned angularly, but with fewer aspects. Jupiter is third, benefiting from its domicile in the 12th house, and a number of aspects. Pluto and Neptune have a substantial impact due to their Conjunctions to natal planets, but their Cadent house positions and single aspect reduce their overall influence. Mercury and Venus have weaker influences due to Cadent house positions and minimal aspects. The Moon's angular position is offset by its single aspect.

NOT IN the TABLE: transiting-mars-natal-jupiter-trine NOT IN the TABLE: transiting-mars-natal-uranus-trine NOT IN the TABLE: transiting-jupiter-natal-jupiter-conjunct NOT IN the TABLE: transiting-mercury-natal-mercury-oppos NOT IN the TABLE: transiting-sun-natal-neptune-trine NOT IN the TABLE: transiting-jupiter-natal-saturn-trine NOT IN the TABLE: transiting-mars-natal-sun-trine NOT IN the TABLE: transiting-mars-natal-mars-conjunct NOT IN the TABLE: transiting-neptune-natal-neptune-conjunct NOT IN the TABLE: transiting-venus-natal-venus-conjunct NOT IN the TABLE: transiting-pluto-natal-pluto-conjunct NOT IN the TABLE: transiting-sun-natal-sun-conjunct NOT IN the TABLE: transiting-sun-natal-mars-trine NOT IN the TABLE: transiting-sun-natal-jupiter-trine SUCCESS: transiting-mercury-natal-venus-trine NOT IN the TABLE: transiting-moon-natal-moon-trine target (hs, ps, ac, ri) vs output ____________________________________ JUPITER: (3, 2, 8, 8) <-> (3, 1, 3, 2) MARS: (2, 3, 4, 5) <-> (2, 3, 6, 0) MERCURY: (1, 3, 6, 1) <-> (2, 3, 1, 5) MOON: (3, 5, 5, 9) <-> (1, 3, 1, 7) NEPTUNE: (2, 1, 6, 4) <-> (3, 3, 1, 4) PLUTO: (1, 3, 5, 0) <-> (1, 3, 2, 3) SATURN: (2, 3, 8, 7) <-> (1, 3, 3, 1) SUN: (2, 3, 5, 6) <-> (3, 3, 1, 6) RANKING score: 0.00% ==================================== phi4 ====================================

ASPECTS

  • Transiting Sun - Natal Moon - Sextile
  • Transiting Sun - Natal Mars - Square
  • Transiting Sun - Natal Saturn - Trine
  • Transiting Sun - Natal Pluto - Opposition
  • Transiting Moon - Natal Mercury - Conjunction
  • Transiting Moon - Natal Jupiter - Square
  • Transiting Mercury - Natal Venus - Square
  • Transiting Mercury - Natal Uranus - Sextile
  • Transiting Venus - Natal Mars - Semisextile
  • Transiting Venus - Natal Pluto - Trine
  • Transiting Mars - Natal Sun - Opposition
  • Transiting Mars - Natal Jupiter - Conjunction
  • Transiting Jupiter - Natal Saturn - Square
  • Transiting Jupiter - Natal Uranus - Sextile
  • Transiting Saturn - Natal Mercury - Sextile
  • Transiting Saturn - Natal Neptune - Trine
  • Transiting Uranus - Natal Sun - Opposition
  • Transiting Pluto - Natal Venus - Conjunction

RANK

  • Transiting Sun CADENT EXILE 4
  • Transiting Moon SUCCEDENT DOMICILE 2
  • Transiting Mercury CADENT NONE 3
  • Transiting Venus SUCCEDENT FALLEN 1
  • Transiting Mars SUCCEDENT EXILE 2
  • Transiting Jupiter SUCCEDENT EXILE 2
  • Transiting Saturn CADENT EXILE 2
  • Transiting Uranus ANGULAR DOMICILE 1
  • Transiting Neptune CADENT NONE 1

EXPLANATION
The ranking is based on the house and sign positions of transiting planets, considering whether they are in angular (houses 1-4), succedent (houses 5-8), or cadent (houses 9-12) houses, as well as their domicile, exaltation, fall, or exile status. Angular positions tend to have the strongest influence due to their direct connection with daily life and actions, followed by succedent and then cadent positions. Domicile and exaltation increase a planet's strength, while fall and exile weaken it.

Uranus ranks highest due to its angular position in Taurus (natal 10th House) where it is domiciled, providing significant energy despite making fewer aspects. Venus follows as succedent but with a notable impact due to being in a fallen sign (Scorpio), affecting the natal chart intensely through its three aspects, including a conjunction with natal Pluto.

The Sun's placement in an exiled cadent house where it makes four impactful aspects gives it substantial influence next. Mercury and Mars are considered moderately influential, with Mercury being cadent without any domicile/exile benefits but having multiple significant aspects, and Mars succedent yet exiled.

Jupiter, Saturn, and Neptune rank lower due to their placements in less favorable positions (succedent for Jupiter, saturnine cadent, and Neptune's neutral cadent position) combined with fewer impactful aspects. The Moon has a strong influence being in its domiciliary sign but is only making two aspects, placing it above these but still below the previously mentioned planets.

This ranking considers both the traditional strengths of house positions/signs and the dynamic interactions from the specific transiting aspects to natal points.

NOT IN the TABLE: transiting-jupiter-natal-uranus-sextile NOT IN the TABLE: transiting-mars-natal-sun-oppos SUCCESS: transiting-moon-natal-jupiter-square NOT IN the TABLE: transiting-sun-natal-pluto-oppos NOT IN the TABLE: transiting-pluto-natal-venus-conjunct NOT IN the TABLE: transiting-jupiter-natal-saturn-square NOT IN the TABLE: transiting-moon-natal-mercury-conjunct NOT IN the TABLE: transiting-venus-natal-pluto-trine SUCCESS: transiting-sun-natal-mars-square NOT IN the TABLE: transiting-saturn-natal-neptune-trine NOT IN the TABLE: transiting-venus-natal-mars-semisext NOT IN the TABLE: transiting-uranus-natal-sun-oppos NOT IN the TABLE: transiting-saturn-natal-mercury-sextile NOT IN the TABLE: transiting-mercury-natal-venus-square NOT IN the TABLE: transiting-mercury-natal-uranus-sextile NOT IN the TABLE: transiting-sun-natal-moon-sextile NOT IN the TABLE: transiting-sun-natal-saturn-trine NOT IN the TABLE: transiting-mars-natal-jupiter-conjunct target (hs, ps, ac, ri) vs output ____________________________________ JUPITER: (3, 2, 8, 8) <-> (2, 5, 2, 5) MARS: (2, 3, 4, 5) <-> (2, 5, 2, 4) MERCURY: (1, 3, 6, 1) <-> (3, 3, 3, 2) MOON: (3, 5, 5, 9) <-> (2, 1, 2, 1) NEPTUNE: (2, 1, 6, 4) <-> (3, 3, 1, 8) PLUTO: (1, 3, 5, 0) <-> (3, 5, 2, 6) SATURN: (2, 3, 8, 7) <-> (3, 5, 4, 0) SUN: (2, 3, 5, 6) <-> (1, 1, 1, 7) URANUS: (1, 4, 6, 2) <-> (2, 4, 1, 3) RANKING score: 17.78% ==================================== gpt-oss ====================================

ASPECTS

  • transiting Jupiter - natal Venus - conjunction
  • transiting Jupiter - natal Saturn - conjunction
  • transiting Saturn - natal Venus - trine
  • transiting Saturn - natal Jupiter - trine
  • transiting Saturn - natal Saturn - conjunction

RANK

  • transiting Uranus ANGULAR DOMICILE 0
  • transiting Pluto ANGULAR NONE 0
  • transiting Jupiter CADENT EXALT 2
  • transiting Neptune SUCCEDENT DOMICILE 0
  • transiting Saturn SUCCEDENT NONE 3
  • transiting Sun SUCCEDENT NONE 0
  • transiting Moon CADENT EXILE 0
  • transiting Mercury SUCCEDENT NONE 0
  • transiting Venus SUCCEDENT NONE 0
  • transiting Mars SUCCEDENT NONE 0

EXPLANATION The ranking first groups transiting planets by the inherent strength of their house‑sign position.
Angular houses (1, 4, 7, 10) are considered strongest, followed by succedent houses (2, 5, 8, 11), then cadent houses (3, 6, 9, 12).
Within each house‑type, the sign's status is added: a planet in its own sign (domicile) or in exaltation is stronger than one in a neutral sign, which is stronger than one in exile or fall.
After this primary ordering, the number of aspects the planet makes to natal planets/houses is used as a secondary criterion: more aspects increase influence.
Thus Uranus (angular house 10, domicile) tops the list, Pluto follows (angular house but neutral sign), then Jupiter (cadent house but exalted sign, with two aspects).
Neptune, while in a succedent house, gains a boost from domicile.
Saturn, though only in a succedent house with no sign advantage, gains the most aspects (three), placing it above the neutral succedent planets Sun, Mercury, Venus, and Mars.
The Moon, despite being in an angular sign, is in cadent house and exile, making it weaker than the neutral succedent Sun.

SUCCESS: transiting-jupiter-natal-venus-conjunct NOT IN the TABLE: transiting-saturn-natal-saturn-conjunct SUCCESS: transiting-jupiter-natal-saturn-conjunct SUCCESS: transiting-saturn-natal-venus-trine NOT IN the TABLE: transiting-saturn-natal-jupiter-trine target (hs, ps, ac, ri) vs output ____________________________________ JUPITER: (3, 2, 8, 8) <-> (3, 2, 2, 2) MARS: (2, 3, 4, 5) <-> (2, 3, 0, 9) MERCURY: (1, 3, 6, 1) <-> (2, 3, 0, 7) MOON: (3, 5, 5, 9) <-> (3, 5, 0, 6) NEPTUNE: (2, 1, 6, 4) <-> (2, 1, 0, 3) PLUTO: (1, 3, 5, 0) <-> (1, 3, 0, 1) SATURN: (2, 3, 8, 7) <-> (2, 3, 3, 4) SUN: (2, 3, 5, 6) <-> (2, 3, 0, 5) URANUS: (1, 4, 6, 2) <-> (1, 1, 0, 0) VENUS: (1, 5, 8, 3) <-> (2, 3, 0, 8) RANKING score: 2.22% ==================================== deepseek-r1:14b ==================================== Alright, so I'm trying to figure out how to define the transit aspects in this natal chart and then rank them based on their influence. Let's start by understanding what each part means.

First, I see that there are both natal and transiting positions listed for various planets. The task is to look at the aspects between the transiting planets and the natal ones. Aspects are the angles between two celestial bodies, like conjunctions, oppositions, trines, etc. Each aspect can influence how the transit affects the natal chart.

Looking at each transiting planet, I need to check which natal planets they form aspects with. For example, Transiting Mercury is at 23°47' Scorpio in the 4th House and is retrograde. The natal planets it might aspect would be those within a certain degree range. Let me go one by one.

Starting with the Sun: The transiting Sun is at 1°57' Sagittarius, 5th House. I need to check which natal planets are near this degree in Sagittarius or opposite (opposition), trine, square, etc. Looking at the natal chart, the Moon is at 21°11' Sagittarius, so that's a conjunction with the Sun. That would be an exact aspect since they're both in Sagittarius and close degrees.

Next, Moon: Transiting Moon is 12°35' Capricorn, which is 6th House. I need to see which natal planets are near this degree or forming aspects. Natal planets in Capricorn? Let me check; the natal chart doesn't have any, so maybe looking for oppositions or squares elsewhere.

Mercury: Transiting Mercury is at 23°47' Scorpio, 4th House. The natal Mercury is at 8°51' Cancer. So they are in opposite signs (Scorpio and Cancer), which are complementary but not exact opposites. Let me calculate the degrees. 23° Scorpio to 8° Cancer would be a wide square? Wait, Scorpio is 180 opposite Taurus, so maybe I'm miscalculating. Alternatively, perhaps they form a trine or something else. Hmm.

Wait, transiting Mercury at 23°47' Scorpio and natal Mercury at 8°51' Cancer. Let's see: the difference is about 146 degrees (since 23 to 8 is 15 degrees back, but considering signs, it's more). So that might not be a strong aspect.

Moving on, Venus: Transiting Venus is at 21°23' Scorpio. The natal Venus is at 25°44' Cancer. Again, opposite signs, so let me check the degrees. From 21° Scorpio to 25° Cancer: that's about a square? Because Aries to Cancer is 90 degrees, but exact aspects would be exact oppositions or trines.

Wait, maybe I should think in terms of the zodiac wheel. Each sign is 30 degrees, so transiting Venus at Scorpio (21°) and natal Venus at Cancer (25°). The distance between them: from Scorpio 21 to Sagittarius 7 would be 9 degrees to reach Sagittarius, then 180 opposite would be Gemini. Wait, this might not form a strong aspect.

Alternatively, perhaps they're in square or opposition. Let me calculate the exact difference. 25° Cancer is at 90 degrees from 25° Gemini? Wait, maybe I'm overcomplicating. Maybe it's better to note that transiting Venus and natal Venus are both in signs that are trine (Scorpio and Cancer are 4 signs apart, which is 120 degrees). But the exact degrees would matter.

Wait, transiting Venus at 21° Scorpio and natal Venus at 25° Cancer. The difference is about 90 degrees because from 21° Scorpio to 25° Sagittarius is 4 degrees, then to 25° Gemini (opposite) would be another 30*4=120? Hmm, maybe not exact.

I think it's better to note that if the transiting planet forms an aspect with a natal planet within 8 degrees, it's considered significant. So I'll check each transiting planet against all natal planets for these close aspects.

Continuing, Mars: Transiting Mars at 14°07' Sagittarius. Natal Mars is at 26°46' Leo. Sagittarius and Leo are both fire signs, but not adjacent. Wait, Leo is before Virgo, then Sagittarius comes later. So the distance between them would be significant. Let me calculate: from 14° Sagittarius to 26° Leo. Leo is the 5th sign (Aries=1, Taurus=2, etc.), so Leo starts at 180°+? Wait, maybe it's better to count degrees.

Alternatively, considering that transiting Mars is in Sagittarius and natal Mars is in Leo. The opposition would be in Aquarius for the natal, but that might not apply here. Maybe they don't form a strong aspect unless close.

Jupiter: Transiting Jupiter at 24°53' Cancer. Natal Jupiter is at 17°26' Libra. So transiting Jupiter in Cancer and natal in Libra. The distance would be significant, but let's see: from 24° Cancer to 17° Libra is about 90 degrees (since Cancer to Libra is 3 signs apart, each 30 degrees, so 90). So that could be a square. But exact? Let me check the exact degree difference.

Transiting Jupiter at 24°53' Cancer and natal Jupiter at 17°26' Libra: Cancer to Libra is +90° (Cancer=0, so 24.88 in Cancer is about 24.88*2=49.76? Wait, I'm confusing systems.

Alternatively, using a calculator: transiting Jupiter at 24°53' Cancer is at roughly 102.8 degrees (since Aries=0, so Cancer is +120, and 24.88 is about 120+24.88=144.88). Natal Jupiter at 17°26' Libra: Libra starts at 150°, so 17.43 degrees in Libra would be 167.43. The difference is 167.43 - 144.88 = 22.55 degrees apart. So about a trine? Wait, that's less than 30°, so maybe a trine?

But I'm not sure if it's exact enough. Alternatively, perhaps they form a square or opposition.

Saturn: Transiting Saturn at 25°10' Pisces. Natal Saturn is at 23°49' Cancer. Pisces and Cancer are both water signs, opposite each other (Pisces-Cancer). So transiting Saturn in Pisces and natal Saturn in Cancer would be an opposition? Let's check the degrees: 25° Pisces to 23° Cancer. Since they're opposite signs, it's a 180° aspect, so that's an opposition. The difference is about 2° apart (25 -23=2), which is exact enough for an opposition.

Uranus: Transiting Uranus at 29°20' Taurus. Natal Uranus is at 17°53' Gemini. So both are in adjacent signs, Taurus and Gemini. The distance would be about 29° Taurus to 17° Gemini: that's a square? Because from Taurus 29 to Gemini 17 is 36 degrees, which isn't exact. Alternatively, maybe they form a trine or something else.

Neptune: Transiting Neptune at 29°26' Pisces. Natal Neptune is at 5°50' Libra. Pisces and Libra are opposite (Pisces-Cancer-Libra?), wait no. Pisces is 3, Libra is 7. So the distance between them would be significant. Let me check: transiting Neptune at 29° Pisces, natal at 5°50' Libra. The opposition would be from Pisces to Virgo? Wait, I'm getting confused.

Wait, each sign's opposite is fixed. Aries opposite Libra, Taurus opposite Scorpio, Gemini opposite Sagittarius, Cancer opposite Capricorn, Leo opposite Aquarius, Virgo opposite Pisces. So transiting Neptune in Pisces (opposite Virgo), and natal Neptune in Libra (opposite Aries). Therefore, no opposition here.

Pluto: Transiting Pluto at 1°45' Aquarius. Natal Pluto is at 10°02' Leo. Aquarius and Leo are opposite signs, so that's an opposition. The degrees: 1° Aquarius to 10° Leo would be about a 90-degree separation? Wait, no, because they're opposite, it should be 180. Let me check: Aquarius starts at 300°, so 1°45' is 301.75°, and Leo starts at 120°, so 10°02' is 120.07°. The difference is 181.68°, which is slightly over opposition but close enough.

Now, compiling the aspects:

  • Transiting Sun conjunct Natal Moon (since both in Sagittarius at ~1°57' and 21°11', respectively).
  • Transiting Saturn opposing Natal Saturn (25° Pisces vs 23° Cancer; they're opposite signs with a small degree difference, so opposition).
  • Transiting Pluto opposing Natal Pluto (1°45' Aquarius vs 10°02' Leo; exact opposition within ~180° and close degrees).
  • Any others? Let me check transiting Mercury: at 23°47' Scorpio.natal Mercury is at 8°51' Cancer. So the distance between them is significant, but maybe a trine or square? Wait, 23° Scorpio to 8° Cancer is about 90 degrees (Scorpio to Gemini is 6 signs apart, which would be 180°). Hmm, perhaps not exact.

Wait, I think I might have missed some aspects. Let me go through each transiting planet again:

Transiting Sun:

  • Conjunct Natal Moon in Sagittarius (within ~20°, so strong conjunction).

Transiting Moon:

  • In Capricorn, checking natal planets: no natal in Capricorn, but perhaps oppositions or squares elsewhere. Maybe opposing a Cancer planet? Natal Saturn is at 23°49' Cancer; transiting Moon at 12°35' Capricorn would be opposite to ~12° Cancer, which isn't the case here (Natal Saturn is at 23.8° Cancer). So maybe not an exact opposition.

Transiting Mercury:

  • At 23°47' Scorpio.natal Mercury at 8°51' Cancer. The distance is about 90 degrees apart (Scorpio to Gemini), but that's the sign opposite, so perhaps a square? Let me see: 23.78 - 8.85 = ~14.93° difference between them? No, wait, in terms of zodiac positions. Mercury is in Cancer at 8.85°, transiting Mercury is in Scorpio at 23.78°. The distance would be significant but not exact.

Transiting Venus:

  • At 21.38° Scorpio.natal Venus at 25.73° Cancer. So the difference is about (25.73 + (30 - 21.38)) = around 34.35°, which isn't a strong aspect.

Transiting Mars:

  • At 14.12° Sagittarius.natal Mars at 26.77° Leo. The distance is significant but not exact.

Transiting Jupiter:

  • At 24.89° Cancer.natal Jupiter at 17.43° Libra. Distance: from Cancer 24.89 to Libra 17.43. That's about a trine (120°), so let's check if the degrees add up. 24.89 + 17.43 = ~42.32, which isn't exactly 120. Maybe not.

Transiting Saturn:

  • Opposing Natal Saturn as discussed.

Transiting Uranus:

  • At 29.33° Taurus.natal Uranus at 17.88° Gemini. Difference is about (17.88 - (30 -29.33)) = 17.88 -0.67=17.21, not a strong aspect.

Transiting Neptune:

  • At 29.43° Pisces.natal Neptune at 5.83° Libra. Difference is about (5.83 + 29.43) =35.26, which isn't an exact square or trine.

Transiting Pluto:

  • Opposing Natal Pluto as discussed.

So the main aspects I can identify are:

  1. Transiting Sun conjunct Natal Moon
  2. Transiting Saturn opposing Natal Saturn
  3. Transiting Pluto opposing Natal Pluto

Are there any others? Let me check transiting Mercury and Venus again.

Wait, transiting Mercury is at 23°47' Scorpio (retrograde) and natal Mercury is at 8°51' Cancer. The distance between them: 23.78 - (-8.85?) Wait, I'm getting confused with the negative degrees. Alternatively, using a calculator, transiting Mercury is at 23.78° Scorpio (which is 303 +23.78=113.78°), and natal Mercury is at 8.85° Cancer (302 + 8.85=68.85°). The difference is 113.78 -68.85 =44.93°, which isn't a strong aspect.

Similarly, transiting Venus is at 21.38° Scorpio (330 +21.38=111.38°), and natal Venus is at 25.73° Cancer (230 +25.73=85.73°). The difference is 111.38 -85.73=25.65°, which isn't exact.

So I think only the three aspects are significant: Sun-Moon conjunction, Saturn-Saturn opposition, and Pluto-Pluto opposition.

Next, ranking by strength based on house/sign position and number of aspects.

For each transiting planet:

  1. Transiting Sun: in 5th House (SUCCEDENT), sign Sagittarius (DOMICILE). It's forming one aspect (conjunction with Moon).
  2. Transiting Saturn: in Pisces (EXALTATION?), wait, is Saturn exalted in Pisces? Yes, Saturn is exalted in Libra and Pisces, so in Pisces it's exalted. House is 8th (CADENT). It forms one opposition.
  3. Transiting Pluto: in Aquarius (EXILE since Pluto rules Scorpio), but Aquarius is its exaltation? Wait, no. Pluto isn't traditionally exalted anywhere, but in modern astrology, some say it's exalted in Leo or Aquarius. If we consider it exalted in Aquarius, then it's EXALTATION; otherwise, just a neutral sign. House is 1st (ASC), which is ANADANTAR (very strong). It forms one opposition.

Other transiting planets:

  • Transiting Moon: Capricorn (EXILE?), house 4th (CADENT). No major aspects identified.
  • Transiting Mercury: Scorpio (dominant sign, as Mercury rules Virgo and Gemini), house... depends on chart. But since it's retrograde, less strength.
  • Transiting Venus: Scorpio, house... same.
  • Transiting Mars: Sagittarius (EXILE?), house 7th (CADENT).
  • Transiting Jupiter: Cancer (HOME sign), house 3rd (SUCCEDENT). If it forms any aspects, but we didn't find a strong one.
  • Transiting Uranus: Taurus (EXILE), house 6th (CADENT).
  • Transiting Neptune: Pisces (DOMICILE), house 5th (SUCCEDENT). No major aspect found.
  • Transiting Pluto: as above.

Now, ranking based on:

a. Sign dignity: EXAL, DOMI, NEUTRAL, CAPR b. House dignity: ANADANTAR (1st/7th), SUCCEDENT (2nd/3rd/5th/6th/8th), CADENT (4th/9th/12th) c. Number of aspects

Transiting Pluto: in 1st house (ANADANTAR) but sign may be EXILE or not, depending on exaltation. If exalted in Aquarius, then it's strong; otherwise, not. Plus one opposition.

Transiting Sun: 5th house (SUCCEDENT), DOMICILE sign. One aspect.

Transiting Saturn: Pisces (EXALTATION) but 8th house (CADENT). One aspect.

So strength order:

  1. Transiting Pluto: ANADANTAR, possibly EXAL in Aquarius, one opposition.
  2. Transiting Sun: SUCCEDENT, DOMICILE, one conjunction.
  3. Transiting Saturn: EXALTATION, but CADENT house; still strong due to exaltation.

But the number of aspects: all three have one each.

So the order might be Pluto > Saturn > Sun.

Wait, but Transiting Sun is in SUCCEDENT house and DOMICILE sign, which is powerful. Transiting Saturn is EXALTATION (strong) but CADENT house (less so). Transiting Pluto is ANADANTAR (very strong), possibly EXAL or not, but regardless, the 1st house is very impactful.

So I think:

  1. Transiting Pluto
  2. Transiting Sun
  3. Transiting Saturn

Each forms one major aspect.

The transiting planets form three significant aspects: a conjunction between the Sun and Moon, an opposition between Saturns, and another opposition between Plutos. Considering their positions in both sign and house, along with the number of aspects they form, the ranking by strength is as follows:

  1. Transiting Pluto: Strongest due to its position in the 1st house (ANADANTAR) and potential exaltation in Aquarius, forming an opposition with Natal Pluto.
  2. Transiting Sun: Next in strength, located in a SUCCEDENT house and DOMICILE sign, creating a conjunction with the Moon.
  3. Transiting Saturn: Least strong among these three, despite being EXALTED in Pisces, due to its CADENT house position, opposing Natal Saturn.

Aspects:

  • Transiting Sun conjunct Natal Moon
  • Transiting Saturn opposing Natal Saturn
  • Transiting Pluto opposing Natal Pluto

Each transiting planet forms one major aspect, influencing the overall chart reading.

FAILED format NOT IN the TABLE: transiting-pluto-natal-pluto-oppos NOT IN the TABLE: transiting-saturn-natal-saturn-oppos NOT IN the TABLE: transiting-sun-moon-conjunct NOT IN the TABLE: transiting-sun-natal-moon-conjunct target (hs, ps, ac, ri) vs output ____________________________________ RANKING score: 0.00% CONSENSUS score: 42.96%

rank_bar_chart(ratings, 'Planet-Rank') get_consensus(ratings) [('SUN', 3.039607805437114, 2.75), ('PLUTO', 3.6, 3.0), ('JUPITER', 3.0591260281974, 4.25), ('MARS', 4.720215047547654, 4.25), ('URANUS', 6.124099870362662, 4.5), ('MERCURY', 5.2, 5.666666666666667), ('MOON', 5.440930106817051, 5.666666666666667), ('VENUS', 4.059411708155671, 6.0), ('SATURN', 5.006659275674581, 6.0), ('NEPTUNE', 5.382306905057552, 6.0)]

Poor deepseek hallucinated using calculator, and even made up some names

    a. Sign dignity: NEUTRAL, CAPR ???
    b. House dignity: ANADANTAR (1st/7th), SUCCEDENT (2nd/3rd/5th/6th/8th), CADENT (4th/9th/12th) ???
        

The others hallucinate no less, but packing it in a proper format. There's not much of a consensus in the ranking either.

success = [[] for _ in range(len(team))] madeup = [[] for _ in range(len(team))] failed = [[0, 0] for _ in range(len(team))] total = [] consensus = [] score = [0] * len(team) tokens = [0] * len(team) timer = [0] * len(team) freq = {x:0 for x in major} favs = {x:freq.copy() for x in team} # main chart chart = positions_to_text(natal, object_filter, prefix='Natal ') for n in range(num_rounds): # pick random date transit date = f'{np.random.randint(1950, 2030)}-{np.random.randint(1, 12):>02}-{np.random.randint(1, 25):>02}' transit = get_day_chart(date, houses=natal['houses'], objects=object_filter) positions = chart + [''] + positions_to_text(transit, object_filter, prefix='Transiting ') # make validation table aspects = get_transit_aspects(natal, transit) aspects_text = transit_to_text(natal, transit, aspects) aspect_table = {aspect_hash(a):[0] * len(team) for a in aspects_text} count = 0 for k in aspect_table: a = k.split('-')[-1] freq[a] = freq.get(a, 0) + 1 if a in major: count += 1 order = transit_planet_rank(transit, aspects) total.append(count) ratings = {x:[0] * len(team) for x in object_filter} print(f'\n--------------------------------------------------- {date} >>{len(aspects)}<< --- {n + 1}') for i, model in enumerate(team): print(f'===================================== {model}') output = read_positions(model, transit_aspects_extraction_prompt, positions, context=context, modality=MODALITY, dignity=DIGNITY, show_output=False) extracted, rank, num_in_tokens, num_out_tokens, tm = output rs = sc = mu = ff = rf = 0 for key in set([aspect_hash(a) for a in extracted]): if not key in aspect_table: if key[0].isalpha() and 5 >= len(key.split('-')) >= 4: print('M', end='') # made-up mu += 1 else: print('F', end='') # failure ff = 1 continue elif aspect_table[key][i] == 0: print('S', end='') # success sc += 1 aspect_table[key][i] = 1 else: print('D', end='') # duplicate key = key.split('-')[-1] favs[model][key] = favs[model].get(key, 0) + 1 index = [] for p in rank: props = match_ranking_props(p) if props[0] == '': ff = 1 continue if ratings[props[0]][i] > 0: # duplicate rf = 1 continue index.append(props) ratings[props[0]][i] = len(index) if len(index) <= len(object_filter) else 0 if len(index) != len(PLANETS): rf = 1 rs = ranking_score(index, order, weight) success[i].append(sc) madeup[i].append(mu) failed[i][0] += ff failed[i][1] += rf score[i] += rs tokens[i] += num_out_tokens timer[i] += tm print('.' * (len(aspects) - len(extracted))) print(f'EXTRACTION success:{sc/len(aspects):>7.2%} madeup:{mu/(sc + mu or 1):>7.2%}') print(f'RANKING score:{rs:>7.2%}') consensus.append(consensus_score(ratings)) print(f'\nCONSENSUS score: {consensus[-1]:.2%}') --------------------------------------------------- 1981-06-09 >>43<< --- 1 ===================================== llama3.1 MMMMMMM.................................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 11.11% ===================================== gemma3:12b MMMMMMSMMMMSMMM............................ EXTRACTION success: 4.65% madeup: 86.67% RANKING score: 14.44% ===================================== phi4 MMMMMMMMSMMMM.............................. EXTRACTION success: 2.33% madeup: 92.31% RANKING score: 16.67% ===================================== gpt-oss SSSSSSS.................................... EXTRACTION success: 16.28% madeup: 0.00% RANKING score: 24.44% ===================================== deepseek-r1:14b FAILED format MFMFSFM.............................. EXTRACTION success: 2.33% madeup: 75.00% RANKING score: 0.00% CONSENSUS score: 46.67% --------------------------------------------------- 1982-04-07 >>55<< --- 2 ===================================== llama3.1 MMMMFMMMF............................................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 15.56% ===================================== gemma3:12b MMMMMMMMMMMMMMMMMMMMMM................................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 22.22% ===================================== phi4 SMMMMMMMMMMMMM......................................... EXTRACTION success: 1.82% madeup: 92.86% RANKING score: 8.89% ===================================== gpt-oss FAILED format FFFF.................................. EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% ===================================== deepseek-r1:14b SMMMMMMM............................................... EXTRACTION success: 1.82% madeup: 87.50% RANKING score: 10.00% CONSENSUS score: 47.42% --------------------------------------------------- 2005-07-12 >>54<< --- 3 ===================================== llama3.1 FMMM................................................ EXTRACTION success: 0.00% madeup:100.00% RANKING score: 7.78% ===================================== gemma3:12b F................................... EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 12.22% ===================================== phi4 MSMMMMFMMM............................................ EXTRACTION success: 1.85% madeup: 88.89% RANKING score: 14.44% ===================================== gpt-oss SMMMMMMMMMSSMMMMMSMMMMSMMSMMMMMMMMMMMMMMMSMMMMMSMMMMMSMMMMMMMMMM EXTRACTION success: 16.67% madeup: 85.94% RANKING score: 8.89% ===================================== deepseek-r1:14b MMMSMMMMM............................................. EXTRACTION success: 1.85% madeup: 88.89% RANKING score: 3.33% CONSENSUS score: 56.83% --------------------------------------------------- 1968-04-07 >>58<< --- 4 ===================================== llama3.1 MMMMMMMMM................................................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 12.22% ===================================== gemma3:12b MMMMMMMMMMMMSSSMMMMMMMMMS................................. EXTRACTION success: 6.90% madeup: 84.00% RANKING score: 14.44% ===================================== phi4 MMMSMMMM.................................................. EXTRACTION success: 1.72% madeup: 87.50% RANKING score: 3.33% ===================================== gpt-oss MMSSM..................................................... EXTRACTION success: 3.45% madeup: 60.00% RANKING score: 6.67% ===================================== deepseek-r1:14b FAILED format MFMMM....................................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% CONSENSUS score: 51.18% --------------------------------------------------- 1986-07-01 >>49<< --- 5 ===================================== llama3.1 MMMMM............................................ EXTRACTION success: 0.00% madeup:100.00% RANKING score: 8.89% ===================================== gemma3:12b F.................................. EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 13.33% ===================================== phi4 MMMMMMMMMM....................................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 11.11% ===================================== gpt-oss SSSS............................................. EXTRACTION success: 8.16% madeup: 0.00% RANKING score: 13.33% ===================================== deepseek-r1:14b FAILED format FF.......................................... EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% CONSENSUS score: 47.43% --------------------------------------------------- 1953-02-09 >>61<< --- 6 ===================================== llama3.1 MMMMMMSMMMMMM................................................ EXTRACTION success: 1.64% madeup: 92.31% RANKING score: 15.56% ===================================== gemma3:12b MMMMMMMMMMMMMM............................................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 11.11% ===================================== phi4 MMMMMMMMMM................................................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 15.56% ===================================== gpt-oss MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMSMMMM........................ EXTRACTION success: 1.64% madeup: 97.30% RANKING score: 14.44% ===================================== deepseek-r1:14b FAILED format FFFM........................................................ EXTRACTION success: 0.00% madeup:100.00% RANKING score: 0.00% CONSENSUS score: 49.71% --------------------------------------------------- 2028-06-22 >>50<< --- 7 ===================================== llama3.1 MSFMMSMMSM........................................ EXTRACTION success: 6.00% madeup: 66.67% RANKING score: 12.22% ===================================== gemma3:12b MMMSMMMMMSMMM..................................... EXTRACTION success: 4.00% madeup: 84.62% RANKING score: 12.22% ===================================== phi4 MSMMFSMMMMM....................................... EXTRACTION success: 4.00% madeup: 80.00% RANKING score: 23.33% ===================================== gpt-oss F........................................ EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% ===================================== deepseek-r1:14b MMMMMMMMMMMM...................................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 10.00% CONSENSUS score: 52.87% --------------------------------------------------- 1962-08-17 >>48<< --- 8 ===================================== llama3.1 MMMMMMMSSM...................................... EXTRACTION success: 4.17% madeup: 80.00% RANKING score: 12.22% ===================================== gemma3:12b SMMMMMMMMMMMS................................... EXTRACTION success: 4.17% madeup: 84.62% RANKING score: 18.89% ===================================== phi4 SMSMMMMM........................................ EXTRACTION success: 4.17% madeup: 75.00% RANKING score: 17.78% ===================================== gpt-oss MSMMMMSMMMMMMMMMMMMMMMMSMMMMMSMMMMSMMM.......... EXTRACTION success: 10.42% madeup: 86.84% RANKING score: 14.44% ===================================== deepseek-r1:14b FAILED format FFFFF....................................... EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% CONSENSUS score: 46.49% --------------------------------------------------- 1956-05-22 >>51<< --- 9 ===================================== llama3.1 MMSMMMM............................................ EXTRACTION success: 1.96% madeup: 85.71% RANKING score: 14.44% ===================================== gemma3:12b MMMMMMMMMMMMM...................................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 16.67% ===================================== phi4 MMMMMMMM........................................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 12.22% ===================================== gpt-oss FAILED format FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% ===================================== deepseek-r1:14b FMFMM........................................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 15.56% CONSENSUS score: 46.49% --------------------------------------------------- 1976-02-20 >>48<< --- 10 ===================================== llama3.1 MMMMSM.......................................... EXTRACTION success: 2.08% madeup: 83.33% RANKING score: 6.67% ===================================== gemma3:12b MMMMMMSMMS...................................... EXTRACTION success: 4.17% madeup: 80.00% RANKING score: 4.44% ===================================== phi4 MMMMMMMMMMMMMMMMMMMMMS.......................... EXTRACTION success: 2.08% madeup: 95.45% RANKING score: 2.22% ===================================== gpt-oss SSSSSSSSSSSS.................................... EXTRACTION success: 25.00% madeup: 0.00% RANKING score: 0.00% ===================================== deepseek-r1:14b MMMMSMMMMMMMMMMSMSM............................. EXTRACTION success: 6.25% madeup: 84.21% RANKING score: 6.67% CONSENSUS score: 61.48% --------------------------------------------------- 1974-03-04 >>42<< --- 11 ===================================== llama3.1 MMMSMMM................................... EXTRACTION success: 2.38% madeup: 85.71% RANKING score: 8.89% ===================================== gemma3:12b MMSMMMMMMMMMMMMM.......................... EXTRACTION success: 2.38% madeup: 93.75% RANKING score: 11.11% ===================================== phi4 MMMFMMMMMMMMMMM......................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 20.00% ===================================== gpt-oss FAILED format F..................................... EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% ===================================== deepseek-r1:14b MMMMMMMM.................................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 14.44% CONSENSUS score: 43.63% --------------------------------------------------- 1974-01-22 >>47<< --- 12 ===================================== llama3.1 MMMMMSM........................................ EXTRACTION success: 2.13% madeup: 85.71% RANKING score: 7.78% ===================================== gemma3:12b F............................... EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 13.33% ===================================== phi4 MMMMMMMMM...................................... EXTRACTION success: 0.00% madeup:100.00% RANKING score: 12.22% ===================================== gpt-oss MM............................................. EXTRACTION success: 0.00% madeup:100.00% RANKING score: 13.33% ===================================== deepseek-r1:14b FAILED format F.............................................. EXTRACTION success: 0.00% madeup: 0.00% RANKING score: 0.00% CONSENSUS score: 47.85%

plot_test_result(total, madeup, success, consensus) results['consensus'].append(np.median(consensus)) counts['true-dist'].append(freq.copy()) for i, model in enumerate(team): counts[model].append(favs[model].copy()) results[model].append({ 'success': sum(success[i])/sum(total), 'madeup': sum(madeup[i])/(sum(madeup[i]) + sum(success[i]) or 1), 'failed': sum(failed[i])/2/num_rounds, 'score': score[i]/num_rounds, '#tokens': tokens[i]/num_rounds, '%time': timer[i]/sum(timer) }) print(" ".join([f"{model:>15}"] + [f"{k}:{v:6,.0f}" if k=='#tokens' else f"{k}:{v:>7.2%}" for k,v in results[model][-1].items()])) llama3.1 success: 2.07% madeup: 88.89% failed: 54.17% score: 11.11% #tokens: 292 %time: 1.25% gemma3:12b success: 2.69% madeup: 90.78% failed: 50.00% score: 13.70% #tokens: 403 %time: 2.58% phi4 success: 1.86% madeup: 93.33% failed: 37.50% score: 13.15% #tokens: 630 %time: 3.96% gpt-oss success: 8.28% madeup: 76.33% failed: 37.50% score: 7.96% #tokens:13,783 %time: 67.98% deepseek-r1:14b success: 1.24% madeup: 91.18% failed: 66.67% score: 5.00% #tokens: 3,608 %time: 24.23% print(f'consensus: avg:{np.mean(consensus):.2%} median:{np.median(consensus):.2%}') consensus: avg:49.84% median:47.64% for f,m in zip(failed, team): print(f'{m:>15}: failed format {f[0]/num_rounds:>7.2%} failed consistency {f[1]/num_rounds:>7.2%}') llama3.1: failed format 25.00% failed consistency 83.33% gemma3:12b: failed format 25.00% failed consistency 75.00% phi4: failed format 25.00% failed consistency 50.00% gpt-oss: failed format 41.67% failed consistency 33.33% deepseek-r1:14b: failed format 58.33% failed consistency 75.00%

All failed. gpt put up a fight (still a winner), deepseek gave up: 6K tokens vs 4K tokens gpt in the previous test -- now 3K vs 13K.

Compare all

Let's see the metrics (scale-normalized), by model and by test.

fig, ax = plt.subplots(1, 6, figsize=(9.4, 3)) fig.set_facecolor('none') metrics = list(results['gpt-oss'][0].keys()) for n in range(len(metrics)): for i,m in enumerate(team): norm = 1000 if metrics[n] == '#tokens' else 1 ax[n].plot([results[m][j][metrics[n]]/norm for j in range(len(results[m]))], marker='s',label=m) ax[n].set_xticks([]) ax[n].set_xlim([-0.25, 2.25]) ax[n].set_yticks([]) ax[n].set_title(metrics[n]) ax[n].set_facecolor('none') ax[3].plot([1, 2], results['consensus'], color='cyan', marker='o', label='consensus') ax[3].legend(bbox_to_anchor=(4.25, 0.5), loc='center', frameon=False) plt.show()

Next comes the aspects counts (we've got some examples of a "mode collapse"):

fig, ax = plt.subplots(1, 3, figsize=(9, 3.5)) fig.set_facecolor('none') for n in range(3): norm = sum([v for k,v in counts['true-dist'][n].items() if k in major]) ax[n].plot([v/norm for k,v in counts['true-dist'][n].items() if k in major], color='black', linestyle='-.', linewidth=0.75, label=f'true-dist') for i,m in enumerate(team): ax[n].plot([counts[m][0][k]/counts['true-dist'][n][k] for k in major], label=m) ax[n].set_xticks(range(len(major))) ax[n].set_xticklabels([a[:2] for a in major]) ax[n].set_ylim([-0.1, 0.9]) ax[n].set_facecolor('none') ax[1].set_xlabel('Aspect type') ax[1].set_title('Tests 1-3: normalized extraction success vs. true-dist by aspect type.') ax[2].legend(frameon=False) plt.tight_layout()

All spike at conjunctions, gemma is obsessed with oppositions (rare in reality). The highest pick at conjunctions makes sense – not only the most discussed, but also easiest to spot (the same sign planets), some astrologers consider planets in the same sign conjunct no matter how far apart they are.

Now, as we have a full picture, let's run a concept-prove experiment.

Pick top aspects from a precompiled list

For this test we provide our team with a list of aspects (not a full chart) and ask to chose a top 5 ordered by significance. The aspects list is of a natal chart transit (our last test target) -- it contains not only planetary aspects but also other sensitive points (AC, MC, house-cusps).

num = 5 aspects_ranking_prompt = """You are practicing astrologer. Below is a list of natal chart transit aspects: {positions} Pick top {num} aspects based on the strength of influence within this natal chart context. Your answer should be in the following exact format (plain, concise, no extras): ASPECTS <list your top {num} as following: * transiting <planet-name> - natal <planet-name> - <aspect-name>> RANK <list your ranking criteria ordered by importance> EXPLANATION <explain your choice> """ # get full unfiltered list transit = get_current(tz, object_filter, natal['houses']) # make shorter list of stronger major aspects ordered by our criteria aspects = aspect_rank([a for a in get_transit_aspects(natal, transit) if a['strength'] >= 0.5 and a['aspect'] in aspect_filter]) aspects_text = transit_to_text(natal, transit, aspects) print(aspects_ranking_prompt.format(positions='\n'.join(aspects_text), num=num)) You are practicing astrologer. Below is a list of natal chart transit aspects: Transiting Mercury (4th House, Scorpio) - Midheaven (Taurus) Opposition (180°) precision 0°/91% Transiting Neptune (8th House, Pisces) - Ascendant (Leo) Inconjunct (150°) precision 0°/81% Transiting Mercury (4th House, Scorpio) - Natal Sun (11th House, Gemini) Inconjunct (150°) precision 1°/78% Transiting Uranus (10th House, Taurus) - Ascendant (Leo) Square (90°) precision 0°/88% Transiting Jupiter (12th House, Cancer) - Midheaven (Taurus) Sextile (60°) precision 1°/76% Transiting Jupiter (12th House, Cancer) - Natal Venus (12th House, Cancer) Conjunction (0°) precision 1°/89% Transiting Saturn (8th House, Pisces) - Natal Venus (12th House, Cancer) Trine (120°) precision 1°/93% Transiting Mercury (4th House, Scorpio) - Natal Saturn (12th House, Cancer) Trine (120°) precision 0°/100% Transiting Mercury (4th House, Scorpio) - Natal Mars (1st House, Leo) Square (90°) precision 3°/63% Transiting Venus (4th House, Scorpio) - Natal Sun (11th House, Gemini) Inconjunct (150°) precision 2°/62% Transiting Saturn (8th House, Pisces) - Midheaven (Taurus) Sextile (60°) precision 1°/67% Transiting Uranus (10th House, Taurus) - Natal Mars (1st House, Leo) Square (90°) precision 3°/68% Transiting Saturn (8th House, Pisces) - Natal Sun (11th House, Gemini) Square (90°) precision 2°/72% Transiting Mercury (4th House, Scorpio) - Natal Venus (12th House, Cancer) Trine (120°) precision 2°/76% Transiting Saturn (8th House, Pisces) - Natal Mars (1st House, Leo) Inconjunct (150°) precision 2°/60% Transiting Venus (4th House, Scorpio) - Natal Saturn (12th House, Cancer) Trine (120°) precision 2°/70% Transiting Jupiter (12th House, Cancer) - Natal Saturn (12th House, Cancer) Conjunction (0°) precision 1°/87% Transiting Saturn (8th House, Pisces) - Natal Saturn (12th House, Cancer) Trine (120°) precision 1°/83% Transiting Saturn (8th House, Pisces) - Natal Moon (5th House, Sagittarius) Square (90°) precision 4°/50% Transiting Neptune (8th House, Pisces) - Natal Venus (12th House, Cancer) Trine (120°) precision 4°/54% Transiting Moon (6th House, Capricorn) - Natal Mercury (12th House, Cancer) Opposition (180°) precision 4°/53% Transiting Mars (5th House, Sagittarius) - Natal Uranus (11th House, Gemini) Opposition (180°) precision 4°/53% Pick top 5 aspects based on the strength of influence within this natal chart context. Your answer should be in the following exact format (plain, concise, no extras): ASPECTS - natal - > RANK EXPLANATION def ranking_score(table, num): # soft score: the same set, any order scores 100% score = [[int(v[j] > 0) for j in range(len(team))] for i,(k,v) in enumerate(list(table.items())[:num])] return list(np.array(score).sum(axis=0)/num) aspect_table = {aspect_hash(a):[0] * len(team) for a in aspects_text} for i, model in enumerate(team): print('====================================') print(f' {model}') print('====================================') output = read_positions(model, aspects_ranking_prompt, aspects_text, num=num) top, criteria, num_in_tokens, num_out_tokens, tm = output for k, key in enumerate([aspect_hash(a) for a in top]): if not key in aspect_table: if key[0].isalpha() and 5 >= len(key.split('-')) >= 4: print('M', end='') # made-up aspect else: print('F', end='') # failed format continue if aspect_table[key][i] > 0: print('D', end='') # duplicate continue print('S', end='') # success aspect_table[key][i] = k + 1 print() ==================================== llama3.1 ====================================

ASPECTS

  • Transiting Saturn (8th House, Pisces) - Natal Venus (12th House, Cancer) Trine (120°)
  • Transiting Mercury (4th House, Scorpio) - Midheaven (Taurus) Opposition (180°)
  • Transiting Jupiter (12th House, Cancer) - Natal Venus (12th House, Cancer) Conjunction (0°)
  • Transiting Saturn (8th House, Pisces) - Midheaven (Taurus) Sextile (60°)
  • Transiting Mercury (4th House, Scorpio) - Natal Sun (11th House, Gemini) Inconjunct (150°)

RANK

  1. Precision (higher precision = stronger influence)
  2. Aspect Nature (Trines > Sextiles > Oppositions / Inconjuncts > Squares)
  3. Orb (smaller orb = stronger influence)

EXPLANATION I chose the top 5 aspects based on their strength of influence, taking into account precision, aspect nature, and orb. The Trine between Transiting Saturn and Natal Venus is particularly significant, as it can bring stability and harmony in relationships. The Opposition between Transiting Mercury and Midheaven indicates a dynamic and potentially challenging situation in career or public image. The Conjunction between Transiting Jupiter and Natal Venus suggests an opportunity for growth and expansion in relationships. The Sextile between Transiting Saturn and Midheaven can indicate a boost to career ambitions, while the Inconjunct between Transiting Mercury and Natal Sun may signal a need to adjust communication style or approach to self-expression.

SSSSS ==================================== gemma3:12b ====================================

ASPECTS

  • Transiting Uranus - Ascendant - Square
  • Transiting Mercury - Midheaven - Opposition
  • Transiting Saturn - Natal Venus - Trine
  • Transiting Jupiter - Natal Saturn - Conjunction
  • Transiting Saturn - Natal Moon - Square

RANK

  1. House Placement & Degree Precision (priority to angles, then significant houses, and tighter degrees)
  2. Aspect Type (Squares and oppositions indicate challenges, trines indicate ease and flow)
  3. Planet Dignity/Debility (consider how planets are functioning in their signs/houses)
  4. Multiple Aspects to Same Planet (compound influence)

EXPLANATION The top aspects are chosen based on a combination of house placement, aspect type, and precision. Uranus squaring the Ascendant indicates significant disruption and unexpected changes to identity and self-image. Mercury opposing Midheaven represents a career or public image conflict. Saturn trining Venus suggests supportive and harmonious relationship opportunities. Jupiter conjunct Natal Saturn signifies a merging of growth and limitations. Saturn squaring the Moon indicates emotional challenges and a need for structure.

SSSSS ==================================== phi4 ====================================

ASPECTS

  • Transiting Mercury (4th House, Scorpio) - Natal Saturn (12th House, Cancer) Trine (120°) precision 0°/100%
  • Transiting Mercury (4th House, Scorpio) - Midheaven (Taurus) Opposition (180°) precision 0°/91%
  • Transiting Saturn (8th House, Pisces) - Natal Venus (12th House, Cancer) Trine (120°) precision 1°/93%
  • Transiting Jupiter (12th House, Cancer) - Natal Venus (12th House, Cancer) Conjunction (0°) precision 1°/89%
  • Transiting Saturn (8th House, Pisces) - Natal Saturn (12th House, Cancer) Trine (120°) precision 1°/83%

RANK

  1. Precision (exact match vs. near match)
  2. Strength of the aspect (harmonious aspects are considered more influential)
  3. Positional significance in chart (Midheaven, Ascendant)

EXPLANATION
The top five transits were selected based on a combination of precision and the strength of the aspect involved. The highest precision is given to exact matches over near matches, reflecting an unambiguous influence. Harmonious aspects like Trines and Conjunctions are considered more influential due to their supportive nature, fostering positive growth or realization, whereas challenging aspects such as Oppositions and Squares might indicate tension but can also lead to significant developments depending on the context. The positions involved in each aspect were also taken into account; aspects involving key chart positions like the Midheaven (representing career and public status) and Natal planets are deemed to carry more weight due to their potential impact on personal development and life path transformations.

SSSSS ==================================== gpt-oss ====================================

ASPECTS

  • transiting Mercury - natal Saturn - Trine
  • transiting Saturn - natal Venus - Trine
  • transiting Jupiter - natal Venus - Conjunction
  • transiting Jupiter - natal Saturn - Conjunction
  • transiting Jupiter - natal Midheaven - Sextile

RANK

  1. Aspect type hierarchy (Conjunction > Trine > Sextile > Square > Opposition > Inconjunct)
  2. Precision percentage (higher = stronger)
  3. Involvement of key chart points (Sun, Moon, MC, Asc)

EXPLANATION
The chosen five are the only aspects that combine the strongest aspect types with the highest precision values and involve major chart points.

  • The Mercury‑Saturn trine (100 %) is the most powerful, linking the mind (Mercury) with the karmic discipline of Saturn.
  • The Saturn‑Venus trine (93 %) connects the generational Saturn with the intimate sphere of Venus, amplifying long‑term relationship dynamics.
  • The Jupiter‑Venus and Jupiter‑Saturn conjunctions (89 % and 87 %) merge expansion with both love (Venus) and karmic structure (Saturn), creating significant supportive energies.
  • The Jupiter‑Midheaven sextile (76 %) activates career and public image, a key point for transits.

All other aspects, though notable, either involve weaker aspect types, lower precision, or less critical chart points, placing them below these five in overall influence.

SSSSS ==================================== deepseek-r1:14b ==================================== Alright, so I'm trying to figure out how to pick the top 5 aspects from this list based on their strength of influence. Let me start by understanding what each aspect means and why some might be stronger than others.

First, looking at the aspects provided, I notice that precision is given for each one. Precision seems to indicate how closely the aspect is exact. A higher precision percentage probably means it's more significant because it's closer to being exact. So, I should prioritize those with higher percentages first.

Starting with Mercury in Scorpio transiting and forming an opposition with the Midheaven (Taurus) at 180° with 91% precision. That seems like a strong influence since it's almost exact. Then, there's another Mercury transit making a trine with Natal Saturn at 120° with perfect precision of 100%. Perfect trines are usually very harmonious and can have a significant impact, so this might be high up.

Next, I see Jupiter in Cancer conjuncting Natal Venus also in Cancer with 89% precision. Conjunctions are powerful because the planets are aligned, which often means amplified energy. The precision here is almost perfect, making it very influential.

Looking further down, Saturn transiting Pisces trines Natal Saturn in Cancer at 120° with 83% precision. This is a conjunction since both are Saturn, so it's likely to be a major influence as well. Also, the trine aspect itself is harmonious and can have a strong effect.

Another high one is Venus transiting Scorpio trining Natal Saturn in Cancer at 120° with 70% precision. Trines are positive aspects, so even though the precision isn't perfect, it's still quite strong enough to be significant.

Now, considering the list, I should rank these based on their aspect strength and precision. The Mercury-Midheaven opposition is first because of the exactness (91%) and the fact that oppositions can bring tension but also clarity. The Mercury-Saturn trine at 100% precision is a perfect harmonious aspect, so it's next.

Jupiter-Venus conjunction with high precision follows, as conjunctions are inherently strong. Then, Saturn-Saturn trine because it's a powerful alignment and the aspect itself is beneficial. Finally, Venus-Saturn trine because even though not 100%, it's still quite exact and a positive aspect.

I think these top five cover both high precision and significant aspects that are likely to have a strong influence on the chart.

ASPECTS

  1. Transiting Mercury - Midheaven - Opposition
  2. Transiting Mercury - Natal Saturn - Trine
  3. Transiting Jupiter - Natal Venus - Conjunction
  4. Transiting Saturn - Natal Saturn - Trine
  5. Transiting Venus - Natal Saturn - Trine

RANK

  1. Precision and exactness of the aspect (highest precision first)
  2. The nature of the aspect (opposition, trine, conjunction)
  3. Planetary influence and house positions
  4. Harmonious or challenging aspect quality
  5. Current astrological significance

EXPLANATION
The top aspects are chosen based on their high precision percentages, which indicate strong influences. Exact oppositions and trines often bring significant tension or clarity, while conjunctions amplify energies. The alignment of Jupiter with Venus suggests growth and harmony, and the perfect trine between Mercury and Saturn highlights effective communication and problem-solving.

SSSSS

There we go: no one failed.

rank_bar_chart(aspect_table, 'Aspect-Rank') res1 = get_consensus(aspect_table)[:num] for x in res1: print(f'{x[0]:>40} avg-std:{x[1]:>.2f} avg-rank:{x[2]:.1f}') transiting-uranus-ascendant-square avg-std:4.40 avg-rank:1.0 transiting-mercury-natal-saturn-trine avg-std:2.75 avg-rank:1.3 transiting-mercury-midheaven-oppos avg-std:1.80 avg-rank:1.8 transiting-saturn-natal-venus-trine avg-std:2.17 avg-rank:2.2 transiting-jupiter-natal-venus-conjunct avg-std:2.36 avg-rank:3.2 print(f'consensus: {consensus_score({k:v for k,v in aspect_table.items() if k in [x[0] for x in res1]}):.2%}') consensus: 66.32% for k,v in aspect_table.items(): print(k, sum([x > 0 for x in v])) transiting-mercury-midheaven-oppos 4 transiting-neptune-ascendant-inconjunct 0 transiting-mercury-natal-sun-inconjunct 1 transiting-uranus-ascendant-square 1 transiting-jupiter-midheaven-sextile 1 transiting-jupiter-natal-venus-conjunct 4 transiting-saturn-natal-venus-trine 4 transiting-mercury-natal-saturn-trine 3 transiting-mercury-natal-mars-square 0 transiting-venus-natal-sun-inconjunct 0 transiting-saturn-midheaven-sextile 1 transiting-uranus-natal-mars-square 0 transiting-saturn-natal-sun-square 0 transiting-mercury-natal-venus-trine 0 transiting-saturn-natal-mars-inconjunct 0 transiting-venus-natal-saturn-trine 1 transiting-jupiter-natal-saturn-conjunct 2 transiting-saturn-natal-saturn-trine 2 transiting-saturn-natal-moon-square 1 transiting-neptune-natal-venus-trine 0 transiting-moon-natal-mercury-oppos 0 transiting-mars-natal-uranus-oppos 0 for m,s in zip(team, ranking_score(aspect_table, num)): print(f'{m:>15}: {s:>7.2%}') llama3.1: 40.00% gemma3:12b: 40.00% phi4: 20.00% gpt-oss: 20.00% deepseek-r1:14b: 20.00%

There are consensus between the models, however, not so overwhelming. Let's try some simplified criteria list, and check if consensus raises.

aspects_ranking_prompt_with_criteria = """You are practicing astrologer. Below is a list of natal chart transit aspects: {positions} Pick top {num} aspects based on the following criteria (ordered by importance): 1. Aspect precision: (< 1°) > (< 3°) > (>= 3°) 2. Aspect type: Conjunction > Opposition = Square > Trine > Sextile > Inconjunct 3. Planetary hierarchy: ascendant = midheaven = inner planets > outer planets Your answer should be in the following exact format (plain, concise, no extras): ASPECTS <list your top {num} as following: * transiting <planet-name> - natal <planet-name> - <aspect-name>> RANK <list your ranking criteria ordered by importance> EXPLANATION <explain your choice> """ aspect_table = {aspect_hash(a):[0] * len(team) for a in aspects_text} for i, model in enumerate(team): print('====================================') print(f' {model}') print('====================================') output = read_positions(model, aspects_ranking_prompt_with_criteria, aspects_text, num=num) top, criteria, num_in_tokens, num_out_tokens, tm = output for k, key in enumerate([aspect_hash(a) for a in top]): if not key in aspect_table: if key[0].isalpha() and 5 >= len(key.split('-')) >= 4: print('M', end='') # made-up aspect else: print('F', end='') # failed format continue if aspect_table[key][i] > 0: print('D', end='') # duplicate continue print('S', end='') # success aspect_table[key][i] = k + 1 print() ==================================== llama3.1 ====================================

ASPECTS

  • Transiting Saturn (8th House, Pisces) - Natal Venus (12th House, Cancer) Trine (120°)
  • Transiting Jupiter (12th House, Cancer) - Natal Venus (12th House, Cancer) Conjunction (0°)
  • Transiting Mercury (4th House, Scorpio) - Midheaven (Taurus) Opposition (180°)
  • Transiting Saturn (8th House, Pisces) - Midheaven (Taurus) Sextile (60°)
  • Transiting Uranus (10th House, Taurus) - Ascendant (Leo) Square (90°)

RANK

  1. Aspect precision: (< 1°) > (< 3°) > (>= 3°)
  2. Aspect type: Conjunction > Opposition = Square > Trine > Sextile > Inconjunct
  3. Planetary hierarchy: ascendant = midheaven = inner planets > outer planets

EXPLANATION I prioritized the aspects with high precision, strong aspect types, and planetary hierarchy. Transiting Saturn's trine to Natal Venus is a very precise and harmonious aspect, indicating a smooth flow of energy. The conjunction between Jupiter and Natal Venus suggests a new opportunity or expansion in relationships and values. The opposition between Transiting Mercury and Midheaven highlights a tension between communication and career/visibility. The sextile between Saturn and Midheaven indicates a supportive influence on the individual's ambitions and reputation. Finally, Uranus' square to Ascendant suggests a sudden change or adjustment to one's personal identity and approach to life.

SSSSS ==================================== gemma3:12b ====================================

ASPECTS

  • Transiting Jupiter - Natal Saturn - Conjunction
  • Transiting Uranus - Ascendant - Square
  • Transiting Mercury - Midheaven - Opposition
  • Transiting Jupiter - Natal Venus - Conjunction
  • Transiting Saturn - Natal Venus - Trine

RANK

  1. Aspect precision (< 1°)
  2. Aspect type (Conjunction > Opposition = Square > Trine > Sextile > Inconjunct)
  3. Planetary hierarchy (ascendant = midheaven = inner planets > outer planets)

EXPLANATION The Jupiter-Saturn conjunction, Jupiter-Venus conjunction, Uranus-Ascendant square, Mercury-Midheaven opposition, and Saturn-Venus trine were selected due to their high precision, significant aspect types (conjunction and square), and involvement of key planets and points. The conjunctions demonstrate a strong merging of energies, the square signals tension and challenge, and the opposition indicates a need for balance.

SSSSS ==================================== phi4 ====================================

ASPECTS

  • Transiting Mercury (4th House, Scorpio) - Natal Saturn (12th House, Cancer) Trine (120°) precision 0°/100%
  • Transiting Mercury (4th House, Scorpio) - Midheaven (Taurus) Opposition (180°) precision 0°/91%
  • Transiting Jupiter (12th House, Cancer) - Natal Venus (12th House, Cancer) Conjunction (0°) precision 1°/89%
  • Transiting Saturn (8th House, Pisces) - Natal Venus (12th House, Cancer) Trine (120°) precision 1°/93%
  • Transiting Jupiter (12th House, Cancer) - Midheaven (Taurus) Sextile (60°) precision 1°/76%

RANK

  1. Aspect precision: (< 1°) > (< 3°) > (>= 3°)
  2. Aspect type: Conjunction > Opposition = Square > Trine > Sextile > Inconjunct
  3. Planetary hierarchy: Ascendant = Midheaven = Inner planets > Outer planets

EXPLANATION

The top five aspects were selected based on the specified criteria, prioritizing aspect precision first, followed by the strength of the aspect type and then planetary importance.

  1. Transiting Mercury (4th House, Scorpio) - Natal Saturn (12th House, Cancer) Trine (120°): This has a perfect precision of 0° and a maximum rating of 100%, making it the top choice due to its ideal alignment with high precision.

  2. Transiting Mercury (4th House, Scorpio) - Midheaven (Taurus) Opposition (180°): With 0° precision and a high rating of 91%, this aspect is significant due to its strong influence over personal ambitions as represented by the Midheaven.

  3. Transiting Jupiter (12th House, Cancer) - Natal Venus (12th House, Cancer) Conjunction (0°): This conjunction has an excellent 1° precision and a high rating of 89%, emphasizing harmonious relations between expansive energies (Jupiter) and personal values or relationships (Venus).

  4. Transiting Saturn (8th House, Pisces) - Natal Venus (12th House, Cancer) Trine (120°): With precise alignment at 1° and the highest rating of 93% among trines, it suggests a supportive influence on transformational processes affecting personal values.

  5. Transiting Jupiter (12th House, Cancer) - Midheaven (Taurus) Sextile (60°): Although it is a sextile with moderate precision, its high relevance to the individual's aspirations and career makes it notable despite being of lower aspect strength compared to others in this list.

SSSSS ==================================== gpt-oss ====================================

ASPECTS

  • transiting Mercury - natal Midheaven - Opposition
  • transiting Uranus - natal Ascendant - Square
  • transiting Mercury - natal Saturn - Trine
  • transiting Jupiter - natal Venus - Conjunction
  • transiting Jupiter - natal Saturn - Conjunction

RANK

  1. Aspect precision
  2. Aspect type
  3. Planetary hierarchy (ascendant = midheaven = inner planets > outer planets)

EXPLANATION
The four 0°‑precision aspects are the most exact, so they rank first. Among them, Opposition and Square outrank Trine and Inconjunct. Using planetary hierarchy, the Mercury‑Midheaven Opposition (both inner/point) outranks the Uranus‑Ascendant Square (outer/point). The Mercury‑Saturn Trine comes next.
The next best precision group is 1° aspects. Conjunctions are the strongest type, so the Jupiter‑Venus and Jupiter‑Saturn conjunctions are chosen. Between them, the natal Venus (inner planet) gives the Jupiter‑Venus aspect higher priority than Jupiter‑Saturn. Thus the top five aspects are listed above.

SSSSS ==================================== deepseek-r1:14b ==================================== Alright, so I'm trying to figure out how to pick the top five transit aspects from the given list based on the criteria provided. Let me break it down step by step.

First, I need to understand the criteria in order of importance:

  1. Aspect precision: The closer the better. So, less than 1° is best, then less than 3°, and anything 3° or more is last.
  2. Aspect type: Conjunction is top priority, followed by Opposition, Square, Trine, Sextile, and Inconjunct.
  3. Planetary hierarchy: Ascendant, Midheaven, and inner planets (Mercury, Venus, Mars) are higher than outer planets (Jupiter, Saturn, Uranus, Neptune).

So, I'll go through each aspect one by one, evaluate them based on these criteria, and then sort them accordingly.

Looking at the list:

  1. Transiting Mercury - Midheaven - Opposition (180°), precision 0°/91%

    • Precision: 0°, which is <1°, so it's very precise.
    • Aspect type: Opposition is high but not the highest; Conjunction is better.
    • Planetary hierarchy: Mercury is an inner planet, and Midheaven is a significant point. So this is good.
  2. Transiting Neptune - Ascendant - Inconjunct (150°), precision 0°/81%

    • Precision: 0°, which is great.
    • Aspect type: Inconjunct is the lowest in aspect hierarchy.
    • Planetary hierarchy: Neptune is an outer planet, and Ascendant is a major point. But since the aspect type is low, this might not rank high.
  3. Transiting Mercury - Natal Sun - Inconjunct (150°), precision 1°/78%

    • Precision: 1°, which is just over 1°.
    • Aspect type: Inconjunct again, which is low.
    • Planetary hierarchy: Mercury and Sun are both inner planets. But the aspect is low.
  4. Transiting Uranus - Ascendant - Square (90°), precision 0°/88%

    • Precision: 0°, excellent.
    • Aspect type: Square is better than Inconjunct but not as good as Conjunction or Opposition.
    • Planetary hierarchy: Uranus is outer, Ascendant is major. So mixed.
  5. Transiting Jupiter - Midheaven - Sextile (60°), precision 1°/76%

    • Precision: 1°, just over the first threshold.
    • Aspect type: Sextile is lower in hierarchy.
    • Planetary hierarchy: Both are outer planets and a significant point. Not great.
  6. Transiting Jupiter - Natal Venus - Conjunction (0°), precision 1°/89%

    • Precision: 1°, close but not top.
    • Aspect type: Conjunction is the best aspect type here.
    • Planetary hierarchy: Both are outer planets, so maybe lower priority compared to inner ones.
  7. Transiting Saturn - Natal Venus - Trine (120°), precision 1°/93%

    • Precision: 1°, good but not top.
    • Aspect type: Trine is mid-tier.
    • Planetary hierarchy: Saturn is outer, so maybe lower.
  8. Transiting Mercury - Natal Saturn - Trine (120°), precision 0°/100%

    • Precision: 0°, excellent.
    • Aspect type: Trine is mid-tier.
    • Planetary hierarchy: Mercury is inner, Saturn outer. So mixed.
  9. Transiting Mercury - Natal Mars - Square (90°), precision 3°/63%

    • Precision: 3°, which is less than ideal.
    • Aspect type: Square is better than some but not top.
    • Planetary hierarchy: Both inner planets, so good.
  10. Transiting Venus - Natal Sun - Inconjunct (150°), precision 2°/62%

    • Precision: 2°, which is over 1°.
    • Aspect type: Inconjunct again, low.
    • Planetary hierarchy: Both inner planets, but aspect is low.
  11. Transiting Saturn - Midheaven - Sextile (60°), precision 1°/67%

    • Precision: 1°, okay.
    • Aspect type: Sextile is lower.
    • Planetary hierarchy: Outer and significant point.
  12. Transiting Uranus - Natal Mars - Square (90°), precision 3°/68%

    • Precision: 3°, not great.
    • Aspect type: Square is better than some but aspect precision is low.
    • Planetary hierarchy: Outer planet, so maybe lower.
  13. Transiting Saturn - Natal Sun - Square (90°), precision 2°/72%

    • Precision: 2°, over 1°.
    • Aspect type: Square is good but not top.
    • Planetary hierarchy: Both outer planets.
  14. Transiting Mercury - Natal Venus - Trine (120°), precision 2°/76%

    • Precision: 2°, so okay.
    • Aspect type: Trine mid-tier.
    • Planetary hierarchy: Inner planets, so good.
  15. Transiting Saturn - Natal Mars - Inconjunct (150°), precision 2°/60%

    • Precision: 2°, okay.
    • Aspect type: Inconjunct, low.
    • Planetary hierarchy: Both outer planets.
  16. Transiting Venus - Natal Saturn - Trine (120°), precision 2°/70%

    • Precision: 2°, okay.
    • Aspect type: Trine mid-tier.
    • Planetary hierarchy: Inner and outer, so mixed.
  17. Transiting Jupiter - Natal Saturn - Conjunction (0°), precision 1°/87%

    • Precision: 1°, close.
    • Aspect type: Conjunction is top aspect type.
    • Planetary hierarchy: Outer planets, but conjunction is strong.
  18. Transiting Saturn - Natal Saturn - Trine (120°), precision 1°/83%

    • Precision: 1°, good.
    • Aspect type: Trine mid-tier.
    • Planetary hierarchy: Both outer planets.
  19. Transiting Saturn - Natal Moon - Square (90°), precision 4°/50%

    • Precision: 4°, which is not great.
    • Aspect type: Square is good but aspect precision is low.
    • Planetary hierarchy: Outer and inner planets.
  20. Transiting Neptune - Natal Venus - Trine (120°), precision 4°/54%

    • Precision: 4°, not good.
    • Aspect type: Trine mid-tier.
    • Planetary hierarchy: Both outer planets.
  21. Transiting Moon - Natal Mercury - Opposition (180°), precision 4°/53%

    • Precision: 4°, low.
    • Aspect type: Opposition is high but aspect precision is too off.
    • Planetary hierarchy: Inner and inner planets, which is good.
  22. Transiting Mars - Natal Uranus - Opposition (180°), precision 4°/53%

    • Precision: 4°, low.
    • Aspect type: Opposition high but aspect precision bad.
    • Planetary hierarchy: Outer and inner planets.

Now, to rank these aspects based on the criteria:

First, prioritize aspect precision. So aspects with less than 1° are top candidates. Let's see which ones meet that:

  • #1: Transiting Mercury (0°) - Natal Midheaven (Opposition)
  • #6: Transiting Jupiter (1°) - Natal Venus (Conjunction)
  • #8: Transiting Mercury (0°) - Natal Saturn (Trine)
  • #17: Transiting Jupiter (1°) - Natal Saturn (Conjunction)

Wait, I think I made a mistake earlier. Let me check again.

Looking back:

#1: precision 0°, so top. #6: precision 1°, which is >=1 but <3. #8: precision 0°, top. #17: precision 1°, same as #6.

So among these, #1 and #8 have the best precision (0°). Then #6 and #17 are next with 1°.

Next, looking at aspect type. Conjunction is better than Opposition. So if two aspects have similar precision but one is a conjunction and another is opposition, the conjunction would rank higher.

Now, let's go through each aspect:

  1. #1: Transiting Mercury - Midheaven (Opposition), 0° precision.

    • Precision: Top.
    • Aspect type: Opposition (high).
    • Planetary hierarchy: Inner planet and Midheaven.
  2. #8: Transiting Mercury - Natal Saturn (Trine), 0° precision.

    • Precision: Top.
    • Aspect type: Trine (mid-tier).
    • Planetary hierarchy: Inner and outer.
  3. #6: Transiting Jupiter - Natal Venus (Conjunction), 1° precision.

    • Precision: Good but not top.
    • Aspect type: Conjunction (best aspect type).
    • Planetary hierarchy: Both outer planets.
  4. #17: Transiting Jupiter - Natal Saturn (Conjunction), 1° precision.

    • Precision: Good.
    • Aspect type: Conjunction (same as #6).
    • Planetary hierarchy: Both outer planets.
  5. #4: Transiting Uranus - Ascendant (Square), 0° precision.

    • Precision: Top.
    • Aspect type: Square (good but not top).
    • Planetary hierarchy: Outer and major point.

Wait, I'm getting a bit confused. Let me try to list them all with their criteria:

  • #1: P=0°, A=Opposition, PH=Inner/Midheaven
  • #6: P=1°, A=Conjunction, PH=Outer/Inner
  • #8: P=0°, A=Trine, PH=Inner/Outer
  • #17: P=1°, A=Conjunction, PH=Outer/Outer
  • #4: P=0°, A=Square, PH=Outer/Midheaven

So, the top aspects based on precision would be #1, #8, and #4 (all 0°). Then comes #6 and #17 with 1°.

Within the 0° group:

  • #1: Aspect type is Opposition.
  • #8: Trine.
  • #4: Square.

Since aspect type is next in criteria after precision, Conjunction > Opposition > Square > etc. But within the 0° group, none have a Conjunction except perhaps if I made a mistake earlier. Let me check the list again.

Looking back at the aspects:

Wait, #6 and #17 are conjunctions but with 1° precision. So in terms of priority:

The top three would be the ones with 0° precision: #1 (Opp), #4 (Square), #8 (Trine). But since aspect type matters, maybe #4 comes after #1 because Square is higher than Trine.

But wait, #1 is an Opposition but with 0° precision. So it's better to have a high aspect type even if the precision is 0°? Or does the lower aspect type make it lower?

I think precision is first. So among the top three (all 0°), we need to rank them based on aspect type.

Opposition (as in #1) is higher than Square (#4) which is higher than Trine (#8). So within 0°, #1 > #4 > #8.

Then next are those with 1° precision:

#6: Conjunction (best aspect type but outer planets) #17: Conjunction (same as above)

So between #6 and #17, both have the same aspect type. So we might look at planetary hierarchy. #6 is Jupiter (outer) and Venus (inner). #17 is Jupiter and Saturn (both outer). Since inner planets are higher, maybe #6 is better than #17.

Then after that, perhaps aspects with 2° or more, but since the top five should be within the highest precision, I think we can stop here.

Wait, but in the initial list, there's also:

#9: Transiting Mercury - Natal Mars (Square), precision 3°/63%. So it's over 1°, so not in the top group.

So putting it all together:

Top 5 would be:

  1. #1: Transiting Mercury - Midheaven - Opposition
  2. #4: Transiting Uranus - Ascendant - Square
  3. #8: Transiting Mercury - Natal Saturn - Trine
  4. #6: Transiting Jupiter - Natal Venus - Conjunction
  5. #17: Transiting Jupiter - Natal Saturn - Conjunction

Wait, but I'm not sure if that's correct because maybe the planetary hierarchy should affect this more.

Let me think again:

#1: Mercury (inner) and Midheaven (major point). So high. #4: Uranus (outer) and Ascendant (major point). Slightly lower than #1 due to outer planet but higher aspect type than others with 0°. #8: Mercury (inner) and Saturn (outer). Aspect type is Trine, which is lower than Square in #4.

Wait, no. In terms of aspect types, after precision, Conjunction > Opposition > Square > Trine. So within the 0° group:

  • #1: Opp
  • #4: Square
  • #8: Trine

But since #6 and #17 are Conjunctions (best aspect type) but with 1° precision, which is worse than 0°, they might come after the 0° aspects.

So maybe the top five would be:

  1. #1 (Opp), 0°
  2. #4 (Square), 0°
  3. #8 (Trine), 0°
  4. #6 (Conj), 1°
  5. #17 (Conj), 1°

But perhaps the planetary hierarchy could bump some of these up or down.

Alternatively, maybe it's better to first sort by precision, then aspect type, then planetary hierarchy.

So:

Group 1: Precision 0°

  • #1: Opp (Mercury-Midheaven)
  • #4: Square (Uranus-Ascendant)
  • #8: Trine (Mercury-Saturn)

Group 2: Precision 1°

  • #6: Conj (Jupiter-Venus)
  • #17: Conj (Jupiter-Saturn)
  • Also, any others with 1°?

No, only these two.

Within Group 1:

Sort by aspect type descending: #1 (Opp) > #4 (Square) > #8 (Trine)

So top three are #1, #4, #8

Then in Group 2, the Conjunctions. Since both are 1° precision and same aspect type.

Sort them based on planetary hierarchy: inner planet is higher. So #6 involves Venus (inner), while #17 involves Saturn (outer). So #6 might be ranked higher than #17.

Thus, top five:

  1. #1
  2. #4
  3. #8
  4. #6
  5. #17

Wait, but in the initial list, #9 is precision 3°, which is beyond our top group.

Alternatively, if we think of aspect type as more important than planetary hierarchy after precision, maybe:

But I'm getting a bit stuck. Let me try to write down each aspect with their criteria:

Aspect Precision (P) Aspect Type (A) Planetary Hierarchy (PH)
#1 0° Opp Inner & Midheaven
#4 0° Square Outer & Ascendant
#8 0° Trine Inner & Outer
#6 1° Conj Outer & Inner
#17 1° Conj Outer & Outer

So, when ranking:

  • Highest priority: P=0°. Among these, sort by A descending (Conj > Opp > Square > Trine). But within P=0°, the aspect types are Opp, Square, Trine.

Wait, but none of the 0° aspects have a Conjunction. So the top three would be:

  1. #1: P=0°, A=Opp
  2. #4: P=0°, A=Square
  3. #8: P=0°, A=Trine

Then next are those with P=1°.

Within them, both have Conj as aspect type, so higher than others with worse aspect types but better precision.

So:

  1. #6: P=1°, A=Conj, PH=Outer & Inner
  2. #17: P=1°, A=Conj, PH=Outer & Outer

But between #6 and #17, since #6 involves an inner planet (Venus), it might be more significant than #17 which is both outer planets.

Thus, the top five would be:

  1. #1
  2. #4
  3. #8
  4. #6
  5. #17

Alternatively, if we consider that aspect type after precision, then the order within 0° is Opp > Square > Trine, so as above.

I think this makes sense.

Here's a concise ranking of the top five aspects based on precision, aspect type, and planetary hierarchy:

  1. Transiting Mercury - Midheaven (Opposition):

    • Precision: 0°
    • Aspect Type: Opposition
    • Planetary Hierarchy: Inner planet & Midheaven
  2. Transiting Uranus - Ascendant (Square):

    • Precision: 0°
    • Aspect Type: Square
    • Planetary Hierarchy: Outer planet & Ascendant
  3. Transiting Mercury - Natal Saturn (Trine):

    • Precision: 0°
    • Aspect Type: Trine
    • Planetary Hierarchy: Inner planet & Outer planet
  4. Transiting Jupiter - Natal Venus (Conjunction):

    • Precision: 1°
    • Aspect Type: Conjunction
    • Planetary Hierarchy: Outer planet & Inner planet
  5. Transiting Jupiter - Natal Saturn (Conjunction):

    • Precision: 1°
    • Aspect Type: Conjunction
    • Planetary Hierarchy: Both outer planets
FAILED format FSSSSS

rank_bar_chart(aspect_table, 'Aspect-Rank') # previous top-5 from the same list (without fixed criteria) [x[0] for x in res1] ['transiting-mercury-natal-saturn-trine', 'transiting-uranus-ascendant-square', 'transiting-saturn-natal-venus-trine', 'transiting-mercury-midheaven-oppos', 'transiting-jupiter-natal-venus-conjunct'] # fixed criteria top-5 res2 = get_consensus(aspect_table)[:num] [x[0] for x in res2] ['transiting-mercury-midheaven-oppos', 'transiting-mercury-natal-saturn-trine', 'transiting-uranus-ascendant-square', 'transiting-saturn-natal-venus-trine', 'transiting-jupiter-natal-venus-conjunct'] print(f'consensus: {consensus_score({k:v for k,v in aspect_table.items() if k in [x[0] for x in res2]}):.2%}') consensus: 69.71% set([x[0] for x in res1]) & set([x[0] for x in res2]) {'transiting-jupiter-natal-venus-conjunct', 'transiting-mercury-midheaven-oppos', 'transiting-mercury-natal-saturn-trine', 'transiting-saturn-natal-venus-trine', 'transiting-uranus-ascendant-square'} for s,m in zip(ranking_score(aspect_table, num), team): print(f'{m:>15}:{s:>7.2%}') llama3.1: 40.00% gemma3:12b: 40.00% phi4: 40.00% gpt-oss: 40.00% deepseek-r1:14b: 40.00%

Yes, indeed, consensus looks better. Let's go for the stats: random dates and a random number to pick from the list.

success = [[] for _ in range(len(team))] madeup = [[] for _ in range(len(team))] size = [] total = [] consensus = [] score = [] failed = [0] * len(team) tokens = [0] * len(team) timer = [0] * len(team) # main chart chart = positions_to_text(natal, object_filter, prefix='Natal ') for n in range(num_rounds): # pick random date transit date = f'{np.random.randint(1950, 2030)}-{np.random.randint(1, 12):>02}-{np.random.randint(1, 25):>02}' transit = get_day_chart(date, houses=natal['houses'], objects=object_filter) positions = chart + [''] + positions_to_text(transit, object_filter, prefix='Transiting ') # make validation table with target ranking order aspects = aspect_rank([a for a in get_transit_aspects(natal, transit) if a['strength'] >= 0.5 and a['aspect'] in aspect_filter]) aspects_text = transit_to_text(natal, transit, aspects) aspect_table = {aspect_hash(a):[0] * len(team) for a in aspects_text} total.append(len(aspects)) # pick the top size num = np.random.randint(1, len(aspects)) size.append(num) print(f'\n--------------------------------------------------- {date} >>{len(aspects)}:{num}<< --- {n + 1}') for i, model in enumerate(team): print(f'===================================== {model}') output = read_positions(model, aspects_ranking_prompt, aspects_text, num=num, show_output=False) top, criteria, num_in_tokens, num_out_tokens, tm = output sc = mu = 0 fl = int(len(top) != num) for k, key in enumerate([aspect_hash(a) for a in top]): if not key in aspect_table: if key[0].isalpha() and 5 >= len(key.split('-')) >= 4: print('M', end='') # made-up aspect mu += 1 else: print('F', end='') # failed format fl = 1 continue if aspect_table[key][i] > 0: print('D', end='') # duplicate continue print('S', end='') # success aspect_table[key][i] = k + 1 sc += 1 success[i].append(sc/num) madeup[i].append(mu/num) failed[i] += fl tokens[i] += num_out_tokens timer[i] += tm print('.' * (len(aspects) - len(top))) print(f'EXTRACTION success: {sc/num:>7.2%}') top = get_consensus(aspect_table)[:num] consensus.append(consensus_score({k:v for k,v in aspect_table.items() if k in [x[0] for x in top]})) score.append(ranking_score(aspect_table, num)) print(f'\nCONSENSUS score: {consensus[-1]:.2%}') --------------------------------------------------- 2009-11-03 >>25:11<< --- 1 ===================================== llama3.1 SSSSSSSSSSS.............. EXTRACTION success: 100.00% ===================================== gemma3:12b SSSSSSSSSSS.............. EXTRACTION success: 100.00% ===================================== phi4 SSSSSSSSSSS.............. EXTRACTION success: 100.00% ===================================== gpt-oss SSSSSSSSSSS.............. EXTRACTION success: 100.00% ===================================== deepseek-r1:14b SSSSSSSSSSS.............. EXTRACTION success: 100.00% CONSENSUS score: 41.75% --------------------------------------------------- 2013-09-17 >>21:10<< --- 2 ===================================== llama3.1 MSSSSSSSSS........... EXTRACTION success: 90.00% ===================================== gemma3:12b SSSSSSSSSS........... EXTRACTION success: 100.00% ===================================== phi4 SMSSSSSSSS........... EXTRACTION success: 90.00% ===================================== gpt-oss SSSSSSSSSS........... EXTRACTION success: 100.00% ===================================== deepseek-r1:14b FAILED format FFFFFFFFFF........... EXTRACTION success: 0.00% CONSENSUS score: 39.85% --------------------------------------------------- 1962-05-01 >>21:8<< --- 3 ===================================== llama3.1 SSSSSSSS............. EXTRACTION success: 100.00% ===================================== gemma3:12b SSSSSSSS............. EXTRACTION success: 100.00% ===================================== phi4 SSSSSSSS............. EXTRACTION success: 100.00% ===================================== gpt-oss SSSSSSSS............. EXTRACTION success: 100.00% ===================================== deepseek-r1:14b FAILED format FFSSSSFSF............ EXTRACTION success: 62.50% CONSENSUS score: 57.40% --------------------------------------------------- 2016-07-18 >>25:20<< --- 4 ===================================== llama3.1 SSSSSSSSSSSSSSSSSSSS..... EXTRACTION success: 100.00% ===================================== gemma3:12b SSSSSSSSSSSSSSSSSSSS..... EXTRACTION success: 100.00% ===================================== phi4 SSSSSSSSSSSSSSSSSSSSS.... EXTRACTION success: 105.00% ===================================== gpt-oss SSSSSSSSSSSSSSSSSSSS..... EXTRACTION success: 100.00% ===================================== deepseek-r1:14b SSSSSSSSSSSSSSSSSSMM..... EXTRACTION success: 90.00% CONSENSUS score: 28.36% --------------------------------------------------- 1983-07-23 >>16:8<< --- 5 ===================================== llama3.1 SSSSSSSS........ EXTRACTION success: 100.00% ===================================== gemma3:12b SSSSSSSS........ EXTRACTION success: 100.00% ===================================== phi4 SSSSSSSS........ EXTRACTION success: 100.00% ===================================== gpt-oss SSSSSSSS........ EXTRACTION success: 100.00% ===================================== deepseek-r1:14b SSSSSSSS........ EXTRACTION success: 100.00% CONSENSUS score: 54.64% --------------------------------------------------- 1999-07-05 >>19:16<< --- 6 ===================================== llama3.1 SSSSSSSSSSMMSS..... EXTRACTION success: 75.00% ===================================== gemma3:12b SSSSSSSSSSSSSSSS... EXTRACTION success: 100.00% ===================================== phi4 SSSSSSSSSSSSSSSSS.. EXTRACTION success: 106.25% ===================================== gpt-oss SSSSSSSSSSSSSSSS... EXTRACTION success: 100.00% ===================================== deepseek-r1:14b SSSSSSSSSSSSSSSS... EXTRACTION success: 100.00% CONSENSUS score: 36.57% --------------------------------------------------- 2010-09-18 >>21:5<< --- 7 ===================================== llama3.1 SSSSS................ EXTRACTION success: 100.00% ===================================== gemma3:12b SSSSS................ EXTRACTION success: 100.00% ===================================== phi4 SSSSS................ EXTRACTION success: 100.00% ===================================== gpt-oss SSSSS................ EXTRACTION success: 100.00% ===================================== deepseek-r1:14b SSSSS................ EXTRACTION success: 100.00% CONSENSUS score: 59.83% --------------------------------------------------- 2028-09-08 >>16:1<< --- 8 ===================================== llama3.1 SS.............. EXTRACTION success: 200.00% ===================================== gemma3:12b SSS............. EXTRACTION success: 300.00% ===================================== phi4 S............... EXTRACTION success: 100.00% ===================================== gpt-oss S............... EXTRACTION success: 100.00% ===================================== deepseek-r1:14b S............... EXTRACTION success: 100.00% CONSENSUS score: 56.38% --------------------------------------------------- 1981-10-02 >>26:24<< --- 9 ===================================== llama3.1 SSSSSSSSSSSSSSSMSSSSSSSS.. EXTRACTION success: 95.83% ===================================== gemma3:12b SSSSSSSSSSSSSSSS.......... EXTRACTION success: 66.67% ===================================== phi4 SSSSSSSSSSSSSSSSSSSSSMS... EXTRACTION success: 91.67% ===================================== gpt-oss SSSSSSSSSSSSSSSSSSSSSSSS.. EXTRACTION success: 100.00% ===================================== deepseek-r1:14b SSSSSSMSSSSSSSSSSSSSSS.... EXTRACTION success: 87.50% CONSENSUS score: 17.16% --------------------------------------------------- 1975-11-14 >>17:14<< --- 10 ===================================== llama3.1 SSSSSSSSDSSSSS... EXTRACTION success: 92.86% ===================================== gemma3:12b SSSMSSMSSSSSSS... EXTRACTION success: 85.71% ===================================== phi4 SSSSSSSSSSSSSS... EXTRACTION success: 100.00% ===================================== gpt-oss SSSSSSSSSSSSSS... EXTRACTION success: 100.00% ===================================== deepseek-r1:14b SSSSSSSSSSSSSS... EXTRACTION success: 100.00% CONSENSUS score: 45.21% --------------------------------------------------- 2008-08-04 >>22:18<< --- 11 ===================================== llama3.1 SSSSSSSSSSSSSSSSSS.... EXTRACTION success: 100.00% ===================================== gemma3:12b SSSSSSSSSSSSSSSSSM.... EXTRACTION success: 94.44% ===================================== phi4 SSSSSSSSSSSSSSSSSS.... EXTRACTION success: 100.00% ===================================== gpt-oss SSSSSSSSSSSSSSSSSS.... EXTRACTION success: 100.00% ===================================== deepseek-r1:14b SSSSSSSSSSSSSMS....... EXTRACTION success: 77.78% CONSENSUS score: 39.26% --------------------------------------------------- 1960-08-23 >>17:14<< --- 12 ===================================== llama3.1 SSSSSSSSSSSSFS... EXTRACTION success: 92.86% ===================================== gemma3:12b SSSSSSSSSSSSSS... EXTRACTION success: 100.00% ===================================== phi4 SSSSSSSSSSSSSS... EXTRACTION success: 100.00% ===================================== gpt-oss MSSSSSSSSSSSSS... EXTRACTION success: 92.86% ===================================== deepseek-r1:14b SSSSSSSSSSSSSS... EXTRACTION success: 100.00% CONSENSUS score: 54.15%

As we can see the failures are quite rare.

plot_test_result(total, size, madeup, success, consensus)

Both, hallucination and consensus, go down with either space crowdedness or a selection size in a reasonable way – we actually can trust this task output.

results['consensus'].append(np.median(consensus)) for i, model in enumerate(team): results[model].append({ 'success': min(1, sum(success[i])/num_rounds), 'madeup': sum(madeup[i])/(sum(madeup[i]) + sum(success[i]) or 1), 'failed': failed[i]/num_rounds, 'score': sum([x[i] for x in score])/num_rounds, '#tokens': tokens[i]/num_rounds, '%time': timer[i]/sum(timer) }) print(" ".join([f"{model:>15}"] + [f"{k}:{v:6,.0f}" if k=='#tokens' else f"{k}:{v:>7.2%}" for k,v in results[model][-1].items()])) llama3.1 success:100.00% madeup: 2.09% failed: 25.00% score: 62.00% #tokens: 449 %time: 5.14% gemma3:12b success:100.00% madeup: 1.45% failed: 16.67% score: 55.12% #tokens: 334 %time: 6.33% phi4 success: 99.41% madeup: 1.17% failed: 25.00% score: 71.54% #tokens: 635 %time: 11.63% gpt-oss success: 99.40% madeup: 0.60% failed: 0.00% score: 72.00% #tokens: 3,512 %time: 43.72% deepseek-r1:14b success: 84.81% madeup: 1.90% failed: 33.33% score: 65.71% #tokens: 1,765 %time: 33.18%

Take-away

Let's see all the tests side-by-side.

fig, ax = plt.subplots(1, 6, figsize=(9.4, 3)) fig.set_facecolor('none') metrics = list(results['gpt-oss'][0].keys()) for n in range(len(metrics)): for i,m in enumerate(team): norm = 1000 if metrics[n] == '#tokens' else 1 ax[n].plot([results[m][j][metrics[n]]/norm for j in range(4)], marker='s', label=m) ax[n].set_xticks([]) ax[n].set_xlim([-0.25, 3.25]) ax[n].set_yticks([]) ax[n].set_title(metrics[n]) ax[n].set_facecolor('none') ax[3].plot([1, 2, 3], results['consensus'][:3], color='cyan', marker='o', label='consensus') ax[3].legend(bbox_to_anchor=(4.25, 0.5), loc='center', frameon=False) plt.show()
  1. Our team does not possess a functional understanding of the meaning <-> geometry projection in astrology. (Even gpt despite impressive successful streaks, failed to demonstrate consistency.)

  2. LLMs are getting overwhelmed with excessive details -- performance degrades with rising number of choices, and choice criteria complexity.

  3. Another "fresh" attempt is more efficient than a fix via feedback loop in terms of tokens/time (...so much for intelligence...)

If our goal is to deliver automated reading which looks okey to a mediocre human astrologer we need to:

  • add planetary dignities/modalities to the position list (inject important information directly where it's needed)
  • provide precompiled ranked and filtered list of aspects
  • remove all non-essential details (reduce the noise)
  • add some validation layer to catch and fix eventual "typos"

Basically, we do the thinking, LLMs follow with talking when we consider it's safe...

Our goal, however, was the archetypal group theory... or something like that 🫤

[ download ipynb ]