tars / replit.md
surekim's picture
Upload 109 files
390536f verified
|
Raw History Blame Contribute Delete
8.49 kB
# Ai&R System v1.1
## Overview
This is an AI-powered music A&R (Artists & Repertoire) analysis tool called "The Ai&R System." It uses a Dual-Model Orchestration pipeline with a Two-Stage Workflow:
**Stage 1 ("The Breach")**: Gemini Flash extracts Sonic DNA (quantitative audio features, X-Factor keywords, primary reference artist, technical profiles) β†’ Groq generates Suno v4 style tags and 3 suggested song titles. No lyrics generated at this stage.
**Stage 2 ("The Synthesis")**: User selects a title β†’ Groq generates full anti-cringe lyrics (24+ lines) with reference artist vocal branding and X-Factor metatag injection. If Groq fails, Gemini handles everything as a fallback.
The app is a full-stack TypeScript monorepo with a React frontend and Express backend, backed by PostgreSQL for storing analysis history. Apple-style minimalist black UI with action-first layout (Copy Suno Prompt, Copy Lyrics, Go to Suno buttons at top).
## User Preferences
Preferred communication style: Simple, everyday language.
## System Architecture
### Monorepo Structure
- `client/` β€” React SPA (Vite + TypeScript)
- `server/` β€” Express API server (TypeScript, runs via tsx)
- `shared/` β€” Shared types, schemas, and route definitions used by both client and server
- `migrations/` β€” Drizzle-generated database migrations
- `attached_assets/` β€” Reference documents (prompt engineering specs, UI mockups)
### Frontend Architecture
- **Framework**: React 18 with TypeScript, bundled by Vite
- **Routing**: Wouter (lightweight client-side router)
- **State/Data Fetching**: TanStack React Query for server state management
- **UI Components**: shadcn/ui (new-york style) built on Radix UI primitives with Tailwind CSS
- **Animations**: Framer Motion for reveal effects and log animations
- **Icons**: Lucide React
- **Styling**: Tailwind CSS with CSS variables for theming. Dark-only monochromatic theme (pure black background, white text, green accents). Uses three font families: Inter (sans), Newsreader (serif), Geist Mono (monospace).
- **Key Pages**: Home page (`/`) is the main analysis interface; Pricing page (`/pricing`); Help page (`/help`); 404 page for unknown routes
- **Path Aliases**: `@/` maps to `client/src/`, `@shared/` maps to `shared/`
### Backend Architecture
- **Framework**: Express.js on Node.js with TypeScript
- **API Pattern**: Routes defined in `shared/routes.ts` as a typed contract (method, path, input/output schemas via Zod). Both client and server reference the same route definitions.
- **AI Integration**: Dual-Model Orchestration with efficient fallback
- **Gemini Flash** (Analyst): Extracts raw Music Observation via `@google/genai`, accessed through Replit AI Integrations (`AI_INTEGRATIONS_GEMINI_API_KEY` and `AI_INTEGRATIONS_GEMINI_BASE_URL`)
- **Groq Llama-3.3-70b** (Architect & Poet): Stage 1 generates Suno tags and 3 suggested titles. Stage 2 generates full lyrics for a selected title. Uses `groq-sdk` (`GROQ_API_KEY` env var)
- **Fallback**: If Groq fails, Gemini Architect Fallback reuses existing Gemini observation data (no re-call). If no Groq API key, Gemini Unified mode handles everything.
- **Spotify Integration** (`server/spotify.ts`): Searches Spotify for artist/track, retrieves audio features (if API allows), artist genres, popularity, album art. Real audio features override Gemini estimates for Deep Scan. Connected via Replit Connector.
- **Helpers**: `safeParseJson()` centralized JSON parsing, `generateWithGroq()`/`generateWithGemini()` shared AI wrappers, `validateArchitectOutput()` post-parse validation, `trimForResponse()` strips non-UI fields from API response (full data stored in DB), `enrichWithSpotify()` merges Spotify data into sonicDna
- **Dev Server**: Vite dev server is used as middleware in development (HMR via `server/vite.ts`); static files served in production from `dist/public`
- **Build**: Custom build script (`script/build.ts`) β€” Vite builds the client, esbuild bundles the server into `dist/index.cjs`
### API Endpoints
- `POST /api/analyze` β€” Stage 1 endpoint. Accepts `targetArtist` (required). Runs dual-model pipeline: Gemini extracts Sonic DNA β†’ Groq generates Suno tags and 3 suggested titles. Returns structured JSON with sonicDna (tags, suggestedTitles, audioFeatures, highImpactKeywords, primaryReferenceArtist) and pipeline indicator. Response includes `pipeline` field: "dual", "gemini-fallback", or "gemini-only". Note: Suno tags do NOT include artist names.
- `POST /api/generate-lyrics` β€” Stage 2 endpoint. Accepts `selectedTitle` (string) and `sonicDna` (full sonic DNA from Stage 1). Generates full anti-cringe lyrics (24+ lines) with reference artist vocal branding. Returns `{ sunoScript: string }`.
- `GET /api/history` β€” Returns all past analysis results ordered by creation date (newest first)
### Replit AI Integrations (Pre-built Modules)
Located in `server/replit_integrations/`:
- **chat/** β€” Generic chat conversation routes with Gemini (conversations + messages CRUD)
- **image/** β€” Image generation endpoint using `gemini-2.5-flash-image`
- **batch/** β€” Batch processing utilities with rate limiting, retries, and concurrency control
These are supplementary modules. The main analysis feature uses Gemini directly in `server/routes.ts`.
### Database
- **Database**: PostgreSQL (required, via `DATABASE_URL` environment variable)
- **ORM**: Drizzle ORM with `drizzle-zod` for schema-to-validation integration
- **Schema** (`shared/schema.ts`):
- `analysis_results` table: `id` (serial PK), `target_artist` (text), `reference_artist` (text), `sonic_dna` (jsonb β€” stores tags, BPM, key, instruments, etc.), `narrative` (text), `created_at` (timestamp)
- **Additional schemas** (`shared/models/chat.ts`):
- `conversations` table: `id`, `title`, `created_at`
- `messages` table: `id`, `conversation_id` (FK to conversations), `role`, `content`, `created_at`
- **Migrations**: Use `npm run db:push` (drizzle-kit push) to sync schema to database
- **Storage Layer**: `server/storage.ts` β€” `DatabaseStorage` class implements `IStorage` interface with `createAnalysis()` and `getHistory()` methods
### Key Design Decisions
1. **Shared route contracts** β€” Route definitions with Zod schemas in `shared/routes.ts` ensure type safety across client-server boundary
2. **JSONB for Sonic DNA** β€” The analysis output from Gemini is complex nested JSON; storing as JSONB allows flexible querying without rigid column structure
3. **Gemini JSON cleaning** β€” The backend strips markdown code blocks (` ```json `) from both Gemini and Groq responses before parsing
4. **Dual-Model Orchestration** β€” Gemini as Analyst (data extraction) + Groq as Architect (creative generation) with automatic fallback
5. **Interscope Deep Scan** β€” 5 circular audio feature gauges (Energy, Valence, Acousticness, Danceability, Instrumentalness) scored 0.0-1.0. Uses Spotify real data when available (with green "Live" badge), falls back to Gemini estimation
6. **Replit Auth** β€” Google login via Replit OpenID Connect (passport-based). Users table has credits, freeUsesRemaining, totalAnalyses columns. Freemium model: 3 free analyses, then 10 credits per analysis. Auth middleware on `/api/analyze`. Credits endpoint at `GET /api/credits`.
## External Dependencies
### Required Services
- **PostgreSQL Database** β€” Connection string via `DATABASE_URL` environment variable. Required for all data persistence.
- **Google Gemini AI** (via Replit AI Integrations) β€” Two environment variables required:
- `AI_INTEGRATIONS_GEMINI_API_KEY` β€” API key for Gemini
- `AI_INTEGRATIONS_GEMINI_BASE_URL` β€” Base URL for the Gemini-compatible endpoint
- Model used: `gemini-2.5-flash` (Analyst role)
- **Groq AI** β€” Environment variable required:
- `GROQ_API_KEY` β€” API key for Groq
- Model used: `llama-3.3-70b-versatile` (Architect & Poet role)
### Key NPM Dependencies
- `@google/genai` β€” Google Gemini AI client
- `groq-sdk` β€” Groq AI client (Llama 3.3 70B)
- `drizzle-orm` + `drizzle-kit` + `drizzle-zod` β€” Database ORM and migration tooling
- `express` + `connect-pg-simple` β€” HTTP server and session store
- `@tanstack/react-query` β€” Client-side data fetching
- `framer-motion` β€” UI animations
- `wouter` β€” Client-side routing
- `zod` β€” Schema validation (shared between client and server)
- `shadcn/ui` ecosystem β€” Radix UI primitives, Tailwind CSS, class-variance-authority, clsx, tailwind-merge