Skip to content
23 changes: 23 additions & 0 deletions Parse-Dashboard/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ module.exports = (options) => {
const configUserPassword = options.userPassword || process.env.PARSE_DASHBOARD_USER_PASSWORD;
const configSSLKey = options.sslKey || process.env.PARSE_DASHBOARD_SSL_KEY;
const configSSLCert = options.sslCert || process.env.PARSE_DASHBOARD_SSL_CERT;
const configAgentConfig = options.agentConfig || process.env.PARSE_DASHBOARD_AGENT_CONFIG;
const configAgentModelName = options.agentModelName || process.env.PARSE_DASHBOARD_AGENT_MODEL_NAME;
const configAgentModelProvider = options.agentModelProvider || process.env.PARSE_DASHBOARD_AGENT_MODEL_PROVIDER;
const configAgentModel = options.agentModel || process.env.PARSE_DASHBOARD_AGENT_MODEL;
const configAgentApiKey = options.agentApiKey || process.env.PARSE_DASHBOARD_AGENT_API_KEY;

function handleSIGs(server) {
const signals = {
Expand Down Expand Up @@ -83,6 +88,24 @@ module.exports = (options) => {
}
];
}
// Add agent configuration from environment variables
if (configAgentConfig) {
try {
configFromCLI.data.agent = JSON.parse(configAgentConfig);
} catch (error) {
console.error('Failed to parse PARSE_DASHBOARD_AGENT_CONFIG:', error.message);
process.exit(1);
}
} else if (configAgentModelName && configAgentModelProvider && configAgentModel && configAgentApiKey) {
configFromCLI.data.agent = {
models: [{
name: configAgentModelName,
provider: configAgentModelProvider,
model: configAgentModel,
apiKey: configAgentApiKey
}]
};
}
} else if (!configServerURL && !configMasterKey && !configAppName) {
configFile = path.join(__dirname, 'parse-dashboard-config.json');
}
Expand Down
31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,11 @@ PARSE_DASHBOARD_SSL_KEY: "sslKey"
PARSE_DASHBOARD_SSL_CERT: "sslCert"
PARSE_DASHBOARD_CONFIG: undefined // Only for reference, it must not exist
PARSE_DASHBOARD_COOKIE_SESSION_SECRET: undefined // set the cookie session secret, defaults to a random string. Use this option if you want sessions to work across multiple servers, or across restarts
PARSE_DASHBOARD_AGENT_CONFIG: undefined // JSON string containing the full agent configuration with models array
PARSE_DASHBOARD_AGENT_MODEL_NAME: undefined // Display name for the AI model (e.g. "ChatGPT 4.1")
PARSE_DASHBOARD_AGENT_MODEL_PROVIDER: undefined // AI provider identifier (e.g. "openai")
PARSE_DASHBOARD_AGENT_MODEL: undefined // Specific model name from the provider (e.g. "gpt-4.1")
PARSE_DASHBOARD_AGENT_API_KEY: undefined // API key for authenticating with the AI provider

```

Expand Down Expand Up @@ -1305,6 +1310,32 @@ To configure the AI agent for your dashboard, you need to add the `agent` config

The agent will use the configured models to process natural language commands and perform database operations using the master key from your app configuration.

### Environment Variables

You can also configure the AI agent using environment variables, which is useful for containerized deployments or when you want to avoid storing API keys in configuration files.

#### Option 1: Full JSON Configuration

For complex setups with multiple models, you can provide the entire agent configuration as a JSON string:

```
PARSE_DASHBOARD_AGENT_CONFIG='{"models":[{"name":"ChatGPT 4.1","provider":"openai","model":"gpt-4.1","apiKey":"YOUR_API_KEY"}]}'
```

#### Option 2: Individual Environment Variables

For simpler setups with a single model, you can use individual environment variables:

```
PARSE_DASHBOARD_AGENT_MODEL_NAME="ChatGPT 4.1"
PARSE_DASHBOARD_AGENT_MODEL_PROVIDER="openai"
PARSE_DASHBOARD_AGENT_MODEL="gpt-4.1"
PARSE_DASHBOARD_AGENT_API_KEY="YOUR_API_KEY"
```

> [!Note]
> If both `PARSE_DASHBOARD_AGENT_CONFIG` and individual variables are provided, `PARSE_DASHBOARD_AGENT_CONFIG` takes precedence.

### Providers

> [!Note]
Expand Down