Skip to content

Reposition as an AI distressed-credit committee for OSS launch#1

Merged
RahulModugula merged 1 commit into
mainfrom
oss-launch-credit-committee
Jun 27, 2026
Merged

Reposition as an AI distressed-credit committee for OSS launch#1
RahulModugula merged 1 commit into
mainfrom
oss-launch-credit-committee

Conversation

@RahulModugula

Copy link
Copy Markdown
Owner

Turn the credit committee from a single hardcoded example into a reusable tool, and reframe the project around it as the wedge for a public launch.

Make credit a real tool:

  • Situation.from_dict/from_file loaders (YAML + JSON) in models.py, with friendly field aliases, timeline shorthand, and graceful degradation.
  • quantai-credit CLI (run / new / list) + console entry point; ATI ported to situations/ati_2023.yaml as the single source of truth + annotated TEMPLATE.yaml.
  • Two more sourced, caveated examples: serta_2020 (uptier / liability management) and hertz_2020 (asset-coverage / fleet-ABS).
  • 24 new tests covering the loader, round-trips, and every bundled file.

Lower friction:

  • Make src/agents lazily import the equity orchestrator (PEP 562) so the credit path no longer pulls torch/pandas/etc. The committee now runs on litellm + pyyaml alone (requirements-credit.txt).

Launch polish:

  • Lead the README with the credit committee; demote equity to a secondary proof of the shared architecture; add a rendered terminal hero SVG.
  • Neutralize job-application framing: remove TECHNICAL_PORTFOLIO.md, add a neutral docs/ARCHITECTURE.md; drop "interview demo" language.
  • "Add a situation" documented as a good first contribution.

Turn the credit committee from a single hardcoded example into a reusable
tool, and reframe the project around it as the wedge for a public launch.

Make credit a real tool:
- Situation.from_dict/from_file loaders (YAML + JSON) in models.py, with
  friendly field aliases, timeline shorthand, and graceful degradation.
- quantai-credit CLI (run / new / list) + console entry point; ATI ported
  to situations/ati_2023.yaml as the single source of truth + annotated
  TEMPLATE.yaml.
- Two more sourced, caveated examples: serta_2020 (uptier / liability
  management) and hertz_2020 (asset-coverage / fleet-ABS).
- 24 new tests covering the loader, round-trips, and every bundled file.

Lower friction:
- Make src/agents lazily import the equity orchestrator (PEP 562) so the
  credit path no longer pulls torch/pandas/etc. The committee now runs on
  litellm + pyyaml alone (requirements-credit.txt).

Launch polish:
- Lead the README with the credit committee; demote equity to a secondary
  proof of the shared architecture; add a rendered terminal hero SVG.
- Neutralize job-application framing: remove TECHNICAL_PORTFOLIO.md, add a
  neutral docs/ARCHITECTURE.md; drop "interview demo" language.
- "Add a situation" documented as a good first contribution.
Copilot AI review requested due to automatic review settings June 27, 2026 23:38
@RahulModugula RahulModugula merged commit 9eb4b29 into main Jun 27, 2026
3 of 4 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR reframes the project around a reusable “AI distressed-credit committee” tool for an OSS launch, turning the previously hardcoded ATI example into a data-driven workflow (YAML/JSON situations + CLI), adding more bundled case studies, and updating docs/packaging to support this new entry point.

Changes:

  • Add a Situation / tranche loader (from_dict, from_file) with normalization + a new quantai-credit CLI (run/new/list).
  • Bundle an annotated situation template plus multiple sourced example situations (ATI, Serta, Hertz) and add tests to keep all shipped situations valid.
  • Reposition documentation/README around the credit committee, add architecture docs + rendered terminal hero SVG, and make src/agents orchestrator import lazy to reduce dependency friction for credit-only usage.

Reviewed changes

Copilot reviewed 17 out of 19 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
uv.lock Adds PyYAML to the resolved lock dependencies.
tests/test_credit_situation_loader.py New tests covering situation parsing, normalization, round-trips, and validation of bundled YAML situations.
TECHNICAL_PORTFOLIO.md Removes job-application/portfolio framing document.
src/agents/init.py Implements PEP 562 lazy import for the equity orchestrator to keep credit-only usage lightweight.
scripts/render_demo_svg.py Adds a script to generate the README terminal-session SVG via Rich.
requirements-credit.txt Introduces a minimal dependency set for running the credit committee only.
README.md Repositions the README around the credit committee, adds CLI usage, and includes the hero SVG.
pyproject.toml Adds pyyaml dependency, installs quantai-credit console script, and packages examples in the wheel.
examples/distressed/situations/TEMPLATE.yaml Adds an annotated template for authoring new distressed-credit situations.
examples/distressed/situations/serta_2020.yaml Adds a bundled worked example situation (Serta 2020 uptier).
examples/distressed/situations/hertz_2020.yaml Adds a bundled worked example situation (Hertz 2020 Ch. 11 / asset-coverage).
examples/distressed/situations/ati_2023.yaml Moves ATI situation data into YAML as the canonical worked example.
examples/distressed/run.py Adds the quantai-credit CLI implementation and subcommands.
examples/distressed/models.py Adds dict/file loaders, timeline normalization, and serialization helpers for situations/tranches.
examples/distressed/mock_mode.py Updates copy to remove interview-specific framing and broaden mock-mode use cases.
examples/distressed/ati_2023.py Refactors ATI builder to load from the new YAML single source of truth.
docs/assets/credit_committee_demo.svg Adds the rendered terminal hero SVG for inline display on GitHub.
docs/ARCHITECTURE.md Adds a new architecture/design doc centered on the credit committee wedge.
CONTRIBUTING.md Adds “good first contribution” guidance for adding new YAML situation examples.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread pyproject.toml
Comment on lines 59 to +60
[tool.hatch.build.targets.wheel]
packages = ["src"]
packages = ["src", "examples"]
Comment on lines +95 to +100
raw_tranches = d.get("capital_structure") or []
if not isinstance(raw_tranches, list):
raise ValueError("'capital_structure' must be a list of tranches")
cap_structure = [CapitalStructureTranche.from_dict(t) for t in raw_tranches]

timeline = _normalize_timeline(d.get("timeline") or [])
capital_structure=cap_structure,
operating_metrics=dict(d.get("operating_metrics") or {}),
current_position=str(d.get("current_position", "No existing position")),
key_risks=list(d.get("key_risks") or []),
Comment thread src/agents/__init__.py
Comment on lines +34 to +37
if name == "run_full_analysis":
from src.agents.orchestrator import run_full_analysis

return run_full_analysis
Comment on lines +59 to +60
# Chronological events. Each entry is a {date, event} pair. Mark the committee
# meeting date with the event text — the agents key off "DECISION_POINT".
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants