(
    ip_address: "127.0.0.1",       // required
    port: 8080,                    // required
    google_engine_key: "",         // optional, used for web search
    google_search_key: "",         // optional, used for web search
    allowed_path: "./",            // optional, allowed path for tools, multiple paths separated by commas, default: ./
    maxage: "1DAY",                // required, cookie maxage, support: SECOND, MINUTE, HOUR, DAY, WEEK
    show_english: true,            // required, true: show english page，false: show chinese page
    skills_path: Some("./skills"), // skills path
    bgc: "1",                      // background color, support hex color (e.g. #F5F5DC, #fff, #000), or built-in color: 1(#E6E6E6), 2(#F5F5DC), 3(#FFFFE0), 4(#E6E6FA), default: 1
    outpath: "./chat-log",         // required, where to save chat log files
    model_config: [
        Config(
            provider: "openai",          // required
            api_key: "sk-xxx",           // required
            endpoint: "https://api.xxx", // required
            models: [
                Model(
                    name: "gpt-3.5-turbo",                    // required
                    pricing: "(in: 0.0035/k, out: 0.0105/k)", // optional
                    discription: "OpenAI gpt-3.5 model",      // optional, information displayed when mouse hover this model
                    group: "GPT3",                            // required, models that are adjacent and belong to the same group will be placed together in the dropdown menu
                    is_default: false,                        // required, should it be used as the default model
                    is_cot: false,                            // required, does it support Chain of thought (CoT) deep reasoning
                ),
                Model(
                    name: "gpt-4.1-mini-2025-04-14",
                    pricing: "(in: 0.0028/k, out: 0.0112/k)",
                    discription: "OpenAI gpt-4.1 model",
                    group: "gpt-4.1",
                    is_default: false,
                    is_cot: false,
                ),
                Model(
                    name: "gpt-4.1-nano-2025-04-14",
                    pricing: "(in: 0.0007/k, out: 0.0028/k)",
                    discription: "OpenAI gpt-4.1 model",
                    group: "gpt-4.1",
                    is_default: false,
                    is_cot: false,
                ),
            ],
        ),
        Config(
            provider: "claude",
            api_key: "sk-xxx",
            endpoint: "https://api.xxx",
            models: [
                Model(
                    name: "claude-3-5-sonnet-20241022",
                    pricing: "(in: 0.015/k, out: 0.075/k)",
                    discription: "claude model",
                    group: "Claude",
                    is_default: false,
                    is_cot: false,
                ),
                Model(
                    name: "claude-3-7-sonnet-20250219",
                    pricing: "(in: 0.015/k, out: 0.075/k)",
                    discription: "claude model",
                    group: "Claude",
                    is_default: false,
                    is_cot: true,
                ),
            ],
        ),
        Config(
            provider: "gemini",
            api_key: "sk-xxx",
            endpoint: "https://api.xxx",
            models: [
                Model(
                    name: "gemini-2.0-pro-exp-02-05",
                    pricing: "(in: 0.01/k, out: 0.04/k)",
                    discription: "google gemini model",
                    group: "Gemini",
                    is_default: false,
                    is_cot: false,
                ),
                Model(
                    name: "gemini-2.0-flash",
                    pricing: "(in: 0.005/k, out: 0.02)",
                    discription: "google gemini model",
                    group: "Gemini",
                    is_default: false,
                    is_cot: false,
                ),
                Model(
                    name: "gemini-2.5-flash-preview-04-17",
                    pricing: "(in: 0.0006/k, out: 0.014/k)",
                    discription: "google gemini model",
                    group: "Gemini",
                    is_default: false,
                    is_cot: false,
                ),
            ],
        ),
        Config(
            provider: "deepseek",
            api_key: "sk-xxx",
            endpoint: "https://api.deepseek.com/v1",
            models: [
                Model(
                    name: "deepseek-chat",
                    pricing: "(in: 0.002/k, out: 0.008/k)",
                    discription: "deepseek new model DeepSeek-V3",
                    group: "DeepSeek",
                    is_default: true,
                    is_cot: false,
                ),
                Model(
                    name: "deepseek-reasoner",
                    pricing: "(in: 0.004/k, out: 0.016/k)",
                    discription: "deepseek new cof model DeepSeek-R1",
                    group: "DeepSeek",
                    is_default: false,
                    is_cot: true,
                ),
            ],
        ),
    ],
    prompts: [
        Prompt(
            name: "translator",
            content: "I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in English. I want you to replace my simplified A0-level words and sentences with more beautiful and elegant, upper level English words and sentences. Keep the meaning same, but make them more literary. I want you to only reply the correction, the improvements and nothing else, do not write explanations.",
        ),
        Prompt(
            name: "Rewrite to Rust",
            content: "Rewrite the following code in Rust.",
        ),
    ],
    external_tools: [
        SingleExternalTool(
            name: "complement_DNA_or_RNA",
            command: "./complement-linux-x86_x64-musl",
            description: "Calculate complement of given DNA or RNA",
            approval: false,
            schema: r#"
{
    "properties": {
        "seq": {
            "type": "string",
            "description": "DNA or RNA sequence.",
        },
        "revcomp": {
            "type": "boolean",
            "description": "Whether to obtain the reverse complementary sequence. If present, enables reverse complementation.",
        },
        "rna": {
            "type": "boolean",
            "description": "Whether to use RNA alphabet.",
        },
    },
    "required": ["seq"],
    "type": "object",
}
"#,
        ),
        SingleExternalTool(
            name: "add_two_value",
            command: "python",
            args: ["./doc/add_two_value.py"],
            description: "add two value",
            schema: r#"
{
    "properties": {
        "a": {
            "type": "integer",
            "description": "The first value.",
        },
        "b": {
            "type": "integer",
            "description": "The second value.",
        },
    },
    "required": ["a", "b"],
    "type": "object",
}
"#,
        ),
    ],
    mcp_servers: [
        StdIoServer(
            command: "./rust-mcp-filesystem",
            args: [
                "--allow-write",
                "./",
            ],
        ),
        StdIoServer(
            command: "uvx",
            args: [
                "excel-mcp-server",
                "stdio",
            ],
        ),
    ]
)
