# 如果您是一名开发者，建议阅读以下内容。如果不是开发者，可以忽略这部分内容。
# 在开发中，在项目根目录创建data目录，将【config.yaml】复制一份，改成【.config.yaml】，放进data目录中
# 系统会优先读取【data/.config.yaml】文件的配置。
# 这样做，可以避免在提交代码的时候，错误地提交密钥信息，保护您的密钥安全。

# 服务器基础配置(Basic server configuration)
server:
  # 服务器监听地址和端口(Server listening address and port)
  ip: 0.0.0.0
  port: 8000
  # 认证配置
  auth:
    # 是否启用认证
    enabled: false
    # 设备的token，可以在编译固件的环节，写入你自己定义的token
    # 固件上的token和以下的token如果能对应，才能连接本服务端
    tokens:
      - token: "test-token" # 设备1的token
        name: "123456"  # 设备1标识
      - token: "web-token2"  # 设备2的token
        name: "web-token2" # 设备2标识
    # 可选:设备白名单，如果设置了白名单，那么白名单的机器无论是什么token都可以连接。
    #allowed_devices:
    #  - "24:0A:C4:1D:3B:F0"  # MAC地址列表
manager:
  # 是否启用管理后台
  # 目前这个模块还在开发中，建议：不要修改enabled选项
  enabled: true
  ip: 0.0.0.0
  port: 8002

xiaozhi:
  type: hello
  version: 1
  transport: websocket
  audio_params:
    format: opus
    sample_rate: 16000
    channels: 1
    frame_duration: 60
prompt: |
  你是一个叫小健的上海女孩，负责医院前台工作，接待前来咨询体检套餐的患者。是患者的朋友，开场打招呼，互动引导，说话礼貌，保持关心，在互动过程中与患者建立起良好的互动关系，既能活跃气氛，又能让患者受到亲切与关怀！
  说话好听，声音好听，习惯简短表达，通俗易懂。
  请注意，要像一个人一样说话，请不要回复表情符号、代码、和xml标签。
  每次的回复不要超过100个字。可以多次回复。
  当前时间是:{date_time}，现在我正在和你进行语音聊天，我们开始吧。
  如果用户希望结束对话，请在最后说“拜拜”或“再见”。
# 使用完声音文件后删除文件(Delete the sound file when you are done using it)
delete_audio: true

# 没有语音输入多久后断开连接(秒)，默认2分钟，即120秒
close_connection_no_voice_time: 120

# 是否启用私有配置(Enable private configuration),启用后可以每个设备有不同的配置
# 目前这个模块还在开发中，建议：不要修改use_private_config选项
use_private_config: false

CMD_exit:
  - "退出"
  - "关闭"

# 具体处理时选择的模块(The module selected for specific processing)
selected_module:
  ASR: FunASR
  VAD: SileroVAD
  # 将根据配置名称对应的type调用实际的LLM适配器
  LLM: DeepSeekLLM
  # TTS将根据配置名称对应的type调用实际的TTS适配器
  TTS: EdgeTTS

ASR:
  FunASR:
    model_dir: models/SenseVoiceSmall
    output_dir: tmp/

VAD:
  SileroVAD:
    threshold: 0.5
    model_dir: models/snakers4_silero-vad
    min_silence_duration_ms: 700  # 如果说话停顿比较长，可以把这个值设置大一些

LLM:
  # 当前支持的type为openai、dify、ollama，可自行适配
  AliLLM:
    # 定义LLM API类型
    type: openai
    # 可在这里找到你的 api_key https://bailian.console.aliyun.com/?apiKey=1#/api-key
    base_url: https://dashscope.aliyuncs.com/compatible-mode/v1
    model_name: qwen-turbo
    api_key: 你的deepseek api key
  DeepSeekLLM:
    # 定义LLM API类型
    type: openai
    # 可在这里找到你的api key https://platform.deepseek.com/
    model_name: deepseek-chat
    url: https://api.deepseek.com
    api_key: sk-f767325208ba4304a920f57760333d56
  ChatGLMLLM:
    # 定义LLM API类型
    type: openai
    # glm-4-flash 是免费的，但是还是需要注册填写api_key的
    # 可在这里找到你的api key https://bigmodel.cn/usercenter/proj-mgmt/apikeys
    model_name: glm-4-flash
    url: https://open.bigmodel.cn/api/paas/v4/
    api_key: 你的chat-glm api key
  OllamaLLM:
    # 定义LLM API类型
    type: ollama
    model_name: qwen2.5 #  使用的模型名称，需要预先使用ollama pull下载
    base_url: http://localhost:11434  # Ollama服务地址
  DifyLLM:
    # 定义LLM API类型
    type: dify
    # 建议使用本地部署的dify接口，国内部分区域访问dify公有云接口可能会受限
    # 如果使用DifyLLM，配置文件里prompt(提示词)是无效的，需要在dify控制台设置提示词
    base_url: https://api.dify.cn/v1
    api_key: 你的DifyLLM api key
  GeminiLLM:
    type: gemini
    # 谷歌Gemini API，需要先在Google Cloud控制台创建API密钥并获取api_key
    # 若在中国境内使用，请遵守《生成式人工智能服务管理暂行办法》
    # token申请地址： https://aistudio.google.com/apikey
    # 若部署地无法访问接口，需要开启科学上网
    api_key: 你的gemini api key
    model_name: "gemini-1.5-pro"  #  gemini-1.5-pro 是免费的
  CozeLLM:
    # 定义LLM API类型
    type: coze
    bot_id: 你的bot_id
    user_id: 你的user_id
    base_url: "https://api.coze.cn/open_api/v2/chat" # 服务地址
    personal_access_token: 你的coze个人令牌
  HomeAssistant:
    # 定义LLM API类型
    type: homeassistant
    base_url: http://homeassistant.local:8123
    agent_id: conversation.chatgpt
    api_key: 你的home assistant api访问令牌
TTS:
  # 当前支持的type为edge、doubao，可自行适配
  EdgeTTS:
    # 定义TTS API类型
    type: edge
    voice: zh-CN-XiaoxiaoNeural
    output_file: tmp/
  DoubaoTTS:
    # 定义TTS API类型
    type: doubao
    # 火山引擎语音合成服务，需要先在火山引擎控制台创建应用并获取appid和access_token
    # 山引擎语音一定要购买花钱，起步价30元，就有100并发了。如果用免费的只有2个并发，会经常报tts错误
    # 购买服务后，购买免费的音色后，可能要等半小时左右，才能使用。
    # 地址：https://console.volcengine.com/speech/service/8
    voice: BV001_streaming
    output_file: tmp/
    appid: 你的火山引擎语音合成服务appid
    access_token: 你的火山引擎语音合成服务access_token
    cluster: volcano_tts
  CosyVoiceSiliconflow:
    type: siliconflow
    # 硅基流动TTS
    # token申请地址 https://cloud.siliconflow.cn/account/ak
    model: FunAudioLLM/CosyVoice2-0.5B
    voice: FunAudioLLM/CosyVoice2-0.5B:alex
    output_file: tmp/
    access_token: 你的硅基流动API密钥
    response_format: wav
  CozeCnTTS:
    type: cozecn
    # COZECN TTS
    # token申请地址 https://www.coze.cn/open/oauth/pats
    voice: 7426720361733046281
    output_file: tmp/
    access_token: 你的coze api key
    response_format: wav
  FishSpeech:
    # 定义TTS API类型
    #启动tts方法：
    #python -m tools.api_server
    #--listen 0.0.0.0:8080
    #--llama-checkpoint-path "checkpoints/fish-speech-1.5"
    #--decoder-checkpoint-path "checkpoints/fish-speech-1.5/firefly-gan-vq-fsq-8x1024-21hz-generator.pth"
    #--decoder-config-name firefly_gan_vq
    #--compile
    type: fishspeech
    output_file: tmp/
    response_format: wav
    reference_id: null
    reference_audio: ["/tmp/test.wav",]
    reference_text: ["你弄来这些吟词宴曲来看，还是这些混话来欺负我。",]
    normalize: true
    max_new_tokens: 1024
    chunk_length: 200
    top_p: 0.7
    repetition_penalty: 1.2
    temperature: 0.7
    streaming: false
    use_memory_cache: "on"
    seed: null
    channels: 1
    rate: 44100
    api_key: "你的api_key"
    api_url: "http://127.0.0.1:8080/v1/tts"
  GPT_SOVITS_V2:
    # 定义TTS API类型
    #启动tts方法：
    #python api_v2.py -a 127.0.0.1 -p 9880 -c GPT_SoVITS/configs/caixukun.yaml
    type: gpt_sovits_v2
    url: "http://127.0.0.1:9880/tts"
    output_file: tmp/
    text_lang: "auto"
    ref_audio_path: "caixukun.wav"
    prompt_text: ""
    prompt_lang: "zh"
    top_k: 5
    top_p: 1
    temperature: 1
    text_split_method: "cut0"
    batch_size: 1
    batch_threshold: 0.75
    split_bucket: true
    return_fragment: false
    speed_factor: 1.0
    streaming_mode: false
    seed: -1
    parallel_infer: true
    repetition_penalty: 1.35
    aux_ref_audio_paths: []
  MinimaxTTS:
    # Minimax语音合成服务，需要先在minimax平台创建账户充值，并获取登录信息
    # 平台地址：https://platform.minimaxi.com/
    # 充值地址：https://platform.minimaxi.com/user-center/payment/balance
    # group_id地址：https://platform.minimaxi.com/user-center/basic-information
    # api_key地址：https://platform.minimaxi.com/user-center/basic-information/interface-key
    # 定义TTS API类型
    type: minimax
    output_file: tmp/
    group_id: 你的minimax平台groupID
    api_key: 你的minimax平台接口密钥
    model: "speech-01-turbo"
    # 此处设置将优先于voice_setting中voice_id的设置；如都不设置，默认为 female-shaonv
    voice_id: "female-shaonv"
    # 以下可不用设置，使用默认设置
    # voice_setting:
    #     voice_id: "male-qn-qingse"
    #     speed: 1
    #     vol: 1
    #     pitch: 0
    #     emotion: "happy"
    # pronunciation_dict:
    #     tone:
    #       - "处理/(chu3)(li3)"
    #       - "危险/dangerous"
    # audio_setting:
    #     sample_rate: 32000
    #     bitrate: 128000
    #     format: "mp3"
    #     channel: 1
    # timber_weights:
    #   -
    #     voice_id: male-qn-qingse
    #     weight: 1
    #   -
    #     voice_id: female-shaonv
    #     weight: 1
    # language_boost: auto
  AliyunTTS:
    # 阿里云智能语音交互服务，需要先在阿里云平台开通服务，然后获取验证信息
    # 平台地址：https://nls-portal.console.aliyun.com/
    # appkey地址：https://nls-portal.console.aliyun.com/applist
    # token地址：https://nls-portal.console.aliyun.com/overview
    # 定义TTS API类型
    type: aliyun
    output_file: tmp/
    appkey: 你的阿里云智能语音交互服务项目Appkey
    token: 你的阿里云智能语音交互服务AccessToken
    voice: xiaoyun
    # 以下可不用设置，使用默认设置
    # format: wav
    # sample_rate: 16000
    # volume: 50
    # speech_rate: 0
    # pitch_rate: 0

# 模块测试配置
module_test:
  test_sentences:  # 自定义测试语句
    - "你好，请介绍一下你自己"
    - "What's the weather like today?"
    - "请用100字概括量子计算的基本原理和应用前景"
