Last active
May 13, 2026 05:02
-
-
Save rankun203/031b9b1c12f7a82fcbb4f7a9c5a34784 to your computer and use it in GitHub Desktop.
config.schema.json for ase 2.0 config.yaml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "$defs": { | |
| "AIOverviewConfig": { | |
| "properties": { | |
| "source": { | |
| "default": "serpapi", | |
| "description": "Default AI Overview source", | |
| "title": "Source", | |
| "type": "string" | |
| }, | |
| "source_fallback": { | |
| "default": "brave", | |
| "description": "Fallback source for AI Overview, when source is not available", | |
| "title": "Source Fallback", | |
| "type": "string" | |
| } | |
| }, | |
| "title": "AIOverviewConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "AssignmentConfig": { | |
| "properties": { | |
| "topics_per_user": { | |
| "default": 10, | |
| "description": "How many topics each participant is assigned (and shown).", | |
| "exclusiveMinimum": 0, | |
| "title": "Topics Per User", | |
| "type": "integer" | |
| }, | |
| "high_stake_ratio": { | |
| "default": 0.5, | |
| "description": "Fraction of assigned topics that are high-stakes. e.g. 0.4 with topics_per_user=10 yields 4 high + 6 low (rounded to nearest int).", | |
| "maximum": 1.0, | |
| "minimum": 0.0, | |
| "title": "High Stake Ratio", | |
| "type": "number" | |
| }, | |
| "questions_per_topic": { | |
| "default": 1, | |
| "description": "How many of the topic's available questions to assign per topic. Currently only 1 is fully supported by the frontend.", | |
| "exclusiveMinimum": 0, | |
| "title": "Questions Per Topic", | |
| "type": "integer" | |
| }, | |
| "seed_strategy": { | |
| "default": "prolific_pid", | |
| "description": "'prolific_pid' makes assignment deterministic per participant; 'random' uses fresh entropy each enrollment.", | |
| "enum": [ | |
| "prolific_pid", | |
| "random" | |
| ], | |
| "title": "Seed Strategy", | |
| "type": "string" | |
| }, | |
| "fail_if_pool_smaller_than_required": { | |
| "default": true, | |
| "description": "If True, refuse to enroll a participant when the topic pool can't satisfy topics_per_user / high_stake_ratio.", | |
| "title": "Fail If Pool Smaller Than Required", | |
| "type": "boolean" | |
| } | |
| }, | |
| "title": "AssignmentConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "BonusConfig": { | |
| "properties": { | |
| "strategy": { | |
| "default": "deterministic", | |
| "description": "Bonus calculation strategy. 'deterministic' = correct * fixed cents; 'distribution' = correct * sample from uniform range.", | |
| "enum": [ | |
| "deterministic", | |
| "distribution" | |
| ], | |
| "title": "Strategy", | |
| "type": "string" | |
| }, | |
| "deterministic": { | |
| "$ref": "#/$defs/BonusDeterministicConfig", | |
| "description": "Constants used when strategy='deterministic'." | |
| }, | |
| "distribution": { | |
| "$ref": "#/$defs/BonusDistributionConfig", | |
| "description": "Ranges used when strategy='distribution'." | |
| } | |
| }, | |
| "title": "BonusConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "BonusDeterministicConfig": { | |
| "properties": { | |
| "high_correct_cents": { | |
| "default": 200, | |
| "description": "Cents awarded per correct high-stakes post-search answer.", | |
| "minimum": 0, | |
| "title": "High Correct Cents", | |
| "type": "integer" | |
| }, | |
| "low_correct_cents": { | |
| "default": 50, | |
| "description": "Cents awarded per correct low-stakes post-search answer.", | |
| "minimum": 0, | |
| "title": "Low Correct Cents", | |
| "type": "integer" | |
| } | |
| }, | |
| "title": "BonusDeterministicConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "BonusDistributionConfig": { | |
| "properties": { | |
| "high_correct_min_cents": { | |
| "default": 400, | |
| "description": "Lower bound of uniform distribution for each correct high-stakes answer.", | |
| "minimum": 0, | |
| "title": "High Correct Min Cents", | |
| "type": "integer" | |
| }, | |
| "high_correct_max_cents": { | |
| "default": 2000, | |
| "description": "Upper bound of uniform distribution for each correct high-stakes answer.", | |
| "minimum": 0, | |
| "title": "High Correct Max Cents", | |
| "type": "integer" | |
| }, | |
| "low_correct_min_cents": { | |
| "default": 100, | |
| "description": "Lower bound of uniform distribution for each correct low-stakes answer.", | |
| "minimum": 0, | |
| "title": "Low Correct Min Cents", | |
| "type": "integer" | |
| }, | |
| "low_correct_max_cents": { | |
| "default": 400, | |
| "description": "Upper bound of uniform distribution for each correct low-stakes answer.", | |
| "minimum": 0, | |
| "title": "Low Correct Max Cents", | |
| "type": "integer" | |
| } | |
| }, | |
| "title": "BonusDistributionConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "BraveConfig": { | |
| "properties": { | |
| "hide": { | |
| "default": false, | |
| "description": "Whether to hide Brave Search from the frontend", | |
| "title": "Hide", | |
| "type": "boolean" | |
| }, | |
| "name": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Override display name for Brave Search on the frontend", | |
| "title": "Name" | |
| }, | |
| "api_key": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "API key for Brave Search API, get it from https://api.search.brave.com/app/keys (env: BRAVE_API_KEY)", | |
| "title": "Api Key" | |
| }, | |
| "country": { | |
| "default": "US", | |
| "description": "Country code for search results (e.g., 'US', 'AU', 'GB'). See Brave API documentation for supported codes (env: BRAVE_COUNTRY)", | |
| "title": "Country", | |
| "type": "string" | |
| }, | |
| "search_lang": { | |
| "default": "en", | |
| "description": "Search language preference (e.g., 'en', 'es', 'fr'). See Brave API documentation for supported codes (env: BRAVE_SEARCH_LANG)", | |
| "title": "Search Lang", | |
| "type": "string" | |
| }, | |
| "ui_lang": { | |
| "default": "en-US", | |
| "description": "User interface language preference (e.g., 'en-US', 'es-ES', 'fr-FR'). See Brave API documentation for supported codes (env: BRAVE_UI_LANG)", | |
| "title": "Ui Lang", | |
| "type": "string" | |
| }, | |
| "safesearch": { | |
| "default": "moderate", | |
| "description": "Safe search filter: 'off', 'moderate', or 'strict' (env: BRAVE_SAFESEARCH)", | |
| "title": "Safesearch", | |
| "type": "string" | |
| }, | |
| "n_docs": { | |
| "default": 20, | |
| "description": "Number of documents to retrieve for each query", | |
| "title": "N Docs", | |
| "type": "integer" | |
| }, | |
| "cache_enabled": { | |
| "default": false, | |
| "description": "Whether to enable simple caching of search results, development purpose only, it does not delete cache (env: BRAVE_CACHE)", | |
| "title": "Cache Enabled", | |
| "type": "boolean" | |
| }, | |
| "cache_folder": { | |
| "default": "/tmp/ase_brave_search", | |
| "description": "Directory path for caching search results", | |
| "title": "Cache Folder", | |
| "type": "string" | |
| } | |
| }, | |
| "title": "BraveConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "BuiltInEngineConfig": { | |
| "properties": { | |
| "hide": { | |
| "default": false, | |
| "description": "Whether to hide this engine from the frontend", | |
| "title": "Hide", | |
| "type": "boolean" | |
| }, | |
| "name": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Override display name for this engine on the frontend", | |
| "title": "Name" | |
| } | |
| }, | |
| "title": "BuiltInEngineConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "CompleteCriteriaConfig": { | |
| "properties": { | |
| "answer": { | |
| "description": "Answer requirements gating topic completion. Each entry is an options_check pinned to a phase ('pre' or 'post').", | |
| "items": { | |
| "$ref": "#/$defs/OptionsCheckCriterion" | |
| }, | |
| "title": "Answer", | |
| "type": "array" | |
| } | |
| }, | |
| "title": "CompleteCriteriaConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "EventsConfig": { | |
| "properties": { | |
| "query_rankings": { | |
| "default": true, | |
| "description": "Whether to track search query rankings and results", | |
| "title": "Query Rankings", | |
| "type": "boolean" | |
| } | |
| }, | |
| "title": "EventsConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "FeaturesConfig": { | |
| "properties": { | |
| "show_source": { | |
| "default": true, | |
| "description": "is AI Overview text coming from Google or we generated it?", | |
| "title": "Show Source", | |
| "type": "boolean" | |
| }, | |
| "default_engine": { | |
| "default": "brave_search", | |
| "description": "The default search engine to use for queries, If set to None, it will randomly use an engine.", | |
| "enum": [ | |
| "google_ai_overview", | |
| "google_search", | |
| "brave_search", | |
| null | |
| ], | |
| "title": "Default Engine" | |
| }, | |
| "show_settings_button": { | |
| "default": true, | |
| "description": "Whether to show the search engine settings button on the frontend", | |
| "title": "Show Settings Button", | |
| "type": "boolean" | |
| }, | |
| "ai_overview": { | |
| "$ref": "#/$defs/AIOverviewConfig", | |
| "description": "AI Overview configuration for generating custom AI overviews" | |
| } | |
| }, | |
| "title": "FeaturesConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "OpenAIServerConfig": { | |
| "properties": { | |
| "key": { | |
| "description": "Key for the OpenAI compatible server, follow python variable format", | |
| "title": "Key", | |
| "type": "string" | |
| }, | |
| "name": { | |
| "description": "Display name for the OpenAI compatible server, keep it short and descriptive", | |
| "title": "Name", | |
| "type": "string" | |
| }, | |
| "hide": { | |
| "default": false, | |
| "description": "Whether to hide this server from the frontend(but can still be enabled), defaults to false", | |
| "title": "Hide", | |
| "type": "boolean" | |
| }, | |
| "api_url": { | |
| "description": "OpenAI compatible API URL (e.g., https://api.openai.com/v1)", | |
| "title": "Api Url", | |
| "type": "string" | |
| }, | |
| "api_key": { | |
| "description": "API key for the OpenAI compatible server", | |
| "title": "Api Key", | |
| "type": "string" | |
| }, | |
| "model": { | |
| "description": "Model name to use for AI Overview generation", | |
| "title": "Model", | |
| "type": "string" | |
| }, | |
| "max_tokens": { | |
| "anyOf": [ | |
| { | |
| "type": "integer" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Maximum number of tokens to generate. If unset, the field is omitted from the request.", | |
| "title": "Max Tokens" | |
| }, | |
| "temperature": { | |
| "anyOf": [ | |
| { | |
| "type": "number" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Temperature for response generation. If unset, the field is omitted from the request.", | |
| "title": "Temperature" | |
| }, | |
| "timeout": { | |
| "default": 60.0, | |
| "description": "Timeout in seconds for requests to this server, defaults to 60.0", | |
| "title": "Timeout", | |
| "type": "number" | |
| } | |
| }, | |
| "required": [ | |
| "key", | |
| "name", | |
| "api_url", | |
| "api_key", | |
| "model" | |
| ], | |
| "title": "OpenAIServerConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "OptionsCheckCriterion": { | |
| "properties": { | |
| "type": { | |
| "const": "options_check", | |
| "default": "options_check", | |
| "description": "Criterion type discriminator.", | |
| "title": "Type", | |
| "type": "string" | |
| }, | |
| "phase": { | |
| "description": "Which answer phase this criterion gates: 'pre' = answer required before searching, 'post' = answer required after searching. Only 'post' counts toward bonus.", | |
| "enum": [ | |
| "pre", | |
| "post" | |
| ], | |
| "title": "Phase", | |
| "type": "string" | |
| } | |
| }, | |
| "required": [ | |
| "phase" | |
| ], | |
| "title": "OptionsCheckCriterion", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "PostHogConfig": { | |
| "properties": { | |
| "api_key": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "PostHog API key for analytics, if not provided, PostHog will not be enabled, (env: POSTHOG_API_KEY)", | |
| "title": "Api Key" | |
| }, | |
| "host": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "PostHog host URL for analytics, (env: POSTHOG_HOST)", | |
| "title": "Host" | |
| }, | |
| "events": { | |
| "$ref": "#/$defs/EventsConfig", | |
| "description": "PostHog events configuration, what to enable what not" | |
| } | |
| }, | |
| "title": "PostHogConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "ProlificConfig": { | |
| "properties": { | |
| "enabled": { | |
| "default": false, | |
| "description": "Whether Prolific integration is enabled. When true, /study/enroll verifies participants against Prolific before issuing a session.", | |
| "title": "Enabled", | |
| "type": "boolean" | |
| }, | |
| "api_base": { | |
| "default": "https://api.prolific.com", | |
| "description": "Prolific API base URL.", | |
| "title": "Api Base", | |
| "type": "string" | |
| }, | |
| "api_token": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Workspace-scoped API token (env: PROLIFIC_API_TOKEN).", | |
| "title": "Api Token" | |
| }, | |
| "study_id": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "The Prolific study id this server is hosting.", | |
| "title": "Study Id" | |
| }, | |
| "completion_code_success": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "cc value for the success redirect URL (https://app.prolific.com/submissions/complete?cc=...).", | |
| "title": "Completion Code Success" | |
| }, | |
| "completion_code_screenout": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "cc value for screen-out redirects, when applicable.", | |
| "title": "Completion Code Screenout" | |
| }, | |
| "webhook_secret": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Shared secret used to verify X-Prolific-Request-Signature on webhook deliveries (env: PROLIFIC_WEBHOOK_SECRET).", | |
| "title": "Webhook Secret" | |
| }, | |
| "validate_via_api": { | |
| "default": true, | |
| "description": "If True, /study/enroll calls Prolific's GET submission endpoint to confirm (PID, study_id, session_id). Disable only for local dev.", | |
| "title": "Validate Via Api", | |
| "type": "boolean" | |
| }, | |
| "request_timeout_seconds": { | |
| "default": 10.0, | |
| "description": "HTTP timeout for outbound Prolific API calls.", | |
| "title": "Request Timeout Seconds", | |
| "type": "number" | |
| } | |
| }, | |
| "title": "ProlificConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "RetrievalConfig": { | |
| "properties": { | |
| "google_search": { | |
| "$ref": "#/$defs/BuiltInEngineConfig", | |
| "description": "Configuration for the Google Search built-in engine (key: google-search)" | |
| }, | |
| "google_ai_overview": { | |
| "$ref": "#/$defs/BuiltInEngineConfig", | |
| "description": "Configuration for the Google AI Overview built-in engine (key: google-ai-overview)" | |
| }, | |
| "serpapi": { | |
| "$ref": "#/$defs/SerpapiConfig", | |
| "description": "SerpAPI configuration" | |
| }, | |
| "brave_search": { | |
| "$ref": "#/$defs/BraveConfig", | |
| "description": "Brave Search configuration including API settings and frontend display (key: brave-search)" | |
| }, | |
| "openai": { | |
| "description": "OpenAI compatible servers configuration for AI Overview generation, the first item is the primary server", | |
| "items": { | |
| "$ref": "#/$defs/OpenAIServerConfig" | |
| }, | |
| "title": "Openai", | |
| "type": "array" | |
| }, | |
| "default_search_engine": { | |
| "default": "brave", | |
| "description": "Default search engine to use for queries, defaults to brave, can also be serpapi.", | |
| "title": "Default Search Engine", | |
| "type": "string" | |
| }, | |
| "autocomplete_enabled": { | |
| "default": false, | |
| "description": "Whether to enable autocomplete suggestions feature", | |
| "title": "Autocomplete Enabled", | |
| "type": "boolean" | |
| }, | |
| "autocomplete_source": { | |
| "default": "serpapi", | |
| "description": "Default autocomplete source provider", | |
| "title": "Autocomplete Source", | |
| "type": "string" | |
| }, | |
| "search_by_enter": { | |
| "default": true, | |
| "description": "Whether to enable search by pressing Enter key, defaults to true", | |
| "title": "Search By Enter", | |
| "type": "boolean" | |
| } | |
| }, | |
| "title": "RetrievalConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "SerpapiConfig": { | |
| "properties": { | |
| "api_key": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "API key for SerpAPI, get it from https://serpapi.com/dashboard (env: SERPAPI_API_KEY)", | |
| "title": "Api Key" | |
| }, | |
| "engine": { | |
| "default": "google_light", | |
| "description": "SerpAPI engine to use for searches, follow https://serpapi.com/google-light-api for more information (env: SERPAPI_ENGINE)", | |
| "title": "Engine", | |
| "type": "string" | |
| }, | |
| "n_docs": { | |
| "default": 10, | |
| "description": "Number of documents to retrieve for each query", | |
| "title": "N Docs", | |
| "type": "integer" | |
| }, | |
| "location": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Location for SerpAPI searches to emulate user location. Use country name (e.g., 'Australia', 'United States') or city-level location (e.g., 'Austin,Texas,United States'). If not specified, SerpAPI will pick the most popular one.", | |
| "title": "Location" | |
| }, | |
| "enable_ai_overview": { | |
| "default": true, | |
| "description": "Whether to enable the AI Overview feature at the SerpAPI level.\n\nIf AI Overview is embedded in response, it will be included in the output anyways, but if extra request is needed (see https://serpapi.com/ai-overview#api-examples-example-with-an-extra-request-required ), enabling this option will trigger that extra request to fetch it.\n\nWhen this feature is enabled, the engine field will be forced to google (the full Google, not google_light).\n", | |
| "title": "Enable Ai Overview", | |
| "type": "boolean" | |
| }, | |
| "cache_enabled": { | |
| "default": true, | |
| "description": "Whether to enable simple caching of search results, development purpose only, it does not delete cache (env: SERPAPI_CACHE)", | |
| "title": "Cache Enabled", | |
| "type": "boolean" | |
| }, | |
| "cache_folder": { | |
| "default": "/tmp/ase_serpapi_google", | |
| "description": "Directory path for caching search results", | |
| "title": "Cache Folder", | |
| "type": "string" | |
| } | |
| }, | |
| "title": "SerpapiConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "StudyConfig": { | |
| "properties": { | |
| "enabled": { | |
| "default": false, | |
| "description": "Whether user study mode is enabled. When true, the frontend renders the study sidebar.", | |
| "title": "Enabled", | |
| "type": "boolean" | |
| }, | |
| "topics_file": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Path to JSONL topics file (resolved relative to config.yaml location). Each line is a Topic JSON object with topic_id, title, backstory_base, backstory_high_stakes, backstory_low_stakes, narrative, category, questions[].", | |
| "title": "Topics File" | |
| }, | |
| "cms_url": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Public URL of the Payload CMS (for frontend GraphQL calls through the Next.js proxy)", | |
| "title": "Cms Url" | |
| }, | |
| "cms_internal_url": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Internal URL the FastAPI server uses to reach the CMS (e.g. http://cms:3000 inside docker). Falls back to cms_url when unset (env: CMS_INTERNAL_URL).", | |
| "title": "Cms Internal Url" | |
| }, | |
| "cms_proxy_secret": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Shared secret the FastAPI server uses when calling the CMS GraphQL proxy with elevated privileges (env: CMS_PROXY_SECRET).", | |
| "title": "Cms Proxy Secret" | |
| }, | |
| "assignment": { | |
| "$ref": "#/$defs/AssignmentConfig", | |
| "description": "Per-participant topic assignment rules (count, high-stake ratio, seeding)." | |
| }, | |
| "bonus": { | |
| "$ref": "#/$defs/BonusConfig", | |
| "description": "Bonus calculation rules. Server-side only \u2014 never exposed to the frontend." | |
| }, | |
| "complete_criteria": { | |
| "$ref": "#/$defs/CompleteCriteriaConfig", | |
| "description": "Requirements the user must meet before a topic can be marked complete. Contains 'answer' (options_check phases) requirements." | |
| }, | |
| "support_contact": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Support contact (email/URL/text) shown in the sidebar fallback UI when no topics are available. If unset, no contact is shown.", | |
| "title": "Support Contact" | |
| }, | |
| "onboarding_markdown": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Markdown body rendered in a one-time onboarding modal shown on first study landing per study user. After acknowledgement, a 'Study instructions' link in the sidebar re-opens it. Leave unset to disable.", | |
| "title": "Onboarding Markdown" | |
| } | |
| }, | |
| "title": "StudyConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| }, | |
| "SystemConfig": { | |
| "properties": { | |
| "name": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "The name for the server API", | |
| "title": "Name" | |
| }, | |
| "site_title": { | |
| "default": "ASE 2.0", | |
| "description": "The title for the website", | |
| "title": "Site Title", | |
| "type": "string" | |
| }, | |
| "allow_origins": { | |
| "default": [ | |
| "http://localhost:3000", | |
| "https://ase.rankun.org" | |
| ], | |
| "description": "List of allowed origins for CORS, defaults to http://localhost:3000 and https://ase.rankun.org", | |
| "items": { | |
| "type": "string" | |
| }, | |
| "title": "Allow Origins", | |
| "type": "array" | |
| }, | |
| "jwt_secret_key": { | |
| "description": "Secret key for JWT authentication, by default it is a random string, fixing this can help preserve login status between servers and server restarts (env: JWT_SECRET_KEY)", | |
| "title": "Jwt Secret Key", | |
| "type": "string" | |
| }, | |
| "jwt_algorithm": { | |
| "default": "HS256", | |
| "description": "JWT algorithm to use for token encoding/decoding", | |
| "title": "Jwt Algorithm", | |
| "type": "string" | |
| }, | |
| "jwt_access_token_expire_minutes": { | |
| "default": 14400, | |
| "description": "JWT access token expiration time in minutes, defaults to 14,400 minutes (240 hours)", | |
| "title": "Jwt Access Token Expire Minutes", | |
| "type": "integer" | |
| }, | |
| "admin_api_key": { | |
| "description": "Admin API Key for /admin APIs, by default it is a random string and won't be shown to you, customize this if you need Admin API access and restart the application (env: ADMIN_API_KEY)", | |
| "title": "Admin Api Key", | |
| "type": "string" | |
| }, | |
| "admin_new_user_id_length": { | |
| "default": 6, | |
| "description": "Length of admin generated user ID codes, defaults to 6", | |
| "title": "Admin New User Id Length", | |
| "type": "integer" | |
| }, | |
| "database_url": { | |
| "default": "sqlite:///database.db", | |
| "description": "Database URL string, use 'sqlite:///database.db' for file-based SQLite (default), 'sqlite:///:memory:' for in-memory SQLite, sqlite:////absolute/path/to/database.db for absolute path SQLite or 'postgresql://user:password@localhost/dbname' for PostgreSQL (env: DATABASE_URL)", | |
| "title": "Database Url", | |
| "type": "string" | |
| }, | |
| "database_host": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Database host (e.g., 'localhost' or 'postgres'), higher priority than database_url, this is mainly for postgres, for other databases use database_url (env: DATABASE_HOST)", | |
| "title": "Database Host" | |
| }, | |
| "database_port": { | |
| "anyOf": [ | |
| { | |
| "type": "integer" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Database port (e.g., 5432 for PostgreSQL) (env: DATABASE_PORT)", | |
| "title": "Database Port" | |
| }, | |
| "database_name": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Database name (env: DATABASE_NAME)", | |
| "title": "Database Name" | |
| }, | |
| "database_user": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Database username (env: DATABASE_USER)", | |
| "title": "Database User" | |
| }, | |
| "database_password": { | |
| "anyOf": [ | |
| { | |
| "type": "string" | |
| }, | |
| { | |
| "type": "null" | |
| } | |
| ], | |
| "default": null, | |
| "description": "Database password (env: DATABASE_PASSWORD)", | |
| "title": "Database Password" | |
| } | |
| }, | |
| "title": "SystemConfig", | |
| "type": "object", | |
| "additionalProperties": false | |
| } | |
| }, | |
| "properties": { | |
| "system": { | |
| "$ref": "#/$defs/SystemConfig", | |
| "description": "System configuration settings" | |
| }, | |
| "features": { | |
| "$ref": "#/$defs/FeaturesConfig", | |
| "description": "Feature configuration settings" | |
| }, | |
| "retrieval": { | |
| "$ref": "#/$defs/RetrievalConfig", | |
| "description": "Retrieval configuration settings" | |
| }, | |
| "posthog": { | |
| "$ref": "#/$defs/PostHogConfig", | |
| "description": "PostHog analytics and data monitoring configuration" | |
| }, | |
| "study": { | |
| "$ref": "#/$defs/StudyConfig", | |
| "description": "User study mode configuration - enables topic-driven relevance judgment workflow" | |
| }, | |
| "prolific": { | |
| "$ref": "#/$defs/ProlificConfig", | |
| "description": "Prolific integration configuration. Server-side only \u2014 credentials and webhook secrets are never exposed to the frontend." | |
| } | |
| }, | |
| "title": "Application Configuration", | |
| "type": "object", | |
| "$schema": "http://json-schema.org/draft-07/schema#", | |
| "description": "Configuration schema for the application", | |
| "additionalProperties": false | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment