/complexity

⚡ Supercharge your Perplexity.ai

Primary LanguageTypeScript

Complexity

Stable Alpha Discord
Chrome Web Store Rating Chrome Web Store Users Mozilla Add-on Rating Mozilla Add-on Users

An enhanced version of Perplexity.ai which everyone has ever wanted.
Community-driven, open-source, and free to use.

Complexity is a third-party extension, it does NOT affiliate with Perplexity.ai.

💖 support the development

Paypal Ko-fi

Perplexity.ai is famously known for its LLM-based search engine, but many may not know that it is also a decent portal which provides access to various SOTA LLMs and image generation models and have somewhat a very generous rate limit compared to other services. But it lacks a lot of basic features, the UX isn't that great either, and they implicitly refuse to improve on those areas by cutting almost all communication on their discord server. Hence, Complexity was created to fill that gap.

Complexity is packed with features

  • Various UI/UX/QoL tweaks.
  • LLM/Image gen model selectors; directly chat to a collection; export your searches/conversations, etc.
  • Highly customizable ADHD-friendly theme (custom css is supported).
  • A dedicated solution for prompts management: Prompts Library (in development).

Read more

How does it work?

This is a high-level overview of the network traffic interception approach, which provides the extension with the ability to alter the behavior of the host page.

  graph TD
    subgraph Browser
        W[perplexity.ai]
        CS[Content Scripts]
        BP[Background Page]
    end

    subgraph InterceptAPIs["Intercept native APIs"]
        WI["Singleton Instance (Main-world)"]
        WI --> |Initializes| PWS[Proxy WebSocket]
        WI --> |Initializes| PXHR[Proxy XMLHttpRequest]
        WI --> AM[Active Connection Manager]
        WI --> ML[Message Listener]
    end

    subgraph Interceptors
        WM["Controller (Isolated)"]
        WM --> MP[Message Processor]
        WM --> IC[Interceptor Chain]
        WM --> EL[Event Listeners]
    end

    WI <-. "window.postMessage" .-> WM

    W <--> |WebSocket/XHR| PWS
    W <--> |WebSocket/XHR| PXHR

    PWS --> |Intercepts| AM
    PXHR --> |Intercepts| AM

    AM --> |Notifies| ML
    ML --> |Sends Messages to| WM

    CS <--> |Communicates| WM
    BP <--> |Communicates| WM

    WM --> |Processes Messages| MP
    MP --> |Applies Interceptors| IC
    IC --> |Modifies Data| MP

    MP --> |Sends Modified Data| AM
    AM --> |Sends to Webpage| W

    WM --> |Registers| EL
    EL --> |Triggers Events| MP

    classDef singleton fill:#72aefd,stroke:#333,color:#ffffff,stroke-width:2px;
    class WI,WM singleton;

Loading

Read more

Installation

Build from source

  1. Clone this repository
  2. pnpm clean-zip
  3. Load the extension from the zip file in the package folder.

The mozilla add-on version is available at the moz branch.

Limitations

  • Because of frequent/unexpected changes in the host page, UI tweaks are prone to breakage and it will take some time for the review process to be passed.
  • The dev runtime/overall DX on mozilla-based browsers is non-existent due to a non-compatible dev dependency @crxjs/vite-plugin.
  • Limited testing: the e2e test suite has not been implemented due to the agressive Cloudflare protection of the host page itself (I'm still figuring out a way 🙂)

Contributing

  • Issues and PRs are welcome.
  • Please follow the guidelines in CONTRIBUTING.md.

Acknowledgements

Reaching out 👋

Support the development 💖