### Install mkcert using Homebrew Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Installs the mkcert tool using the Homebrew package manager. mkcert is used to create locally-trusted TLS certificates for development. ```shell brew install mkcert ``` -------------------------------- ### Example Queue Syntax Usage Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Demonstrates how to use the `----` syntax to separate two tasks within a single prompt. ```Syntax Task 1: Complete the report ---- Task 2: Schedule a meeting ``` -------------------------------- ### Configure MCP Server Plugin JSON Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON configuration used when creating a new plugin in the TypingMind Teams Admin Panel. This specific example defines a plugin that runs the memory MCP server. ```JSON { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-memory" ] } ``` -------------------------------- ### Expected TypingMind MCP Server Running Output Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example output displayed in the terminal when the TypingMind MCP server successfully starts and is listening for connections. It confirms the protocol (HTTPS), IP address (0.0.0.0), and port. ```Text ✓ MCP runner server running on ``` -------------------------------- ### Install NSS using Homebrew Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Installs the Network Security Services (NSS) library using Homebrew. This is recommended if you use applications like Firefox that rely on the NSS shared database for certificate trust. ```shell brew install nss ``` -------------------------------- ### Install Local mkcert Certificate Authority (CA) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Installs the mkcert local Certificate Authority (CA) into the system and browser trust stores. This allows certificates signed by this CA to be trusted locally. This command only needs to be run once per machine. ```shell mkcert -install ``` -------------------------------- ### Successful Response for GET /v2/users (JSON) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response body returned upon a successful `GET /v2/users` request (HTTP 200 OK). It contains an array of user objects under the 'data' key. ```JSON { "data": [ { /* User Object 1 */ }, { /* User Object 2 */ }, ... ] } ``` -------------------------------- ### Response Body: Get User by ID (GET /v2/users/{id}) - JSON Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response body containing a user object for a successful GET request by user ID. ```json { "id": 123456, "email": "email@example.com", "createdAt": "string", "groups": [ "group-id-1", "group-id-2" ] } ``` -------------------------------- ### Example Custom Variable Usage Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example showing how to embed a custom variable like `{{your content}}` within a prompt template. ```Syntax I want you to act as an English pronunciation assistant. My first sentence is: `{{your content}}`. ``` -------------------------------- ### Example AI Agent Mention Usage Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Shows how to mention a specific AI agent, `@[Marketing Expert]`, within a prompt. ```Syntax Hey @[Marketing Expert], can you help create a business plan for this quarter? ``` -------------------------------- ### Successful Get All Roles Response (JSON) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response for a successful GET request to retrieve all roles. It returns an array of role objects, each containing an ID and title. ```json { "data": [ { "id": "role-id-1", "title": "Content Manager" }, { "id": "role-id-2", "title": "Editor" } ] } ``` -------------------------------- ### Example Markdown for Login Message Source: https://github.com/typingmind/product-expert/blob/main/llms.txt An example of Markdown content that can be used for the Login Message field. This message is displayed on the login page when the 'login wall' is enabled, providing information and highlighting features. ```Markdown *Welcome to our AI-powered app! We're excited to have you on board. Explore the intelligent features designed to make your tasks easier and more efficient. If you have any questions, our support team is here to help!* *Here's what you can do:* - ***Intelligent Data Analysis**: Analyze large sets of data quickly to gain valuable insights.* - ***Automated Workflows**: Set up automation for repetitive tasks to boost productivity.* - ***Natural Language Processing**: Interact with the app using natural language queries.* - ***Predictive Analytics**: Utilize predictive models to forecast trends and outcomes.* - ***Customizable Models**: Tailor AI models to suit specific needs and requirements.* - ***Integration with APIs**: Seamlessly connect with other apps and services via APIs.* - ***Real-time Feedback**: Receive instant feedback and suggestions for improvement.* - ***Visualization Tools**: Create visual representations of data for easier interpretation* ``` -------------------------------- ### Response Body: Get All Groups (GET /v2/groups) - JSON Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response body containing an array of group objects for a successful request to retrieve all groups. ```json { "data": [ { "id": "group-id-1", "title": "Marketing Department" }, { "id": "group-id-2", "title": "Sales Department" } ] } ``` -------------------------------- ### Run Default TypingMind MCP Server Command (HTTP) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Shows the basic command to start the TypingMind MCP server using npx. This command typically runs over HTTP and requires an authentication token. It serves as a baseline before modification for HTTPS. ```Shell PORT=8080 npx @typingmind/mcp [auth_token] ``` -------------------------------- ### Response Body: Add User (POST /v2/users) - JSON Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response body for a successful user creation request. An empty object indicates success. ```json {} ``` -------------------------------- ### Example System Variable Usage (Local Date) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Shows how to include the `{local_date}` system variable in a prompt to provide the current date context to the AI. ```Syntax Get all my meetings this week from Google Calendar. Today's date is: `{local_date}` ``` -------------------------------- ### Response Body: Get Group by ID (GET /v2/groups/{id}) - JSON Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response body containing a group object for a successful GET request by group ID. ```json { "id": "group-id-1", "title": "Marketing Department", "roles": [ "role-id-1", "role-id-2" ] } ``` -------------------------------- ### Run MCP Connector Command Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Command used to start the MCP Connector instance. This connector bridges TypingMind Teams with the configured MCP server plugins. Replace with a unique, secure token. ```Shell npx @typingmind/mcp-connector ``` -------------------------------- ### Successful Get All AI Characters Response (JSON) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response for a successful GET request to retrieve all AI characters. It returns an array in the 'data' field, containing placeholder objects representing AI characters. ```json { "data": [ { /* AI Character Object 1 */ }, { /* AI Character Object 2 */ }, ... ] } ``` -------------------------------- ### Successful Get Chat Logs Response (JSON) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response for a successful GET request to retrieve chat logs. It returns an array in the 'data' field, containing placeholder objects representing individual chat log entries. ```json { "data": [ { /* Chat Log Object 1 */ }, { /* Chat Log Object 2 */ }, ... ] } ``` -------------------------------- ### Generate localhost Certificate and Key Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Generates a TLS certificate and private key for 'localhost' signed by the locally installed mkcert CA. The command creates 'localhost.pem' (certificate) and 'localhost-key.pem' (private key) in the current directory. ```shell mkcert localhost ``` -------------------------------- ### Run TypingMind MCP Server Command with HTTPS Source: https://github.com/typingmind/product-expert/blob/main/llms.txt The modified command to start the TypingMind MCP server over HTTPS. It includes environment variables CERTFILE and KEYFILE pointing to the SSL certificate and private key files, and specifies the PORT. Requires the certificate files to be in the current directory or specified path. ```Shell CERTFILE=./localhost.pem KEYFILE=./localhost-key.pem PORT=8080 npx @typingmind/mcp [auth_token] ``` -------------------------------- ### Response Body: Add Group (POST /v2/groups) - JSON Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response body containing the newly created group object for a successful group creation request. ```json { "id": "group-id-1", "title": "Marketing Department", "roles": [ "role-id-1", "role-id-2" ] } ``` -------------------------------- ### JWT Payload for Creating New User - JavaScript Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JWT payload structure for creating a new user account in TypingMind if a user with the provided `id` does not exist. Includes the required `user` object with `id`, `email`, and other optional properties, plus the recommended `exp` claim. ```JavaScript const payload = { user: { id: "unique-user-id-456", // MUST be unique email: "newuser@example.com", firstName: "New", lastName: "User", // ... other user properties ... }, exp: Math.floor(Date.now() / 1000) + (60 * 60) // Expires in 1 hour }; ``` -------------------------------- ### Generate JWT Token - NodeJS Source: https://github.com/typingmind/product-expert/blob/main/llms.txt NodeJS example using the `jsonwebtoken` library to sign a JWT payload with the TypingMind JWT Secret. Demonstrates generating a token for an existing user by ID and includes commented-out code for creating a new user. Requires the `jsonwebtoken` library. ```NodeJS import jwt from 'jsonwebtoken'; // Replace with the actual JWT Secret from your TypingMind Admin Panel const jwtSecret = "YOUR_TYPINGMIND_JWT_SECRET"; // Example: Authenticating an existing user by ID const payload = { id: "user123", exp: Math.floor(Date.now() / 1000) + (60 * 60) // Expires in 1 hour }; const token = jwt.sign(payload, jwtSecret); console.log("Generated JWT:", token); // Example: Creating a *new* user // const payload = { // user: { // id: "unique-user-id-789", // MUST be unique // email: "newuser@example.com", // firstName: "New", // }, // exp: Math.floor(Date.now() / 1000) + (60 * 60) // Expires in 1 hour // }; // const token = jwt.sign(payload, jwtSecret); // console.log("Generated JWT:", token); ``` -------------------------------- ### Response Body: Update User (PATCH /v2/users/{id}) - JSON Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response body confirming a successful user update request. Returns the updated user object. ```json { "id": 123456, "email": "email@example.com", "createdAt": "string", "groups": [ "group-id-1", "group-id-2" ] } ``` -------------------------------- ### JWT Payload for Existing User (ID) - JavaScript Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JWT payload structure for authenticating an existing user in TypingMind using their unique ID. Includes the required `id` claim and a recommended `exp` (expiration) claim. ```JavaScript const payload = { id: "user123", // The unique ID of the existing user exp: Math.floor(Date.now() / 1000) + (60 * 60) // Expires in 1 hour }; ``` -------------------------------- ### Successful Group Update Response (JSON) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JSON response for a successful PATCH request to update a group. It returns the updated group object including its ID, title, and associated role IDs. ```json { "id": "group-id-1", "title": "Marketing Department", "roles": [ "role-id-1", "role-id-2" ] } ``` -------------------------------- ### JSON Configuration for DeepSeek R1 Custom Model Source: https://github.com/typingmind/product-expert/blob/main/llms.txt This JSON object represents the configuration structure for a custom AI model, specifically DeepSeek R1 in this example. It includes essential details like model ID, API endpoint, authentication headers, and supported features. This format is used for importing models via the JSON import feature or for sharing model configurations. ```JSON { "id": "78371e75-5b14-40a7-976d-58d8ee4723d6", "title": "DeepSeek R1", "apiType": "openai", "iconUrl": "https://avatars.githubusercontent.com/u/148330874?s=200&v=4", "modelID": "deepseek-reasoner", "bodyRows": [], "endpoint": "https://api.deepseek.com/v1/chat/completions", "createdAt": "2025-03-18T08:29:27.595Z", "headerRows": [ { "id": "c5d44d0d-f91e-4718-ad1a-0531fb7d3668", "key": "Authorization", "value": "Bearer your-API-Key" } ], "skipAPIKey": true, "description": "Reasoning model from DeepSeek", "contextLength": 16000, "pluginSupported": false, "visionSupported": false, "streamOutputSupported": true, "systemMessageSupported": true, "isOrgModel": true } ``` -------------------------------- ### JWT Payload for Existing User (Email) - JavaScript Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Example JWT payload structure for authenticating an existing user in TypingMind using their email address. Includes the `email` claim and a recommended `exp` (expiration) claim. Note that authenticating by ID is preferred if available. ```JavaScript const payload = { email: "user123@example.com", exp: Math.floor(Date.now() / 1000) + (60 * 60) // Expires in 1 hour }; ``` -------------------------------- ### Add Data Source - Google Drive - Configuration Steps Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Outlines the steps to connect a Google Drive account, covering the authentication process and selecting specific files to sync with the Knowledge Base. ```text 1. Select Add Data Source then select Google Drive 2. After select, the page is redirected to an authentication page where you can log into your Google account or select from your current logged-in account. 3. Confirm all Google Account Requirements"", the system will need the user to confirm the knowledge base system requires access to your Google Account. 4. After authenticating, you will be directed to a window to select a file you want to connect. The selected files need to tick on the check box and click “Select”. ``` -------------------------------- ### Add Data Source - GitHub - Configuration Steps Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Explains how to connect a GitHub account as a data source, detailing the steps for entering the username, creating and using a Personal Access Token (PAT), and selecting repositories for syncing. ```text 1. Click on **GitHub** in the ""Add Data Source"" dialog 2. Enter your **GitHub Username** and press the setting for setting PAT(Personal Authentication Token) 3. Create a New Access Token: 4. To create a new token and select repos for syncing user can click on a link to navigate to `Settings`. Then provide a description, set expiration, and repository access. 5. Make sure to copy this token, because this token will never show again for security reason. There is a message: Make sure to copy your personal access token now as you will not be able to see this again. 6. Back to TypingMind setting form, and paste the personal access token into the ""Personal Access Token"" text field. 7. Click the ""Next >"" button (typically located in the bottom-right corner of the form) to save and proceed. 8. At the ""Connect to Github"" page, you can select a list of available repositories for synching with the account. 9. Select the list of repositories, then click ""Update Repository Selection"" if you want to update the current repo connection, ``` -------------------------------- ### Add Data Source - File Uploads - Configuration Steps Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Describes the process for adding local files as a data source to the Knowledge Base, including creating a folder and uploading files. Notes limitations on file size. ```text 1. Select Add Data Source and select file upload 2. You will need to create a folder for file upload first. Enter the folder name and click Create 3. Click Upload File button and find the files and document on your local. 4. Upload your files. ``` -------------------------------- ### Add Data Source - Notion - Configuration Steps Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Provides instructions for connecting a Notion account, including the authentication process via a popup and selecting specific pages to grant access to the integration. ```text 1. Click on **Notion** in the ""Add Data Source"" dialog. 2. Authenticate to use this plugin. (Click Authenticate Now to get permission) a popup shows up for authentication. It will redirect the user to Notion's website to authenticate and authorize the integration. 3. The popup ""Allow TypingMind to access these pages"". - Select the pages by clicking the checkbox. You can also search in the input field. - There are the content to connect from the personal account of Notion, including: - A search box that says ""Search for pages in name's Notion"" - Notion Pages with title will appear where user may select. - After selecting pages, press the ""Allow access"" button. This will close the Notion popup and re-direct to TypingMind settings. - If it is all setup perfectly, refresh the app to see the latest data connection. ``` -------------------------------- ### Add Data Source - Web Scraper - Configuration Steps Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Details the process for using the built-in web scraper, including creating a folder, configuring the URL to scrape, and setting the number of pages to crawl. ```text 1. Click Add data source and Select ""Web Scraping" 2. You will need to create a folder for web scrape. Enter the folder name and create. 3. Click on Configure button to enter the URL to scrape manually, for example, with "[docs.typingmind.com](http://docs.typingmind.com/)"", the system will indicate if its valid if the font’s color change. 4. Select how many Pages that system will scrape. 5. After the link has been set, the system will start crawling into the website. *A successful check should be like this “The source is processing please wait to the bot to grab it correctly” ``` -------------------------------- ### Manage Data Source - Add Training Tags - Configuration Steps Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Explains how to assign training tags to uploaded documents to categorize them and improve the focus of AI agents based on user requests. ```text - Use click the current option to select/ unselect the available tags - or type to create new tag on the top right corner of the popup. Click “+” icon to add the newly created tags. - The training tags will be added to each data so you can easily assign those tags to the AI Agents. ``` -------------------------------- ### Configuring MCP Servers in TypingMind (JSON) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt This JSON object defines the list of MCP servers that the TypingMind MCP Connector will manage. The `mcpServers` key contains an object where each key is a user-defined server name, and the corresponding value specifies the `command` and `args` required to execute that server using `npx`. ```JSON { "mcpServers": { "memory": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-memory" ] }, "puppeteer": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-puppeteer" ] } } } ``` -------------------------------- ### Running TypingMind MCP Connector (Shell) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt This command initiates the TypingMind MCP Connector on the user's local machine. It requires NodeJS version 18 or higher and must be executed on the same device running the TypingMind app. The `` is a unique identifier for the connection and should be kept confidential. ```Shell npx @typingmind/mcp-connector ``` -------------------------------- ### Providing Email List for User Invitation (Text) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Illustrates the expected format for the multi-line input field in the "Invite Users" dialog. Users must enter one email address per line to invite multiple team members simultaneously. ```text john@example.com alice@yourdomain.com ... ``` -------------------------------- ### Chaining Agents with Queue Syntax Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Combine the `@[Agent Name]` syntax with the queue separator (`----`) to direct different sections of a chained prompt to specific AI agents. ```Syntax @[Research Analyst], what is the recent data on smartphone sales? ---- @[Marketing Expert], based on the data, propose a marketing strategy. ``` -------------------------------- ### Mentioning AI Agents (Syntax) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Direct the AI's behavior by mentioning specific agents using the `@[Agent Name]` syntax within the prompt. ```Syntax @[Agent Name] ``` -------------------------------- ### Embedding TypingMind Chat Widget (HTML) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt This snippet provides the HTML script tag necessary to embed the TypingMind chat widget onto a webpage. The `defer` attribute ensures the script is executed after the document has been parsed. Replace `` with the actual URL provided by TypingMind for your specific instance. ```HTML ``` -------------------------------- ### Request Body Schema for POST /v2/users (JSON) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Schema for the required JSON request body when adding a user via `POST /v2/users`. It requires an 'email' and optionally accepts 'tags' and 'groups'. ```JSON { "email": "string", "tags": ["string"], "groups": ["string"] } ``` -------------------------------- ### System Variable (Local Date) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Access system information, such as the current local date, using specific predefined variables like `{local_date}`. ```Syntax {local_date} ``` -------------------------------- ### Customize HTTP Headers Source: https://github.com/typingmind/product-expert/blob/main/llms.txt This section allows administrators to define custom HTTP headers for all requests sent to the chat instance. Headers are entered as raw text, one per line, and can be used for configuration like Content-Security-Policy or custom identification. ```plain text Content-Security-Policy: default-src 'self' x-custom-header: your-header x-version: 2023-06-01 ``` -------------------------------- ### TypingMind MCP Server Configuration URL Source: https://github.com/typingmind/product-expert/blob/main/llms.txt The URL to enter into the TypingMind application's "Server URL" field to connect to the locally running MCP server. It specifies the protocol (HTTPS), hostname (localhost), and port (8080). ```URL ``` -------------------------------- ### Separating Prompt Sections (Syntax) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Use four consecutive dashes (`----`) on a new line to divide a prompt into distinct sections, allowing for sequential processing or chaining of tasks. ```Syntax ---- ``` -------------------------------- ### Custom Template Variables (Syntax) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Define dynamic content in prompt templates by using double curly braces around a variable name, like `{{variable name}}`. ```Syntax {{variable name}} ``` -------------------------------- ### Defining CSV Headers for Member Import (CSV) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Shows the required header row structure for the CSV file used in the "Import Members" functionality. These headers (`email`, `first_name`, `last_name`, `roles`, `groups`) dictate the data columns needed for successful member import. ```csv email,first_name,last_name,roles,groups ``` -------------------------------- ### Embed JavaScript to Modify Login Placeholder Source: https://github.com/typingmind/product-expert/blob/main/llms.txt This snippet demonstrates how to use JavaScript, embedded within the chat portal's tag, to dynamically change the placeholder text of the login input field using a MutationObserver. ```html ``` -------------------------------- ### Embedding Chat Widget HTML Script Source: https://github.com/typingmind/product-expert/blob/main/llms.txt This HTML script tag is used to asynchronously load the chat widget JavaScript file from your TypingMind for Teams instance. It should be placed within the section of your webpage to enable the chat widget functionality. ```HTML ``` -------------------------------- ### Embedding TypingMind Widget with JWT Authentication (HTML) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt Embed the TypingMind chat widget on your website and pass a JSON Web Token (JWT) via the `data-external-auth-code` attribute for external user authentication. Replace 'YOUR_JWT_TOKEN_HERE' with the actual JWT generated on your server. ```html ``` -------------------------------- ### TypingMind MCP Connection Success Message Source: https://github.com/typingmind/product-expert/blob/main/llms.txt The confirmation message displayed within the TypingMind application upon successfully connecting to the configured MCP server. ```Text ✓ Connected to remote server! ``` -------------------------------- ### TypingMind FAQs Data Structure (JavaScript) Source: https://github.com/typingmind/product-expert/blob/main/llms.txt This code snippet represents the data structure used to store the Frequently Asked Questions (FAQs) for the TypingMind application. It is an array of JavaScript objects, where each object contains a 'question' and an 'answer' property. The string values are defined using backticks (`), which is valid in JavaScript object literals. ```JavaScript [ { question: `Is this app free?`, answer: `TypingMind.com is free to use with some basic features. You will need to have a working OpenAI API Key in order to use the app. When you use the OpenAI API Key, you pay directly to OpenAI for the amount of credits/tokens you use. TypingMind.com has premium features that can be unlocked with a one-time purchase.`, }, { question: `Is the License Key one-time purchase? Do I need to renew it?`, answer: `Yes, license key is one-time purchase and valid forever. It is not a subscription and you don't need to renew it. You will also be provided with an offline static web app (self-host) after you purchase so you can self-host and use the app anytime anywhere you want. Enjoy!`, }, { question: `Where can I get an OpenAI API Key?`, answer: `You can signup directly with OpenAI at https://platform.openai.com/signup`, }, { question: `Do I need to pay for ChatGPT Plus ($20/month) to use TypingMind.com?`, answer: `No! A ChatGPT Plus subscription is not needed. You just need to have an OpenAI's API Key. You can see more info on how to get one here: https://openai.com/blog/openai-api`, }, { question: `Do I need to pay for OpenAI for a ChatGPT API Key?`, answer: `Yes. You need to have an OpenAI account and a valid API key to use ChatGPT. We don't sell API keys.`, }, { question: `How does this app work?`, answer: `This is a static web app, it doesn't have any backend server. When you enter your API key, it will be stored locally and securely on your browser. All API requests are sent directly from your browser to OpenAI server to interact with ChatGPT. Think of this as a HTTP client for your ChatGPT API with a lot of convenience features.`, }, { question: `How is the API key handled?`, answer: `Your API is safe and stored locally on your device. This is a static app, which means that it doesn't have a backend. All the data is stored in your browser's local storage. Requests to Open AI's API is sent directly from your current browser (check the Network tab in your console if you want to see it).`, }, { question: `Is it ok to give my OpenAI API Key to TypingMind? Does OpenAI allow this use case?`, answer: `Yes. TypingMind only stores your API Key locally and never sends your API Key anywhere. OpenAI allows use cases where the API key is stored locally in the user's device. You can see this official response from OpenAI's staff here: https://community.openai.com/t/openais-bring-your-own-key-policy/14538/4`, }, { question: `Is my API Key encrypted in local storage?`, answer: `TypingMind offers additional encryption for your API Key. You can enable encryption with a password by clicking the "OpenAI API Key" button in the sidebar and selecting "Encrypt API key...". Your API Key will be encrypted using the AES algorithm provided by the open-source CryptoJS library (https://github.com/brix/crypto-js). TypingMind only provides an encryption feature for your API key. Chat messages, prompts, AI agents, and other elements are stored using the standard local storage of your browser, which may or may not include encryption, depending on your browser. The encryption process are done entirely locally on your device, there is no backend server. If you use TypingMind on multiple devices, you will need to encrypt your API key on all of them, you can also set different passwords on different devices.`, }, { question: `What's the difference between ChatGPT Plus and ChatGPT API via TypingMind?`, answer: `Under the hood, ChatGPT Plus and ChatGPT API offer the same model and the same quality. You can view this on their official announcement here: https://platform.openai.com/docs/guides/chat. The initial system instruction can be a little bit different, which can be configured to make the AI output different messages from time to time.`, }, { question: `Can I use GPT-4 in TypingMind?`, answer: `Yes, you can use GPT-4 in TypingMind via the API access. Check out this article for more info: https://blog.typingmind.com/access-gpt-4-on-typingmind`, }, { question: `I have ChatGPT Plus, will it cost me more to use ChatGPT API via TypingMind?`, } ] ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.