Hi, I'm Sadra! I work on making AI a better friend to humans. I also co-lead an open-source team that builds scientific tools, mostly because we wanted those tools to exist and nobody was making them. The rest of my time goes to things I'm not good at yet, and every once in a while one of those turns into a story.

I have two theses, in a sense. Click either bar to read more:

AI Integration Challenges

I work on how AI fits into the way people already work. One question keeps coming back: what is the part of a task that AI cannot do, and how can AI help the human do that part better? I've been chasing it in domains where LLMs arrived quickly and fit awkwardly: developers working with code agents, decision-makers leaning on AI advisors, patients trying to reconcile contradictory medical advice, and people asking the same question from very different starting points of knowledge.

I'm in my third year in CS PhD, and I want to keep adding domains until I can put down a taxonomy of these challenges, plus a framework for where AI belongs in a workflow and how it should behave once it's there. I get to do all of this with the Adaptive Computing Experience (ACE) Lab (Souti Chattopadhyay's lab @ GCS) and [CUTE LAB NAME] (Jonathan May's lab @ ISI).

Some of my papers are below. Click the title for the short version:

[ICSE26] Cognitive Biases in LLM-Assisted Software Development, Xinyi Zhou, Zeinabsadat Saghi, Sadra Sabouri, Rahul Pandita, Mollie McGuire, Souti Chattopadhyay

[Paper]

We watched 36 developers work and found that 48.8% of their programming actions were biased, and more than half of those came out of an interaction with the AI. What we ended up with is a validated taxonomy of 15 kinds of cognitive bias, and a set of things developers and tool builders can do about them.

[UIST25] Beyond the Page: Enriching Academic Paper Reading with Social Media Discussions, Run Huang, Anna Katherine Zhao, Zeinabsadat Saghi, Sadra Sabouri, Souti Chattopadhyay

[Paper]

A paper is formal and finished, while the actual conversation about it happens on social media. We built a prototype that puts the two side by side as you read. In a formative study with eight researchers, we looked at how much this widens readers view of a paper before it turns into just another feed to get lost in.

[VL/HCC25] Exploring the Challenges and Opportunities of AI-assisted Codebase Generation, Philipp Eibl, Sadra Sabouri, Souti Chattopadhyay

[Paper]

We looked at "vibe-coding": building software by prompting an LLM over and over instead of writing the code yourself. The interesting part is that the borders between having the idea, writing it, and debugging it stop existing, which might make building software a more collaborative thing than it has been.

[ICSE25] Trust dynamics in AI-assisted development: Definitions, factors, and implications, Sadra Sabouri, Philipp Eibl, Xinyi Zhou, Morteza Ziyadi, Nenad Medvidovic, Lars Lindemann, Souti Chattopadhyay

[Paper]

Through surveys and watching people code with AI, we asked what developers actually mean when they say they trust a code suggestion. They decide mostly on whether they can read it and whether it looks correct, but they keep changing their minds afterwards: only 52% of the suggestions survive. We close with four validated guidelines for the people building these tools.

[ACL25] ELI-Why: Evaluating the Pedagogical Utility of Language Model Explanations, Brihi Joshi, Keyu He, Sahana Ramnath, Sadra Sabouri, Kaitlyn Zhou, Souti Chattopadhyay, Swabha Swayamdipta, Xiang Ren

[Paper] [Code] [Data]

We built ELI-Why, a benchmark of 13.4K "Why" questions, to see whether language models can explain the same thing differently to a fifth grader and to a graduate student. In two human studies, GPT-4 landed on the intended grade level only about half the time, and its explanations were rated 20% less suitable than ones curated by laypeople. So, not a great teacher yet.

If any of this is close to what you're working on, write to me.

Open World Development

Open-sourcing NLP research is what got us to things like ChatGPT. The same openness now makes it very cheap to produce work that looks convincing and is quietly wrong. That is the Frankenstein-Trojan problem: the monster is one we built ourselves, and since we have no reliable way to evaluate it, it walks straight into our own science unnoticed. I'd rather write artifacts that people can rerun. Software is one of the few domains where nobody has to take your word for anything: no lab, no samples, no budget, you just run the thing on your own machine and see whether you get what I got. That makes it an unusually auditable science, and I don't think we lean on that enough. With a group of friends, I co-founded OpenSciLab to build those tools.

Below is my work grouped by topic: OpenSciLab projects, datasets, and things I built on my own. Click a topic to open it:

Natural Language Processing and Large Language Models
ToCount: Lightweight Token Estimator GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

ToCount estimates how many tokens your text will cost an LLM, using rule-based and ML methods. It's for when you need that number quickly, for a prompt analysis or a token budget, and don't want to load a whole tokenizer to get it.

XNum: Universal Numeral System Converter GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

XNum converts digits between numeral systems (English, Persian, Hindi, Arabic-Indic, Bengali, and more). It finds the numbers inside mixed text and converts only those, leaving the rest of the sentence alone. If you have ever cleaned a Persian text by hand, you know why this exists.

Memor: Managing and Transferring Conversational Memory Across LLMs GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

Everything you tell an LLM stays trapped inside that one environment. Memor keeps the history of your conversations, lets you pick the parts that actually matter, and carry them into a session with a different model. So switching models is less of a fresh start every time.

[JAIAI] naab: A ready-to-use plug-and-play corpus for Farsi, Sadra Sabouri, Elnaz Rahmati, Soroush Gooran, Hossein Sameti Hugging Face

[Paper] [Data]

Lower-resource languages like Farsi need large training data, and back then there was even less of it around :D. naab is an open Farsi corpus that is already cleaned and ready to use: about 130GB, 250 million paragraphs, 15 billion words. The name comes from the Farsi word NAAB, which means pure and high-grade, which is what we were going for.

[ALP@NAACL25] Parsipy: NLP toolkit for historical Persian texts in Python, Farhan Farsi, Parnian Fazel, Sepand Haghighi, Sadra Sabouri, Farzaneh Goshtasb, Nadia Hajipour, Ehsaneddin Asgari, Hossein Sameti

[Paper]

Historical languages are hard to work with: the orthography is complicated, what survived is in fragments, and there is no standard way to represent any of it digitally. Parsipy is a toolkit for reading historical Persian, with modules for tokenization, lemmatization, part-of-speech tagging, phoneme-to-transliteration, and word embeddings.

[LoResMT@NAACL25] PahGen: Generating Ancient Pahlavi Text via Grammar-guided Zero-shot Translation, Farhan Farsi, Parnian Fazel, Farzaneh Goshtasb, Nadia Hajipour, Sadra Sabouri, Ehsaneddin Asgari, Hossein Sameti

[Paper]

Pahlavi (middle Persian) barely exists digitally, and a language with no data is a language on its way out. We built a framework that translates English into Pahlavi by pairing grammar-guided term extraction with zero-shot LLM translation, so the sentences come out correct both syntactically and semantically. We then used it to produce 360 parallel English-Pahlavi texts, all validated by experts.

[DialDoc@ACL22] Docalog: Multi-document Dialogue System using Transformer-based Span Retrieval, Sayed Hesam Alavian, Ali Satvaty, Sadra Sabouri, Ehsaneddin Asgari, Hossein Sameti

[Paper]

Docalog was our entry to the DialDoc-22 (MultiDoc2Dial) shared task, and also my BSc thesis. It is a three-stage pipeline: (1) retrieve the document, (2) predict the answer span, and (3) pick the most likely span out of everything predicted.

This is the one I have a soft spot for. It was my first paper, and the first time I followed an idea all the way from a thesis topic to something with my name on it in a workshop proceedings. It is what pulled me into NLP, and into research and publishing at all. Everything else on this page came after it.

Speech Processing
Nava: OS-Native Sound Engine in Python GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

Nava plays sound in Python with no dependencies, on Windows, macOS, and Linux. That is the whole library. It turns out "just play this file" gets complicated once you want it to work everywhere.

Sharif-Wav2Vec2.0: Wav2Vec2.0 Speech Processing Model Tailored for Farsi Hugging Face

[Model]

The base model, fine-tuned on 108 hours of Farsi audio from Common Voice. We reworked its token set and language models to handle the things Farsi does and English doesn't. More technically, we trained a 5-gram language model with the KenLM toolkit and plugged it into the processor, which noticeably improved our accuracy on online ASR.

Machine Learning (ML)
PyCM: Multi-class confusion matrix library in Python GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

PyCM evaluates classifiers after the fact and supports most per-class and overall statistics you might ask for. It is built for the case where accuracy alone doesn't tell you anything useful and you need the long list of metrics instead.

[JOSS] PyMilo: A Python library for ML I/O, AmirHosein Rostami, Sepand Haghighi, Sadra Sabouri, Alireza Zolanvari GitHub stars GitHub forks PyPI downloads

[Paper] [GitHub] [PyPI]

Saving a model with pickle means shipping executable code and hoping the other side loads it in the same environment you had. PyMilo serializes ML models into a transparent, non-executable format instead, so you can read what you are about to load before you load it, and exchanging a trained model stops being an act of faith.

Network
PyRGG: Python Random Graph Generator GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

PyRGG makes up random graphs for network simulation. It writes several graph file formats (DIMACS-Graph among them) and generates graphs at whatever size you need, with Erdős–Rényi–Gilbert, Erdős–Rényi, or the Stochastic Block Model.

IPSpot: A Python Tool to Fetch the System's IP Address GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

IPSpot tells you your system's IP address and where it looks like you are. Public and private, IPv4 and IPv6, asking several API providers and falling back to the next one when one of them is down.

Art
Samila: A Generative Art Generator, Sadra Sabouri, Sepand Haghighi, Elena Masrour GitHub stars GitHub forks PyPI downloads

[Paper] [GitHub] [PyPI]

Samila makes images by scattering many thousands of points, each one placed by a formula with random parameters. Since the whole thing is random, you can't get the same image back unless you kept its seed. If any of that sounds interesting, take a look at the paper.

Art: ASCII art library for Python GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

Art places special characters and letters so that together they form a shape spread over several lines of text. ASCII art, but as a library you can call.

Human Computer Interaction (HCI)
Nafas: Breathing Gymnastics Application, Sadra Sabouri, Sepand Haghighi GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

Nafas is a set of breathing exercises for people who have been sitting at a computer for too many hours. It walks you through a few different breathing patterns, gets some oxygen back into your system, and makes the rest of the day easier to concentrate through.

mytimer: A Timer for Command Line Enthusiasts GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

MyTimer is a timer you set from the command line, for those of us who would rather not leave the terminal just to find one!

Chemical Data Science
[JPCC] ReaxFF Parameter Set for Boron Clusters and Icosahedral Boron Crystals: Comparison with Density Functional Theory and Machine-Learning Potentials, Amin Ahmadisharaf, Adri CT Van Duin, Bin Liu, Dylan Evans, Sadra Sabouri, Jeffrey Comer GitHub stars GitHub forks

[Paper] [GitHub]

We tuned a set of ReaxFF parameters so that the synthesis conditions for high-quality icosahedral boron crystals can be predicted on a computer instead of found in a lab. Matching the relative energies of small B80 clusters against density functional theory (DFT) data gave us a model that follows nucleation and growth properly, which had been one of the things holding icosahedral boron back from semiconductors and energy storage.

Experimental dataset of electrochemical efficiency of a Direct Borohydride Fuel Cell (DBFC) with Pd/C, Pt/C and Pd decorated Ni–Co/rGO anode catalysts, Sarmin Hamidi, Sadra Sabouri, Sepand Haghighi, Kasra Askari GitHub stars GitHub forks

[Paper] [GitHub]

Impedance and polarization tests for a Direct Borohydride Fuel Cell (DBFC) with Pd/C, Pt/C, and Pd-decorated Ni–Co/rGO anode catalysts. Voltage, power density, and resistance are recorded against the weight percent of sodium borohydride, the applied voltage, and the anode catalyst loading, read off polarization and impedance curves fitted to an equivalent circuit of the cell.

OPEM: Open Source PEM Fuel Cell Simulation Tool GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

The Open-Source PEMFC Simulation Tool (OPEM) evaluates how a proton exchange membrane fuel cell performs and predicts its optimum operating parameters. It bundles both static and dynamic models, and they are generic enough to take operating variables (anode and cathode feed gas, pressure and composition, cell temperature, current density) alongside the cell's own parameters (active area, membrane thickness).

Biomedical Data Science
Drux: Drug Release Analysis Framework GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

Drux simulates and plots drug release profiles from mathematical models. The point of it is that the analysis stays reproducible, and that adding your own model doesn't mean rewriting the framework around it.

OPR: Optimized Primer Design Tool GitHub stars GitHub forks PyPI downloads

[GitHub] [PyPI]

OPR designs, validates, and optimizes primers for PCR, qPCR, and sequencing. It is for biologists and bioinformaticians who would rather not do any of that by hand.

Environmental Data Science
[AGU-WRR24] Representative sample size for estimating saturated hydraulic conductivity via machine learning: A proof-of-concept study, Amin Ahmadisharaf, Reza Nematirad, Sadra Sabouri, Yakov Pachepsky, Behzad Ghanbarian

[Paper]

We took ~18k soil samples from the USKSAT database and measured how the training size changes ML accuracy when estimating saturated hydraulic conductivity (Ks). With XGBoost over repeated random subsets, the learning and validation curves never flattened out, even at that size.

News

July 2026VL/HCC 2026: My paper on the effect of rhetorical patterns for AI advisors got accepted.
Jun 2026I spent the summer as an applied scientist intern on the Microsoft PROSE team, working with Sumit Gulwani.
May 2026PyCon-US 2026: I presented Memor as a poster in Long Beach.
Jan 2026Tinker Grant: Our project on Persian prosody-informed LLMs was funded by Thinking Machines Lab.
Aug 2025VL/HCC 2025: Our paper on pain-points and opportunities of vibe-coding got accepted.
Mar 2025PSF Grant: Nava library awarded funding for OS-based sound engines.
Feb 2025NLnet Grant: PyCM library funded by NGI0 Commons for distance similarity and benchmarking.
Jan 2025ICSE 2025: My paper on trust dynamics of software developers when coding with AI got accepted.
Sep 2024TrelisAI Grant: Received a development micro-grant to build a RESTful API for PyCM.
May 2024PSF Grant: Art library awarded funding to add multi-line and custom font features.

sabourih@usc.edu
GitHub · LinkedIn · Scholar · Twitter
CV (wiki) · CV (pdf) · Stories