Skip to content

Repository files navigation

OASIS Logo

OASIS

Open Agentic Survey Interview System

Self-hosted platform for AI-powered conversational interviews.
Voice and text. Any model provider. Your infrastructure, your data.

Python FastAPI React Tailwind PostgreSQL Redis Docker Pipecat LiteLLM DOI

Website · Docs · FAQ · About · License


What is OASIS?

OASIS lets you run conversational AI interviews from your own infrastructure. Define a study, configure an agent with a system prompt and model, share a link with participants. Transcripts are stored in your database. You control the data, the models, and the pipeline.

Built because existing tools for conversational AI aren't designed for research. Things like follow-up probing, semi-structured interview guides, participant tracking, and study-level organization are afterthoughts in commercial platforms. OASIS puts them front and center.

OASIS launched in March 2026. It works, but it's a young project. If something breaks, open an issue.

Demo

1. Setup a Study

demo1-fast.mp4

2. Create and Configure an Agent

demo2-fast.mp4

3. Collect and Manage Data

demo3-fast.mp4

Features

  • Voice + text interviews. Real-time speech (STT > LLM > TTS) or clean text chat with customizable avatars.
  • Voice-to-voice. Stream audio directly to multimodal models (OpenAI Realtime, Gemini Live) for lower latency.
  • Semi-structured mode. Define question guides with follow-up probes and transition logic. The agent follows a structured backbone while keeping conversation natural.
  • Multi-provider. OpenAI, Google Gemini, Scaleway, Azure, GCP Vertex, or any LiteLLM-compatible provider. Custom model IDs supported.
  • Self-hosted STT/TTS. OpenAI Whisper, Deepgram, ElevenLabs, Cartesia, Scaleway, or bring your own OpenAI-compatible server.
  • Knowledge base (RAG). Upload documents, OASIS chunks and embeds them with pgvector. Agents can retrieve relevant context during interviews. Embeddings work with OpenAI or any self-hosted server.
  • Engagement metrics & adaptive behavior. Per-turn engagement scoring for voice and text (lexical, latency, energy signals), plus an opt-in rule-based policy that can offer breaks, soften questions, or adjust speaking pace — shadow mode by default, every action audited.
  • Research-first. Study-level organization, participant identifiers (random/predefined/self-reported), diarized transcripts, session analytics, data export.
  • Phone interviews (beta). Twilio Media Streams for incoming calls.
  • Self-hosted. Everything in Docker. No data leaves your infra unless you point at external APIs. Optional dashboard auth.

See the FAQ for questions about self-hosting, HPC clusters, European cloud providers, and running with fully open-source models.

Architecture

Five Docker containers on one internal network:

Container Stack Role
Caddy Caddy 2 Reverse proxy, auto HTTPS
Frontend React, Tailwind, Nginx Dashboard + interview widget
Backend FastAPI, Pipecat, LiteLLM WebSocket transport, AI pipeline, REST API
PostgreSQL pgvector/pg16 Configs, transcripts, participant data, embeddings
Redis Redis 7 Sessions, real-time pub/sub, API key overrides
┌──────────────────────────────────────────────────────────┐
│                     Caddy (ports 80/443)                 │
│                    ┌──────────┬──────────┐               │
│                    │ Frontend │ Backend  │               │
│                    │ (React)  │ (FastAPI)│               │
│                    └────┬─────┴────┬─────┘               │
│                         │          │                     │
│                    ┌────┴────┐ ┌───┴───┐                 │
│                    │PostgreSQL│ │ Redis │                 │
│                    └─────────┘ └───────┘                 │
└──────────────────────────────────────────────────────────┘

How the pieces fit together, including the three interview pipelines and where models run (cloud providers or your own hardware):

OASIS system overview: participant and researcher connect through Caddy to the React frontend and the FastAPI backend, which runs three interview pipelines (modular voice, voice-to-voice, text chat) against cloud AI providers or locally hosted models, with PostgreSQL, Redis, and audio storage underneath

All three interview pipelines live in the backend. Modular voice and text chat share the same engagement and adaptive processors; voice-to-voice trades that flexibility for the lowest latency.

Engagement metrics & adaptive behavior

OASIS can score participant engagement on every turn (word count, hedging, response latency, voiced energy) and — optionally — adapt the agent with a rule-based, fully audited policy. It ships in a non-acting shadow mode by default, so you can review what the policy would do before letting it touch a real interview.

Adaptive behavior flow: each participant turn is scored by the engagement processor, the adaptive policy engine matches triggers to actions, shadow mode only logs to the audit trail while live mode injects a hidden guidance note or adjusts speaking pace before the agent's next turn

Details and the exact default texts: docs/ENGAGEMENT_METRICS.md and docs/ADAPTIVE_BEHAVIOR.md.

Quick Start

You need Docker and an OpenAI API key. That's the minimum to run a complete text or voice interview end-to-end. Other providers are optional and can be added later.

1. Clone and configure

git clone https://github.com/oasis-surveys/oasis-platform.git
cd oasis-platform
cp .env.example .env

Open .env and set two values:

OPENAI_API_KEY=sk-...
SECRET_KEY=some-random-secret

That's enough to start. With just an OpenAI key you get text chat, voice (Whisper STT + GPT-4o-mini-tts), and voice-to-voice (gpt-realtime). Add DEEPGRAM_API_KEY, ELEVENLABS_API_KEY, GOOGLE_API_KEY, etc. later if you want those providers.

2. Start it

docker compose up -d

Open http://localhost. The dashboard is there.

3. Run your first study (under a minute)

  1. Click New Study, give it a name.
  2. Click From Template and pick one of the four research templates (semi-structured qualitative, cognitive interview pretest, open-ended survey follow-up, or telephone survey).
  3. The agent is Active by default. Copy the share link from the agent page.
  4. Open the link in a new tab to take the interview yourself, or send it to participants.

Transcripts appear live under the session in the dashboard. Export to CSV/JSON when you're done.


Deploy to a real server

Local testing works? Put OASIS on the internet so participants can actually take interviews. The repo ships a one-command installer that takes a fresh Ubuntu 24.04 VM and turns it into a working OASIS install with HTTPS, a firewall, and auto-security-updates in about 8 minutes. Hetzner Cloud in the EU costs around €5/mo.

ssh root@your-server-ip
curl -fsSL https://raw.githubusercontent.com/oasis-surveys/oasis-platform/main/scripts/install.sh | bash

Step-by-step guide (Hetzner signup, DNS, the SSH part): docs/DEPLOYMENT.md. It is genuinely step-by-step. Follow it in order and you will not get stuck.

If you are a research group and you want help with deployment, OASIS runs a pilot program. Email me and I will help you get set up.

Going further

See .env.example for every option (Google, Scaleway, Azure, GCP Vertex, self-hosted STT/TTS, RAG embeddings, Twilio, dashboard auth) and the FAQ for self-hosting on HPC and European cloud guidance.

Project Structure

oasis/
├── backend/
│   ├── app/
│   │   ├── api/          # REST + WebSocket endpoints
│   │   ├── models/       # SQLAlchemy ORM models
│   │   ├── schemas/      # Pydantic request/response schemas
│   │   ├── pipeline/     # Pipecat pipeline runner
│   │   ├── knowledge/    # RAG: chunking, embedding, retrieval
│   │   ├── config.py     # Environment settings
│   │   └── main.py       # FastAPI entry point
│   ├── alembic/          # DB migrations
│   ├── tests/
│   └── Dockerfile
├── frontend/
│   ├── src/
│   │   ├── pages/        # Dashboard + interview widget
│   │   ├── components/   # Shared UI
│   │   ├── contexts/     # React contexts
│   │   └── lib/          # API client, utils
│   └── Dockerfile
├── docker/
│   └── Caddyfile
├── docker-compose.yml
└── .env.example

Testing

All external calls are mocked. No API keys needed to run tests.

# Backend
cd backend && pip install -r requirements.txt && pytest tests/ -v --cov=app

# Frontend
cd frontend && npm install && npx vitest run

CI runs on every push + weekly scheduled run.

Why

Commercial conversational AI platforms are built for support and sales. Research needs different things:

  • Methodological control. Semi-structured guides, probing logic, participant tracking built in, not bolted on.
  • Transparency. Reviewers should know what system, models, and data storage you used.
  • Affordability. Academic budgets aren't enterprise budgets. Self-hosting with pay-as-you-go API keys is often the only option.
  • Data sovereignty. Especially in Europe, running your own infrastructure is often a compliance requirement.

Contributing

Contributions welcome. Read CONTRIBUTING.md first.

License

OASIS is licensed under the GNU Affero General Public License v3 (AGPL-3.0).

You're free to use, modify, and distribute OASIS for any purpose, including funded academic research. If you deploy a modified version as a network service, you must make your changes available under the same license. That's the deal.

See the full LICENSE file for details and the FAQ for a plain-English explanation. If you use OASIS in your research, a citation would be appreciated (see below).

Citation

@software{lang2026oasis,
  author       = {Lang, Max M.},
  title        = {{OASIS}: Open Agentic Survey Interview System},
  year         = {2026},
  url          = {https://github.com/oasis-surveys/oasis-platform},
  note         = {Self-hosted platform for AI-powered conversational interviews},
  doi          = {10.5281/zenodo.19041570}
}

About

Self-hosted open-source platform / harness for AI-powered survey interviews. Voice-to-voice and text chat agents with semi-structured interview guides, multi-provider LLM support (OpenAI, Gemini, Scaleway), RAG knowledge base, and Twilio telephony. Built for researchers. Docker, one command, full control.

Topics

Resources

Contributing

Stars

23 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages