Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: Chainlit/chainlit
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: main
Choose a base ref
...
head repository: puneetrinity/chainlit
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 18 commits
  • 9 files changed
  • 2 contributors

Commits on Oct 12, 2025

  1. Add Chainlit HR Assistant with RunPod integration and Railway deployment

    Features:
    - Token streaming UI with word-by-word display
    - Settings sidebar: temperature, top_p, max_tokens, validation toggles
    - HR task quick actions: Resume, Job Description, ATS Keywords, Job-Resume Match, Recruiting Strategy
    - Blocked response handling with policy messages
    - Validation status display (intent, valid flag, issues)
    - Token usage tracking (input/output counts)
    - Inline temperature override via temp=X.X in messages
    
    Configuration:
    - Environment-based config (RUNPOD_BASE, ENDPOINT_ID, API_KEY, CLIENT_TIMEOUT_S)
    - Domain defaults: 180 max_tokens, temp=0.3, validation enabled, low-trust intents blocked
    - Railway deployment ready with Procfile, railway.json, requirements.txt
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 12, 2025
    Configuration menu
    Copy the full SHA
    046f36c View commit details
    Browse the repository at this point in the history
  2. Fix Railway deployment: chainlit command not found

    - Use 'python -m chainlit' instead of 'chainlit' command
    - Add nixpacks.toml with proper Python 3.12 setup
    - Update Procfile and railway.json start commands
    - Install packages with pip --user flag
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 12, 2025
    Configuration menu
    Copy the full SHA
    d5fdc27 View commit details
    Browse the repository at this point in the history
  3. Remove railway.json to let nixpacks.toml handle start command

    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 12, 2025
    Configuration menu
    Copy the full SHA
    644146a View commit details
    Browse the repository at this point in the history
  4. Fix Pydantic validation error: use payload instead of value for Actions

    - Changed cl.Action parameter from 'value' to 'payload'
    - Updated all action callbacks to use action.payload
    - Fixes: 1 validation error for Action - Field required
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 12, 2025
    Configuration menu
    Copy the full SHA
    4d86339 View commit details
    Browse the repository at this point in the history
  5. Fix Action payload type: must be dict not string

    - Changed payload to dict: payload={'prompt': ...}
    - Updated callbacks to extract prompt: action.payload['prompt']
    - Fixes Pydantic validation error: Input should be a valid dictionary
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 12, 2025
    Configuration menu
    Copy the full SHA
    928eb03 View commit details
    Browse the repository at this point in the history

Commits on Oct 13, 2025

  1. Remove validation and usage metadata from UI

    - Removed validation display (intent, valid flag, issues)
    - Removed usage tracking display (input/output token counts)
    - Cleaner UI with just the streamed response
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 13, 2025
    Configuration menu
    Copy the full SHA
    cfdeef3 View commit details
    Browse the repository at this point in the history

Commits on Oct 15, 2025

  1. Upgrade to ChatML with domain-specific prompts and validation

    - Implement ChatML formatting with system prompts for 5 HR domains
    - Add validators for all domains (resume, JD, match, recruiting, ATS)
    - Add micro-retry logic with clarifiers for failed validations
    - Update to vLLM endpoint with ChatML support
    - Add domain detection from user prompts
    - Enhance UI with validation status indicators
    - Update settings: remove block_low_trust, add micro_retry toggle
    - Add 1-shot examples for resume and JD domains
    - Test results: 4/5 domains passing validation
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    7d3197a View commit details
    Browse the repository at this point in the history
  2. Fix job_resume_match validator and add score explanation

    - Lower word threshold from 80 to 60 words (more realistic)
    - Add rationale validator to ensure score explanation is included
    - Update system prompt to explicitly request score reasoning
    - Update clarifier to emphasize explanation requirement
    - Test result: Now passes validation with clear score rationale
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    f2a9c7e View commit details
    Browse the repository at this point in the history
  3. Add dual-format response parsing for endpoint compatibility

    - Update extract_text to support both raw vLLM and handler endpoint formats
    - Update extract_usage to support both response shapes
    - Handler format: output as dict with choices[0].text
    - Raw vLLM format: output as list with choices[0].tokens
    - Tested with both formats - all passing
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    22c88f0 View commit details
    Browse the repository at this point in the history
  4. Add LLM-based router for intent classification

    - Implement classify_with_llm() with temp=0, 60 tokens for fast classification
    - Add router labels: resume, jd, match, recruiting, ats, small_talk, general_qna
    - Add confidence-based routing: high (≥60%) → LLM, medium (≥40%) → hybrid, low → heuristic
    - Add LLM Router toggle in settings (default: enabled)
    - Skip HR validation for small_talk and general_qna domains
    - Show detected domain with confidence in response footer
    - Update build_chatml to handle small_talk and general_qna
    - Test results: 95% accuracy on all HR domains, correctly identifies small talk
    
    Fixes domain detection issues - no more false positives on casual conversation
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    6d958f8 View commit details
    Browse the repository at this point in the history
  5. Rebrand as EvalMatch Career Copilot

    - Update welcome message with EvalMatch Career Copilot branding
    - Emphasize natural language interaction with LLM router
    - Add clear capability descriptions with emojis
    - Professional, user-friendly messaging
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    57a3403 View commit details
    Browse the repository at this point in the history
  6. Fix router misclassification with explicit recruiting rules

    - Add explicit routing rules for recruiting_strategy domain
    - Include 'strategy to hire/recruit/get/find/attract/source developers' patterns
    - Add 'hiring pipeline / talent acquisition / onboarding plan' patterns
    - Improve heuristic fallback with 'find developers', 'get developers', 'strategy to'
    - Update small_talk and general_qna prompts to be concise (1-3 sentences)
    - Remove seeding for non-HR domains
    - Improve JSON parsing with better error handling
    
    Test results: 95% confidence on all recruiting queries
    - 'Help me create a strategy to get relevant new age AI developers' → recruiting_strategy ✅
    - 'How can I develop a pipeline for full stack developers' → recruiting_strategy ✅
    - 'Strategy to hire senior DevOps engineers' → recruiting_strategy ✅
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    18bf18f View commit details
    Browse the repository at this point in the history
  7. Fix critical bugs in response parsing and streaming

    Critical Fixes:
    - Fix extract_text to join all tokens instead of returning only first token
      This was truncating all responses to the first token only
    - Add missing edge cases: string output, root-level text, handler format
    - Fix streaming to preserve whitespace and formatting using re.split(r'(\s+)')
      Previous implementation removed line breaks and bullet formatting
    
    Minor Improvements:
    - Fix 'hi' detection to work without trailing space (exact match at boundaries)
    - Make ATS keyword detection more specific (avoid generic 'keyword' term)
    - Remove ats_keywords from SEEDED (comma-separated output doesn't need '1. ' prefix)
    
    Test Results:
    ✅ extract_text correctly joins token arrays
    ✅ extract_text handles all edge cases (string, dict, root-level)
    ✅ Streaming preserves newlines and formatting
    ✅ Heuristics more accurate with edge case fixes
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    65c477d View commit details
    Browse the repository at this point in the history
  8. Polish variant system: proper logging, variant caps, and sampling exa…

    …mples
    
    Final improvements to variant hint pack system:
    - Replace print with proper logging.Logger with basicConfig
    - Add max_variants support to template system (enforced in select_variant)
    - Add sampling override example (repetition_penalty for ATS keywords)
    - Remove redundant DEBUG_VARIANTS boolean guard (rely on logger level)
    - Ensure console handler always exists for dev environments
    
    All 33 unit tests pass.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    35e8eba View commit details
    Browse the repository at this point in the history
  9. Refactor logging and add merge_sampling helper with tests

    Improvements to logging and sampling configuration:
    - Replace basicConfig with logger-specific StreamHandler to avoid clobbering embedded host logging
    - Extract merge_sampling() helper function for cleaner, testable code
    - Add 4 comprehensive unit tests for merge_sampling (min_tokens, direct overrides, multiple overrides, no mutation)
    
    All 37 unit tests pass.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    123c0bf View commit details
    Browse the repository at this point in the history
  10. Add defensive merge_sampling validation and prevent logger double emi…

    …ssion
    
    Defensive improvements to logging and sampling:
    - Set logger.propagate = False to prevent double emission if parent handlers exist
    - Add temperature/top_p clamping to [0, 1] range in merge_sampling
    - Add stop coercion to list for decoder compatibility
    - Add 3 comprehensive tests for defensive behaviors (temperature, top_p, stop)
    
    All 40 unit tests pass.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    df5a721 View commit details
    Browse the repository at this point in the history
  11. Add timeout retry logic and fix upload MIME type warnings

    Improvements for reliability and browser compatibility:
    - Add CLIENT_RETRY_ATTEMPTS and CLIENT_RETRY_BACKOFF_S environment variables
    - Implement exponential backoff retry for timeout exceptions in call_endpoint()
    - Add timeout-specific error messaging with guidance for users
    - Fix upload accept config: replace "*/*" with specific MIME categories
    - Sanitize accept patterns in useUpload to prevent react-dropzone warnings
    
    Timeout retry behavior:
    - Only retries on httpx.TimeoutException (not other errors)
    - Exponential backoff: 0.75s, 1.5s, 3s, 6s...
    - Default: 1 retry attempt (configurable via CLIENT_RETRY_ATTEMPTS)
    - Logs debug messages when backing off between retries
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    3e4c190 View commit details
    Browse the repository at this point in the history
  12. Expand streaming_aware variant and enhance extract_text for chat formats

    Major improvements to recruiting strategy and response parsing:
    
    Streaming-aware variant enhancements:
    - Add comprehensive Boolean sourcing patterns (JMS, ActiveMQ, RabbitMQ, Kinesis, Pulsar, Reactor, Netty, backpressure, CDC/Debezium, etc.)
    - Include 4-6 specific channels with cadence (LinkedIn Recruiter, GitHub code search, Stack Overflow tags, Kafka/Reactive meetups, Java user groups, conference speakers)
    - Add personalized outreach guidance mapping event-driven/JMS/Reactive signals to Kafka/Pulsar
    - Include screening prompts for backpressure/idempotent consumers and batch→near-real-time migration
    - Add metrics tracking (response rate %, pass-through %, time-to-hire)
    - Update clarifier to match expanded hint structure
    
    Extract_text improvements:
    - Add support for chat-style responses (message.content, delta.content)
    - Add support for streaming responses (delta content)
    - Enhanced fallback chain: text → output_text at multiple levels
    - Better null safety with isinstance checks
    - Comprehensive docstring documenting all supported formats
    
    These changes improve recruiting strategy quality for streaming/event-driven roles and ensure compatibility with both completions and chat API formats.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    puneetrinity and claude committed Oct 15, 2025
    Configuration menu
    Copy the full SHA
    18129be View commit details
    Browse the repository at this point in the history
Loading