Full Code of dataelement/bisheng for AI

main 39bc019609c7 cached
3195 files
52.0 MB
11.0M tokens
17806 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (43,782K chars total). Download the full file to get everything.
Repository: dataelement/bisheng
Branch: main
Commit: 39bc019609c7
Files: 3195
Total size: 52.0 MB

Directory structure:
gitextract_1ecxe3lj/

├── .drone.yml
├── .gitattributes
├── .github/
│   └── workflows/
│       ├── base_ci.yml
│       ├── build_linux_only.yml
│       ├── ci.yml
│       ├── release.yml
│       └── test.yml
├── .gitignore
├── .gitmodules
├── .pre-commit-config.yaml
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── README_CN.md
├── README_JPN.md
├── SECURITY.md
├── docker/
│   ├── bisheng/
│   │   ├── config/
│   │   │   └── config.yaml
│   │   └── entrypoint.sh
│   ├── bisheng-ft/
│   │   └── config.yaml
│   ├── bisheng-uns/
│   │   └── config.yaml
│   ├── docker-compose-ft.yml
│   ├── docker-compose-office.yml
│   ├── docker-compose-uns.yml
│   ├── docker-compose.yml
│   ├── mysql/
│   │   └── conf/
│   │       └── my.cnf
│   ├── nginx/
│   │   ├── conf.d/
│   │   │   ├── default.conf
│   │   │   └── websocket.conf
│   │   └── nginx.conf
│   ├── office/
│   │   └── bisheng/
│   │       ├── all.js
│   │       ├── bisheng.js
│   │       ├── config.json
│   │       └── index.html
│   └── redis/
│       └── redis.conf
├── src/
│   ├── backend/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── alembic.ini
│   │   ├── base.Dockerfile
│   │   ├── bisheng/
│   │   │   ├── .gitignore
│   │   │   ├── __init__.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── router.py
│   │   │   │   ├── services/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── assistant.py
│   │   │   │   │   ├── assistant_agent.py
│   │   │   │   │   ├── assistant_base.py
│   │   │   │   │   ├── audit_log.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── chat_imp.py
│   │   │   │   │   ├── component.py
│   │   │   │   │   ├── dataset_service.py
│   │   │   │   │   ├── etl4lm_loader.py
│   │   │   │   │   ├── evaluation.py
│   │   │   │   │   ├── flow.py
│   │   │   │   │   ├── invite_code/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── code_validator.py
│   │   │   │   │   │   └── invite_code.py
│   │   │   │   │   ├── knowledge.py
│   │   │   │   │   ├── knowledge_imp.py
│   │   │   │   │   ├── libreoffice_converter.py
│   │   │   │   │   ├── md_from_docx.py
│   │   │   │   │   ├── md_from_excel.py
│   │   │   │   │   ├── md_from_html.py
│   │   │   │   │   ├── md_from_pdf.py
│   │   │   │   │   ├── md_from_pptx.py
│   │   │   │   │   ├── md_post_processing.py
│   │   │   │   │   ├── patch_130.py
│   │   │   │   │   ├── role_group_service.py
│   │   │   │   │   ├── tag.py
│   │   │   │   │   ├── tiktoken_file/
│   │   │   │   │   │   └── cl100k_base.tiktoken
│   │   │   │   │   ├── utils.py
│   │   │   │   │   ├── workflow.py
│   │   │   │   │   └── workstation/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── workstation.py
│   │   │   │   ├── utils.py
│   │   │   │   └── v1/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── assistant.py
│   │   │   │       ├── audit.py
│   │   │   │       ├── base.py
│   │   │   │       ├── callback.py
│   │   │   │       ├── chat.py
│   │   │   │       ├── component.py
│   │   │   │       ├── dataset.py
│   │   │   │       ├── endpoints.py
│   │   │   │       ├── evaluation.py
│   │   │   │       ├── flows.py
│   │   │   │       ├── invite_code.py
│   │   │   │       ├── mark_task.py
│   │   │   │       ├── report.py
│   │   │   │       ├── schema/
│   │   │   │       │   ├── base_schema.py
│   │   │   │       │   ├── chat_schema.py
│   │   │   │       │   ├── dataset_param.py
│   │   │   │       │   ├── knowledge.py
│   │   │   │       │   ├── mark_schema.py
│   │   │   │       │   └── workflow.py
│   │   │   │       ├── schemas.py
│   │   │   │       ├── skillcenter.py
│   │   │   │       ├── tag.py
│   │   │   │       ├── usergroup.py
│   │   │   │       ├── validate.py
│   │   │   │       ├── variable.py
│   │   │   │       ├── workflow.py
│   │   │   │       └── workstation.py
│   │   │   ├── chat/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── client.py
│   │   │   │   ├── clients/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── workflow_client.py
│   │   │   │   ├── config.py
│   │   │   │   ├── handlers.py
│   │   │   │   ├── manager.py
│   │   │   │   ├── types.py
│   │   │   │   └── utils.py
│   │   │   ├── chat_session/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── router.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       └── chat.py
│   │   │   ├── common/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── constants/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── enums/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── telemetry.py
│   │   │   │   │   └── vectorstore_metadata.py
│   │   │   │   ├── dependencies/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── core_deps.py
│   │   │   │   │   └── user_deps.py
│   │   │   │   ├── errcode/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── assistant.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── chat.py
│   │   │   │   │   ├── component.py
│   │   │   │   │   ├── dataset.py
│   │   │   │   │   ├── finetune.py
│   │   │   │   │   ├── flow.py
│   │   │   │   │   ├── http_error.py
│   │   │   │   │   ├── knowledge.py
│   │   │   │   │   ├── linsight.py
│   │   │   │   │   ├── llm.py
│   │   │   │   │   ├── model_deploy.py
│   │   │   │   │   ├── qa.py
│   │   │   │   │   ├── server.py
│   │   │   │   │   ├── tag.py
│   │   │   │   │   ├── telemetry.py
│   │   │   │   │   ├── tool.py
│   │   │   │   │   ├── user.py
│   │   │   │   │   └── workstation.py
│   │   │   │   ├── exceptions/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── auth.py
│   │   │   │   ├── init_data.py
│   │   │   │   ├── models/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── config.py
│   │   │   │   ├── repositories/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── implementations/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── base_repository_impl.py
│   │   │   │   │   │   └── config_repository_impl.py
│   │   │   │   │   └── interfaces/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── base_repository.py
│   │   │   │   │       └── config_repository.py
│   │   │   │   ├── schemas/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── api.py
│   │   │   │   │   ├── rag_schema.py
│   │   │   │   │   └── telemetry/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── base_telemetry_schema.py
│   │   │   │   │       └── event_data_schema.py
│   │   │   │   ├── services/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── config_service.py
│   │   │   │   │   └── telemetry/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── telemetry_service.py
│   │   │   │   └── utils/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── markdown_cmpnt/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── md_to_docx/
│   │   │   │       │   │   ├── __init__.py
│   │   │   │       │   │   ├── config/
│   │   │   │       │   │   │   └── default_style.py
│   │   │   │       │   │   ├── markdocx.py
│   │   │   │       │   │   ├── parser/
│   │   │   │       │   │   │   ├── __init__.py
│   │   │   │       │   │   │   ├── ext_md_syntax.py
│   │   │   │       │   │   │   └── md_parser.py
│   │   │   │       │   │   ├── provider/
│   │   │   │       │   │   │   ├── __init__.py
│   │   │   │       │   │   │   ├── docx_plus.py
│   │   │   │       │   │   │   ├── docx_processor.py
│   │   │   │       │   │   │   ├── simple_style.py
│   │   │   │       │   │   │   └── style_manager.py
│   │   │   │       │   │   └── utils/
│   │   │   │       │   │       ├── __init__.py
│   │   │   │       │   │       ├── style_enum.py
│   │   │   │       │   │       └── yaml_utils.py
│   │   │   │       │   └── md_to_pdf.py
│   │   │   │       └── util.py
│   │   │   ├── components/
│   │   │   │   ├── __init__.py
│   │   │   │   └── custom_components/
│   │   │   │       ├── CustomComponent.py
│   │   │   │       └── __init__.py
│   │   │   ├── core/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── ai/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── asr/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── aliyun_asr_client.py
│   │   │   │   │   │   ├── azure_openai_asr_client.py
│   │   │   │   │   │   └── openai_asr_client.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── embeddings/
│   │   │   │   │   │   └── __init__.py
│   │   │   │   │   ├── llm/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── chat_openai_compatible.py
│   │   │   │   │   │   ├── custom_chat_deepseek.py
│   │   │   │   │   │   └── custom_chat_tongyi.py
│   │   │   │   │   ├── rerank/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── common_rerank.py
│   │   │   │   │   │   ├── rrf_rerank.py
│   │   │   │   │   │   ├── xinference/
│   │   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   │   ├── _compat.py
│   │   │   │   │   │   │   ├── client/
│   │   │   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   │   │   ├── common.py
│   │   │   │   │   │   │   │   ├── handlers.py
│   │   │   │   │   │   │   │   └── restful/
│   │   │   │   │   │   │   │       ├── __init__.py
│   │   │   │   │   │   │   │       ├── async_restful_client.py
│   │   │   │   │   │   │   │       └── restful_client.py
│   │   │   │   │   │   │   ├── fields.py
│   │   │   │   │   │   │   └── types.py
│   │   │   │   │   │   └── xinference_rerank.py
│   │   │   │   │   ├── test/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── test.py
│   │   │   │   │   └── tts/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── aliyun_tts_client.py
│   │   │   │   │       ├── azure_openai_tts_client.py
│   │   │   │   │       └── openai_tts_client.py
│   │   │   │   ├── cache/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── flow.py
│   │   │   │   │   ├── manager.py
│   │   │   │   │   ├── redis_conn.py
│   │   │   │   │   ├── redis_manager.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── config/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── settings.py
│   │   │   │   ├── context/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── examples.py
│   │   │   │   │   └── manager.py
│   │   │   │   ├── database/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── alembic/
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── env.py
│   │   │   │   │   │   ├── script.py.mako
│   │   │   │   │   │   └── versions/
│   │   │   │   │   │       └── v2_3_0_beta1_9ba42685e830.py
│   │   │   │   │   ├── connection.py
│   │   │   │   │   └── manager.py
│   │   │   │   ├── external/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── http_client/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── client.py
│   │   │   │   │       └── http_client_manager.py
│   │   │   │   ├── logger.py
│   │   │   │   ├── middleware/
│   │   │   │   │   └── __init__.py
│   │   │   │   ├── prompts/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── manager.py
│   │   │   │   │   ├── prompt_loader.py
│   │   │   │   │   └── yaml/
│   │   │   │   │       ├── gen_title.yaml
│   │   │   │   │       ├── qa.yaml
│   │   │   │   │       ├── sop.yaml
│   │   │   │   │       └── workstation.yaml
│   │   │   │   ├── search/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── elasticsearch/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── es_connection.py
│   │   │   │   │       └── manager.py
│   │   │   │   ├── storage/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── minio/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── minio_manager.py
│   │   │   │   │       └── minio_storage.py
│   │   │   │   └── vectorstore/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── ensemble_retriever.py
│   │   │   │       └── multi_retriever.py
│   │   │   ├── custom/
│   │   │   │   ├── __init__.py
│   │   │   │   └── customs.py
│   │   │   ├── database/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── data/
│   │   │   │   │   ├── 0254d1808a5247d2a3ee0d0011819acb.docx
│   │   │   │   │   ├── component.json
│   │   │   │   │   ├── sft_model.json
│   │   │   │   │   ├── t_gpts_tools.json
│   │   │   │   │   ├── t_gpts_tools_type.json
│   │   │   │   │   └── template.json
│   │   │   │   └── models/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── assistant.py
│   │   │   │       ├── audit_log.py
│   │   │   │       ├── component.py
│   │   │   │       ├── dataset.py
│   │   │   │       ├── evaluation.py
│   │   │   │       ├── flow.py
│   │   │   │       ├── flow_version.py
│   │   │   │       ├── group.py
│   │   │   │       ├── group_resource.py
│   │   │   │       ├── invite_code.py
│   │   │   │       ├── mark_app_user.py
│   │   │   │       ├── mark_record.py
│   │   │   │       ├── mark_task.py
│   │   │   │       ├── message.py
│   │   │   │       ├── recall_chunk.py
│   │   │   │       ├── report.py
│   │   │   │       ├── role.py
│   │   │   │       ├── role_access.py
│   │   │   │       ├── session.py
│   │   │   │       ├── tag.py
│   │   │   │       ├── template.py
│   │   │   │       ├── user_group.py
│   │   │   │       ├── user_link.py
│   │   │   │       └── variable_value.py
│   │   │   ├── default_node.yaml
│   │   │   ├── field_typing/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── constants.py
│   │   │   │   └── range_spec.py
│   │   │   ├── finetune/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── finetune.py
│   │   │   │   │   └── server.py
│   │   │   │   ├── domain/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── models/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── finetune.py
│   │   │   │   │   │   ├── model_deploy.py
│   │   │   │   │   │   ├── preset_train.py
│   │   │   │   │   │   ├── server.py
│   │   │   │   │   │   └── sft_model.py
│   │   │   │   │   ├── services/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── finetune.py
│   │   │   │   │   │   └── finetune_file.py
│   │   │   │   │   └── sft_backend.py
│   │   │   │   ├── schemas.py
│   │   │   │   └── utils.py
│   │   │   ├── graph/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── edge/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── graph/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── constants.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── utils.py
│   │   │   │   └── vertex/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── base.py
│   │   │   │       ├── constants.py
│   │   │   │       └── types.py
│   │   │   ├── initdb_config.yaml
│   │   │   ├── interface/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── agents/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── custom.py
│   │   │   │   │   └── prebuilt.py
│   │   │   │   ├── autogenRole/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── base.py
│   │   │   │   ├── chains/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── custom.py
│   │   │   │   ├── custom/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── code_parser/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── code_parser.py
│   │   │   │   │   │   └── utils.py
│   │   │   │   │   ├── custom_component/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── component.py
│   │   │   │   │   │   └── custom_component.py
│   │   │   │   │   ├── directory_reader/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── directory_reader.py
│   │   │   │   │   │   └── utils.py
│   │   │   │   │   ├── schema.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── custom_lists.py
│   │   │   │   ├── document_loaders/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── embeddings/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── custom.py
│   │   │   │   ├── importing/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── initialize/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── llm.py
│   │   │   │   │   ├── loading.py
│   │   │   │   │   ├── utils.py
│   │   │   │   │   └── vector_store.py
│   │   │   │   ├── inputoutput/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── listing.py
│   │   │   │   ├── llms/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── memories/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── output_parsers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── prompts/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── custom.py
│   │   │   │   ├── retrievers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── run.py
│   │   │   │   ├── text_splitters/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── toolkits/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── custom.py
│   │   │   │   ├── tools/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── constants.py
│   │   │   │   │   ├── custom.py
│   │   │   │   │   └── util.py
│   │   │   │   ├── types.py
│   │   │   │   ├── utilities/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── utils.py
│   │   │   │   ├── vector_store/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── constants.py
│   │   │   │   │   └── custom.py
│   │   │   │   └── wrappers/
│   │   │   │       ├── __init__.py
│   │   │   │       └── base.py
│   │   │   ├── jcloud.yml
│   │   │   ├── knowledge/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── dependencies.py
│   │   │   │   │   ├── endpoints/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── knowledge.py
│   │   │   │   │   │   └── qa.py
│   │   │   │   │   └── router.py
│   │   │   │   ├── domain/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── knowledge_rag.py
│   │   │   │   │   ├── models/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── knowledge.py
│   │   │   │   │   │   └── knowledge_file.py
│   │   │   │   │   ├── repositories/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── implementations/
│   │   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   │   ├── knowledge_file_repository_impl.py
│   │   │   │   │   │   │   └── knowledge_repository_impl.py
│   │   │   │   │   │   └── interfaces/
│   │   │   │   │   │       ├── __init__.py
│   │   │   │   │   │       ├── knowledge_file_repository.py
│   │   │   │   │   │       └── knowledge_repository.py
│   │   │   │   │   ├── schemas/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── knowledge_file_schema.py
│   │   │   │   │   │   ├── knowledge_rag_schema.py
│   │   │   │   │   │   └── knowledge_schema.py
│   │   │   │   │   ├── services/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── knowledge_file_service.py
│   │   │   │   │   │   └── knowledge_service.py
│   │   │   │   │   └── utils.py
│   │   │   │   └── rag/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── elasticsearch_factory.py
│   │   │   │       └── milvus_factory.py
│   │   │   ├── linsight/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── endpoints/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── linsight.py
│   │   │   │   │   └── router.py
│   │   │   │   ├── domain/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── models/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── linsight_execute_task.py
│   │   │   │   │   │   ├── linsight_session_version.py
│   │   │   │   │   │   └── linsight_sop.py
│   │   │   │   │   ├── schemas/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── inspiration_schema.py
│   │   │   │   │   │   └── linsight_schema.py
│   │   │   │   │   ├── services/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── message_stream_handle.py
│   │   │   │   │   │   ├── sop_manage.py
│   │   │   │   │   │   ├── state_message_manager.py
│   │   │   │   │   │   └── workbench_impl.py
│   │   │   │   │   ├── task_exec.py
│   │   │   │   │   └── utils.py
│   │   │   │   └── worker.py
│   │   │   ├── llm/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── router.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── const.py
│   │   │   │       ├── llm/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── asr.py
│   │   │   │       │   ├── base.py
│   │   │   │       │   ├── embedding.py
│   │   │   │       │   ├── llm.py
│   │   │   │       │   ├── rerank.py
│   │   │   │       │   └── tts.py
│   │   │   │       ├── models/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   └── llm_server.py
│   │   │   │       ├── schemas.py
│   │   │   │       ├── services/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   └── llm.py
│   │   │   │       └── utils.py
│   │   │   ├── main.py
│   │   │   ├── mcp_manage/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── clients/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── sse.py
│   │   │   │   │   ├── stdio.py
│   │   │   │   │   └── streamable.py
│   │   │   │   ├── constant.py
│   │   │   │   ├── langchain/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── tool.py
│   │   │   │   └── manager.py
│   │   │   ├── open_endpoints/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── dependencies.py
│   │   │   │   │   ├── endpoints/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── assistant.py
│   │   │   │   │   │   ├── chat.py
│   │   │   │   │   │   ├── filelib.py
│   │   │   │   │   │   ├── flow.py
│   │   │   │   │   │   ├── knowledge.py
│   │   │   │   │   │   ├── llm.py
│   │   │   │   │   │   └── workflow.py
│   │   │   │   │   └── router.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── schemas/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── filelib.py
│   │   │   │       │   ├── knowledge.py
│   │   │   │       │   └── message.py
│   │   │   │       └── utils.py
│   │   │   ├── patches/
│   │   │   │   ├── __init__.py
│   │   │   │   └── langchain_openai.patch
│   │   │   ├── pptx2md/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── entry.py
│   │   │   │   ├── image.py
│   │   │   │   ├── log.py
│   │   │   │   ├── multi_column.py
│   │   │   │   ├── outputter.py
│   │   │   │   ├── parser.py
│   │   │   │   ├── types.py
│   │   │   │   └── utils.py
│   │   │   ├── processing/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   └── process.py
│   │   │   ├── run_celery.py
│   │   │   ├── run_celery_beat.py
│   │   │   ├── script/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base_telemetry_events_reindex.py
│   │   │   │   ├── convert_sys_embeddings.py
│   │   │   │   ├── knowledge.sh
│   │   │   │   ├── knowledge_data_convert.py
│   │   │   │   ├── knowledge_data_fix.py
│   │   │   │   ├── mid_table.sh
│   │   │   │   ├── sync_increment_table.py
│   │   │   │   └── telemetry_events_reindex.sh
│   │   │   ├── server.py
│   │   │   ├── services/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── auth/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── base.py
│   │   │   │   ├── cache/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   └── service.py
│   │   │   │   ├── chat/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── cache.py
│   │   │   │   │   ├── config.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── credentials/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   └── service.py
│   │   │   │   ├── deps.py
│   │   │   │   ├── factory.py
│   │   │   │   ├── manager.py
│   │   │   │   ├── plugins/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── langfuse_plugin.py
│   │   │   │   │   └── service.py
│   │   │   │   ├── schema.py
│   │   │   │   ├── session/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── settings/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── auth.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── constants.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── store/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── exceptions.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── schema.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── task/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── backends/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── anyio.py
│   │   │   │   │   │   ├── base.py
│   │   │   │   │   │   └── celery.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   └── utils.py
│   │   │   ├── share_link/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── dependencies.py
│   │   │   │   │   ├── endpoints/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── share_link.py
│   │   │   │   │   ├── router.py
│   │   │   │   │   └── schemas/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── share_link_schema.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── models/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   └── share_link.py
│   │   │   │       ├── repositories/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── implementations/
│   │   │   │       │   │   ├── __init__.py
│   │   │   │       │   │   └── share_link_repository_impl.py
│   │   │   │       │   └── interfaces/
│   │   │   │       │       ├── __init__.py
│   │   │   │       │       └── share_link_repository.py
│   │   │   │       └── services/
│   │   │   │           ├── __init__.py
│   │   │   │           └── share_link_service.py
│   │   │   ├── sql.json
│   │   │   ├── telemetry/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       └── mid_table/
│   │   │   │           ├── __init__.py
│   │   │   │           ├── app_increment.py
│   │   │   │           ├── base.py
│   │   │   │           ├── knowledge_increment.py
│   │   │   │           ├── user_increment.py
│   │   │   │           └── user_interact.py
│   │   │   ├── template/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── field/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── frontend_node/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── agents.py
│   │   │   │   │   ├── autogenrole.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── chains.py
│   │   │   │   │   ├── constants.py
│   │   │   │   │   ├── custom_components.py
│   │   │   │   │   ├── documentloaders.py
│   │   │   │   │   ├── embeddings.py
│   │   │   │   │   ├── formatter/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── base.py
│   │   │   │   │   │   └── field_formatters.py
│   │   │   │   │   ├── input_output.py
│   │   │   │   │   ├── llms.py
│   │   │   │   │   ├── memories.py
│   │   │   │   │   ├── output_parsers.py
│   │   │   │   │   ├── prompts.py
│   │   │   │   │   ├── retrievers.py
│   │   │   │   │   ├── textsplitters.py
│   │   │   │   │   ├── tools.py
│   │   │   │   │   ├── utilities.py
│   │   │   │   │   ├── vectorstores.py
│   │   │   │   │   └── wrappers.py
│   │   │   │   └── template/
│   │   │   │       ├── __init__.py
│   │   │   │       └── base.py
│   │   │   ├── tool/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── tool.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── const.py
│   │   │   │       ├── langchain/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── knowledge.py
│   │   │   │       │   └── linsight_knowledge.py
│   │   │   │       ├── models/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   └── gpts_tools.py
│   │   │   │       ├── schemas.py
│   │   │   │       └── services/
│   │   │   │           ├── __init__.py
│   │   │   │           ├── executor.py
│   │   │   │           ├── openapi.py
│   │   │   │           └── tool.py
│   │   │   ├── user/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── role.py
│   │   │   │   │   └── user.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── const.py
│   │   │   │       ├── models/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── user.py
│   │   │   │       │   └── user_role.py
│   │   │   │       ├── repositories/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── implementations/
│   │   │   │       │   │   ├── __init__.py
│   │   │   │       │   │   └── user_repository_impl.py
│   │   │   │       │   └── interfaces/
│   │   │   │       │       ├── __init__.py
│   │   │   │       │       └── user_repository.py
│   │   │   │       └── services/
│   │   │   │           ├── __init__.py
│   │   │   │           ├── auth.py
│   │   │   │           ├── captcha.py
│   │   │   │           └── user.py
│   │   │   ├── utils/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── consisten_hash.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── docx_temp.py
│   │   │   │   ├── exceptions.py
│   │   │   │   ├── http_middleware.py
│   │   │   │   ├── lazy_load.py
│   │   │   │   ├── linked_list.py
│   │   │   │   ├── mask_data.py
│   │   │   │   ├── payload.py
│   │   │   │   ├── threadpool.py
│   │   │   │   ├── util.py
│   │   │   │   └── validate.py
│   │   │   ├── worker/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── config.py
│   │   │   │   ├── knowledge/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── file_worker.py
│   │   │   │   │   ├── qa.py
│   │   │   │   │   └── rebuild_knowledge_worker.py
│   │   │   │   ├── main.py
│   │   │   │   ├── telemetry/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── mid_table.py
│   │   │   │   ├── test/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── test.py
│   │   │   │   ├── utils/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── stateful_worker.py
│   │   │   │   └── workflow/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── redis_callback.py
│   │   │   │       └── tasks.py
│   │   │   └── workflow/
│   │   │       ├── __init__.py
│   │   │       ├── callback/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── base_callback.py
│   │   │       │   ├── event.py
│   │   │       │   └── llm_callback.py
│   │   │       ├── common/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── condition.py
│   │   │       │   ├── const.py
│   │   │       │   ├── knowledge.py
│   │   │       │   ├── node.py
│   │   │       │   └── workflow.py
│   │   │       ├── edges/
│   │   │       │   ├── __init__.py
│   │   │       │   └── edges.py
│   │   │       ├── graph/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── graph_engine.py
│   │   │       │   ├── graph_state.py
│   │   │       │   └── workflow.py
│   │   │       └── nodes/
│   │   │           ├── __init__.py
│   │   │           ├── agent/
│   │   │           │   ├── __init__.py
│   │   │           │   └── agent.py
│   │   │           ├── base.py
│   │   │           ├── code/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── code.py
│   │   │           │   └── code_parse.py
│   │   │           ├── condition/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── condition.py
│   │   │           │   └── conidition_case.py
│   │   │           ├── end/
│   │   │           │   ├── __init__.py
│   │   │           │   └── end.py
│   │   │           ├── input/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── const.py
│   │   │           │   └── input.py
│   │   │           ├── knowledge_retriever/
│   │   │           │   ├── __init__.py
│   │   │           │   └── knowledge_retriever.py
│   │   │           ├── llm/
│   │   │           │   ├── __init__.py
│   │   │           │   └── llm.py
│   │   │           ├── node_manage.py
│   │   │           ├── output/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── output.py
│   │   │           │   └── output_fake.py
│   │   │           ├── prompt_template.py
│   │   │           ├── qa_retriever/
│   │   │           │   ├── __init__.py
│   │   │           │   └── qa_retriever.py
│   │   │           ├── rag/
│   │   │           │   ├── __init__.py
│   │   │           │   └── rag.py
│   │   │           ├── report/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── docx_replace.py
│   │   │           │   ├── report.py
│   │   │           │   └── text_classification.py
│   │   │           ├── start/
│   │   │           │   ├── __init__.py
│   │   │           │   └── start.py
│   │   │           └── tool/
│   │   │               ├── __init__.py
│   │   │               └── tool.py
│   │   ├── bisheng_langchain/
│   │   │   ├── __init__.py
│   │   │   ├── agents/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── chatglm_functions_agent/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── output_parser.py
│   │   │   │   │   └── prompt.py
│   │   │   │   └── llm_functions_agent/
│   │   │   │       ├── __init__.py
│   │   │   │       └── base.py
│   │   │   ├── autogen_role/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── assistant.py
│   │   │   │   ├── custom.py
│   │   │   │   ├── groupchat_manager.py
│   │   │   │   └── user.py
│   │   │   ├── chains/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── autogen/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── auto_gen.py
│   │   │   │   ├── combine_documents/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── stuff.py
│   │   │   │   ├── conversational_retrieval/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── loader_output.py
│   │   │   │   ├── qa_generation/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── base_v2.py
│   │   │   │   │   ├── prompt.py
│   │   │   │   │   └── prompt_v2.py
│   │   │   │   ├── question_answering/
│   │   │   │   │   └── __init__.py
│   │   │   │   ├── retrieval/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── retrieval_chain.py
│   │   │   │   ├── router/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── multi_rule.py
│   │   │   │   │   └── rule_router.py
│   │   │   │   └── transform.py
│   │   │   ├── chat_models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── host_llm.py
│   │   │   │   ├── interface/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── minimax.py
│   │   │   │   │   ├── openai.py
│   │   │   │   │   ├── types.py
│   │   │   │   │   ├── utils.py
│   │   │   │   │   ├── wenxin.py
│   │   │   │   │   ├── xunfei.py
│   │   │   │   │   └── zhipuai.py
│   │   │   │   ├── minimax.py
│   │   │   │   ├── proxy_llm.py
│   │   │   │   ├── qwen.py
│   │   │   │   ├── sensetime.py
│   │   │   │   ├── wenxin.py
│   │   │   │   ├── xunfeiai.py
│   │   │   │   └── zhipuai.py
│   │   │   ├── document_loaders/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── custom_kv.py
│   │   │   │   ├── elem_html.py
│   │   │   │   ├── elem_image.py
│   │   │   │   ├── elem_pdf.py
│   │   │   │   ├── elem_unstrcutured_loader.py
│   │   │   │   ├── parsers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── ellm_client.py
│   │   │   │   │   ├── image.py
│   │   │   │   │   ├── ocr_client.py
│   │   │   │   │   └── test_image.py
│   │   │   │   └── universal_kv.py
│   │   │   ├── embeddings/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── host_embedding.py
│   │   │   │   ├── huggingfacegte.py
│   │   │   │   ├── huggingfacemultilingual.py
│   │   │   │   ├── interface/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── types.py
│   │   │   │   │   └── wenxin.py
│   │   │   │   └── wenxin.py
│   │   │   ├── gpts/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── agent_types/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── llm_functions_agent.py
│   │   │   │   │   └── llm_react_agent.py
│   │   │   │   ├── assistant.py
│   │   │   │   ├── auto_optimization.py
│   │   │   │   ├── auto_tool_selected.py
│   │   │   │   ├── config/
│   │   │   │   │   ├── base_assistant.yaml
│   │   │   │   │   ├── base_scene.yaml
│   │   │   │   │   ├── knowledge_scene.yaml
│   │   │   │   │   ├── rag_scene.yaml
│   │   │   │   │   ├── test.yaml
│   │   │   │   │   └── tools.yaml
│   │   │   │   ├── load_tools.py
│   │   │   │   ├── message_types.py
│   │   │   │   ├── prompts/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── assistant_prompt_base.py
│   │   │   │   │   ├── assistant_prompt_cohere.py
│   │   │   │   │   ├── assistant_prompt_opt.py
│   │   │   │   │   ├── breif_description_prompt.py
│   │   │   │   │   ├── opening_dialog_prompt.py
│   │   │   │   │   ├── react_agent_prompt.py
│   │   │   │   │   └── select_tools_prompt.py
│   │   │   │   ├── tools/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── api_tools/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── base.py
│   │   │   │   │   │   ├── firecrawl.py
│   │   │   │   │   │   ├── flow.py
│   │   │   │   │   │   ├── jina.py
│   │   │   │   │   │   ├── macro_data.py
│   │   │   │   │   │   ├── openapi.py
│   │   │   │   │   │   ├── silicon_flow.py
│   │   │   │   │   │   ├── sina.py
│   │   │   │   │   │   └── tianyancha.py
│   │   │   │   │   ├── bing_search/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── self_arxiv.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   ├── calculator/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   ├── code_interpreter/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── base_executor.py
│   │   │   │   │   │   ├── e2b_executor.py
│   │   │   │   │   │   ├── local_executor.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   ├── dalle_image_generator/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   ├── get_current_time/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   ├── local_file/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── local_file.py
│   │   │   │   │   ├── message/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── dingding.py
│   │   │   │   │   │   ├── email.py
│   │   │   │   │   │   ├── feishu.py
│   │   │   │   │   │   └── wechat.py
│   │   │   │   │   ├── sql_agent/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   └── web_search/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── tool.py
│   │   │   │   └── utils.py
│   │   │   ├── input_output/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── input.py
│   │   │   │   └── output.py
│   │   │   ├── linsight/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── agent.py
│   │   │   │   ├── agent_test.py
│   │   │   │   ├── const.py
│   │   │   │   ├── event.py
│   │   │   │   ├── manage.py
│   │   │   │   ├── prompt.py
│   │   │   │   ├── react_prompt.py
│   │   │   │   ├── react_task.py
│   │   │   │   ├── resource/
│   │   │   │   │   └── model_tokenizer/
│   │   │   │   │       ├── config.json
│   │   │   │   │       ├── configuration.json
│   │   │   │   │       ├── generation_config.json
│   │   │   │   │       ├── merges.txt
│   │   │   │   │       ├── tokenizer.json
│   │   │   │   │       ├── tokenizer_config.json
│   │   │   │   │       └── vocab.json
│   │   │   │   ├── task.py
│   │   │   │   └── utils.py
│   │   │   ├── memory/
│   │   │   │   ├── __init__.py
│   │   │   │   └── redis.py
│   │   │   ├── rag/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── config.py
│   │   │   │   │   ├── dify_rag.py
│   │   │   │   │   ├── fastgpt_rag.py
│   │   │   │   │   └── openai_assistant_rag.py
│   │   │   │   ├── bisheng_rag_chain.py
│   │   │   │   ├── bisheng_rag_pipeline.py
│   │   │   │   ├── bisheng_rag_pipeline_v2.py
│   │   │   │   ├── bisheng_rag_tool.py
│   │   │   │   ├── config/
│   │   │   │   │   ├── baseline.yaml
│   │   │   │   │   ├── baseline_caibao.yaml
│   │   │   │   │   ├── baseline_caibao_knowledge_v2.yaml
│   │   │   │   │   ├── baseline_caibao_v2.yaml
│   │   │   │   │   ├── baseline_demo_v2.yaml
│   │   │   │   │   ├── baseline_s2b_mix.yaml
│   │   │   │   │   └── baseline_v2.yaml
│   │   │   │   ├── extract_info.py
│   │   │   │   ├── init_retrievers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── baseline_vector_retriever.py
│   │   │   │   │   ├── keyword_retriever.py
│   │   │   │   │   ├── mix_retriever.py
│   │   │   │   │   └── smaller_chunks_retriever.py
│   │   │   │   ├── prompts/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── extract_key_prompt.py
│   │   │   │   │   ├── prompt.py
│   │   │   │   │   └── prompt_cohere.py
│   │   │   │   ├── qa_corpus/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── qa_generator.py
│   │   │   │   ├── rerank/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── rerank.py
│   │   │   │   │   └── rerank_benchmark.py
│   │   │   │   ├── run_qa_gen_web.py
│   │   │   │   ├── run_rag_evaluate_web.py
│   │   │   │   ├── scoring/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── llama_index_score.py
│   │   │   │   │   └── ragas_score.py
│   │   │   │   ├── test/
│   │   │   │   │   ├── filter_qa.py
│   │   │   │   │   └── test_smaller_chunks.py
│   │   │   │   └── utils.py
│   │   │   ├── retrievers/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── ensemble.py
│   │   │   │   └── mix_es_vector.py
│   │   │   ├── sql/
│   │   │   │   ├── __init__.py
│   │   │   │   └── base.py
│   │   │   ├── text_splitter.py
│   │   │   ├── utils/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── azure_dalle_image_generator.py
│   │   │   │   ├── openapi.py
│   │   │   │   ├── requests.py
│   │   │   │   └── wrap_function.py
│   │   │   └── vectorstores/
│   │   │       ├── __init__.py
│   │   │       ├── elastic_keywords_search.py
│   │   │       ├── milvus.py
│   │   │       └── retriever.py
│   │   ├── entrypoint.sh
│   │   ├── patch_code.sh
│   │   ├── pyproject.toml
│   │   ├── test/
│   │   │   ├── __init__.py
│   │   │   ├── clean_milvus_es.py
│   │   │   ├── milvus_trans.py
│   │   │   ├── test.py
│   │   │   ├── test_api.py
│   │   │   ├── test_docx.py
│   │   │   ├── test_es.py
│   │   │   ├── test_filelib.py
│   │   │   ├── test_gpts.py
│   │   │   ├── test_llm.py
│   │   │   ├── test_node.py
│   │   │   ├── test_ws.py
│   │   │   └── workflow/
│   │   │       ├── __init__.py
│   │   │       └── nodes/
│   │   │           ├── __init__.py
│   │   │           ├── test_docx_replace.py
│   │   │           └── test_docx_string.py
│   │   └── test1.py
│   └── frontend/
│       ├── .gitignore
│       ├── Dockerfile
│       ├── client/
│       │   ├── babel.config.cjs
│       │   ├── check_updates.sh
│       │   ├── index.html
│       │   ├── jest.config.cjs
│       │   ├── local-packages/
│       │   │   └── vditor-3.11.1.tgz
│       │   ├── nginx.conf
│       │   ├── package.json
│       │   ├── postcss.config.cjs
│       │   ├── public/
│       │   │   ├── assets/
│       │   │   │   └── bisheng/
│       │   │   │       └── config.js
│       │   │   ├── robots.txt
│       │   │   └── vditor/
│       │   │       └── dist/
│       │   │           ├── css/
│       │   │           │   └── content-theme/
│       │   │           │       ├── ant-design.css
│       │   │           │       ├── dark.css
│       │   │           │       ├── light.css
│       │   │           │       └── wechat.css
│       │   │           ├── index.css
│       │   │           ├── index.d.ts
│       │   │           ├── index.js
│       │   │           ├── js/
│       │   │           │   ├── graphviz/
│       │   │           │   │   ├── full.render.js
│       │   │           │   │   └── viz.js
│       │   │           │   ├── highlight.js/
│       │   │           │   │   ├── LICENSE
│       │   │           │   │   └── third-languages.js
│       │   │           │   ├── i18n/
│       │   │           │   │   ├── de_DE.js
│       │   │           │   │   ├── en_US.js
│       │   │           │   │   ├── fr_FR.js
│       │   │           │   │   ├── ja_JP.js
│       │   │           │   │   ├── ko_KR.js
│       │   │           │   │   ├── pt_BR.js
│       │   │           │   │   ├── ru_RU.js
│       │   │           │   │   ├── sv_SE.js
│       │   │           │   │   ├── zh_CN.js
│       │   │           │   │   └── zh_TW.js
│       │   │           │   ├── icons/
│       │   │           │   │   ├── ant.js
│       │   │           │   │   └── material.js
│       │   │           │   ├── markmap/
│       │   │           │   │   └── prism.css
│       │   │           │   └── mathjax/
│       │   │           │       ├── LICENSE
│       │   │           │       ├── a11y/
│       │   │           │       │   ├── assistive-mml.js
│       │   │           │       │   ├── complexity.js
│       │   │           │       │   ├── explorer.js
│       │   │           │       │   └── semantic-enrich.js
│       │   │           │       ├── input/
│       │   │           │       │   ├── asciimath.js
│       │   │           │       │   ├── mml/
│       │   │           │       │   │   └── entities.js
│       │   │           │       │   ├── mml.js
│       │   │           │       │   ├── tex/
│       │   │           │       │   │   └── extensions/
│       │   │           │       │   │       ├── action.js
│       │   │           │       │   │       ├── all-packages.js
│       │   │           │       │   │       ├── ams.js
│       │   │           │       │   │       ├── amscd.js
│       │   │           │       │   │       ├── autoload.js
│       │   │           │       │   │       ├── bbox.js
│       │   │           │       │   │       ├── boldsymbol.js
│       │   │           │       │   │       ├── braket.js
│       │   │           │       │   │       ├── bussproofs.js
│       │   │           │       │   │       ├── cancel.js
│       │   │           │       │   │       ├── color.js
│       │   │           │       │   │       ├── colorV2.js
│       │   │           │       │   │       ├── configMacros.js
│       │   │           │       │   │       ├── enclose.js
│       │   │           │       │   │       ├── extpfeil.js
│       │   │           │       │   │       ├── html.js
│       │   │           │       │   │       ├── mhchem.js
│       │   │           │       │   │       ├── newcommand.js
│       │   │           │       │   │       ├── noerrors.js
│       │   │           │       │   │       ├── noundefined.js
│       │   │           │       │   │       ├── physics.js
│       │   │           │       │   │       ├── require.js
│       │   │           │       │   │       ├── tagFormat.js
│       │   │           │       │   │       ├── textmacros.js
│       │   │           │       │   │       ├── unicode.js
│       │   │           │       │   │       └── verb.js
│       │   │           │       │   ├── tex-base.js
│       │   │           │       │   ├── tex-full.js
│       │   │           │       │   └── tex.js
│       │   │           │       ├── sre/
│       │   │           │       │   ├── mathmaps/
│       │   │           │       │   │   ├── de.js
│       │   │           │       │   │   ├── en.js
│       │   │           │       │   │   ├── es.js
│       │   │           │       │   │   ├── fr.js
│       │   │           │       │   │   ├── mathmaps_ie.js
│       │   │           │       │   │   └── nemeth.js
│       │   │           │       │   ├── sre-node.js
│       │   │           │       │   └── sre_browser.js
│       │   │           │       └── tex-svg-full.js
│       │   │           ├── method.d.ts
│       │   │           ├── method.js
│       │   │           ├── ts/
│       │   │           │   ├── constants.d.ts
│       │   │           │   ├── devtools/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── export/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── hint/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── ir/
│       │   │           │   │   ├── expandMarker.d.ts
│       │   │           │   │   ├── highlightToolbarIR.d.ts
│       │   │           │   │   ├── index.d.ts
│       │   │           │   │   ├── input.d.ts
│       │   │           │   │   ├── process.d.ts
│       │   │           │   │   └── processKeydown.d.ts
│       │   │           │   ├── markdown/
│       │   │           │   │   ├── SMILESRender.d.ts
│       │   │           │   │   ├── abcRender.d.ts
│       │   │           │   │   ├── adapterRender.d.ts
│       │   │           │   │   ├── anchorRender.d.ts
│       │   │           │   │   ├── chartRender.d.ts
│       │   │           │   │   ├── codeRender.d.ts
│       │   │           │   │   ├── flowchartRender.d.ts
│       │   │           │   │   ├── getHTML.d.ts
│       │   │           │   │   ├── getMarkdown.d.ts
│       │   │           │   │   ├── graphvizRender.d.ts
│       │   │           │   │   ├── highlightRender.d.ts
│       │   │           │   │   ├── lazyLoadImageRender.d.ts
│       │   │           │   │   ├── markmapRender.d.ts
│       │   │           │   │   ├── mathRender.d.ts
│       │   │           │   │   ├── mediaRender.d.ts
│       │   │           │   │   ├── mermaidRender.d.ts
│       │   │           │   │   ├── mindmapRender.d.ts
│       │   │           │   │   ├── outlineRender.d.ts
│       │   │           │   │   ├── plantumlRender.d.ts
│       │   │           │   │   ├── previewRender.d.ts
│       │   │           │   │   ├── setLute.d.ts
│       │   │           │   │   └── speechRender.d.ts
│       │   │           │   ├── outline/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── preview/
│       │   │           │   │   ├── image.d.ts
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── resize/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── sv/
│       │   │           │   │   ├── combineFootnote.d.ts
│       │   │           │   │   ├── index.d.ts
│       │   │           │   │   ├── inputEvent.d.ts
│       │   │           │   │   ├── process.d.ts
│       │   │           │   │   └── processKeydown.d.ts
│       │   │           │   ├── tip/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── toolbar/
│       │   │           │   │   ├── Both.d.ts
│       │   │           │   │   ├── Br.d.ts
│       │   │           │   │   ├── CodeTheme.d.ts
│       │   │           │   │   ├── ContentTheme.d.ts
│       │   │           │   │   ├── Counter.d.ts
│       │   │           │   │   ├── Custom.d.ts
│       │   │           │   │   ├── Devtools.d.ts
│       │   │           │   │   ├── Divider.d.ts
│       │   │           │   │   ├── EditMode.d.ts
│       │   │           │   │   ├── Emoji.d.ts
│       │   │           │   │   ├── Export.d.ts
│       │   │           │   │   ├── Fullscreen.d.ts
│       │   │           │   │   ├── Headings.d.ts
│       │   │           │   │   ├── Help.d.ts
│       │   │           │   │   ├── Indent.d.ts
│       │   │           │   │   ├── Info.d.ts
│       │   │           │   │   ├── InsertAfter.d.ts
│       │   │           │   │   ├── InsertBefore.d.ts
│       │   │           │   │   ├── MenuItem.d.ts
│       │   │           │   │   ├── Outdent.d.ts
│       │   │           │   │   ├── Outline.d.ts
│       │   │           │   │   ├── Preview.d.ts
│       │   │           │   │   ├── Record.d.ts
│       │   │           │   │   ├── Redo.d.ts
│       │   │           │   │   ├── Undo.d.ts
│       │   │           │   │   ├── Upload.d.ts
│       │   │           │   │   ├── index.d.ts
│       │   │           │   │   └── setToolbar.d.ts
│       │   │           │   ├── ui/
│       │   │           │   │   ├── initUI.d.ts
│       │   │           │   │   ├── setCodeTheme.d.ts
│       │   │           │   │   ├── setContentTheme.d.ts
│       │   │           │   │   ├── setPreviewMode.d.ts
│       │   │           │   │   └── setTheme.d.ts
│       │   │           │   ├── undo/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── upload/
│       │   │           │   │   ├── getElement.d.ts
│       │   │           │   │   ├── index.d.ts
│       │   │           │   │   └── setHeaders.d.ts
│       │   │           │   ├── util/
│       │   │           │   │   ├── Options.d.ts
│       │   │           │   │   ├── RecordMedia.d.ts
│       │   │           │   │   ├── addScript.d.ts
│       │   │           │   │   ├── addStyle.d.ts
│       │   │           │   │   ├── code160to32.d.ts
│       │   │           │   │   ├── compatibility.d.ts
│       │   │           │   │   ├── editorCommonEvent.d.ts
│       │   │           │   │   ├── fixBrowserBehavior.d.ts
│       │   │           │   │   ├── function.d.ts
│       │   │           │   │   ├── getSelectText.d.ts
│       │   │           │   │   ├── hasClosest.d.ts
│       │   │           │   │   ├── hasClosestByHeadings.d.ts
│       │   │           │   │   ├── highlightToolbar.d.ts
│       │   │           │   │   ├── hotKey.d.ts
│       │   │           │   │   ├── log.d.ts
│       │   │           │   │   ├── merge.d.ts
│       │   │           │   │   ├── processCode.d.ts
│       │   │           │   │   ├── selection.d.ts
│       │   │           │   │   └── toc.d.ts
│       │   │           │   └── wysiwyg/
│       │   │           │       ├── afterRenderEvent.d.ts
│       │   │           │       ├── highlightToolbarWYSIWYG.d.ts
│       │   │           │       ├── index.d.ts
│       │   │           │       ├── inlineTag.d.ts
│       │   │           │       ├── input.d.ts
│       │   │           │       ├── placeholder.d.ts
│       │   │           │       ├── processKeydown.d.ts
│       │   │           │       ├── renderDomByMd.d.ts
│       │   │           │       ├── setHeading.d.ts
│       │   │           │       ├── showCode.d.ts
│       │   │           │       └── toolbarEvent.d.ts
│       │   │           └── types/
│       │   │               └── index.d.ts
│       │   ├── readme.md
│       │   ├── src/
│       │   │   ├── @types/
│       │   │   │   ├── chat.ts
│       │   │   │   ├── i18next.d.ts
│       │   │   │   ├── index.ts
│       │   │   │   └── model.ts
│       │   │   ├── App.jsx
│       │   │   ├── Providers/
│       │   │   │   ├── AddedChatContext.tsx
│       │   │   │   ├── AgentsContext.tsx
│       │   │   │   ├── AgentsMapContext.tsx
│       │   │   │   ├── AnnouncerContext.tsx
│       │   │   │   ├── ArtifactContext.tsx
│       │   │   │   ├── AssistantsContext.tsx
│       │   │   │   ├── AssistantsMapContext.tsx
│       │   │   │   ├── BookmarkContext.tsx
│       │   │   │   ├── ChatContext.tsx
│       │   │   │   ├── ChatFormContext.tsx
│       │   │   │   ├── CodeBlockContext.tsx
│       │   │   │   ├── CustomFormContext.tsx
│       │   │   │   ├── DashboardContext.tsx
│       │   │   │   ├── EditorContext.tsx
│       │   │   │   ├── FileMapContext.tsx
│       │   │   │   ├── MessageContext.tsx
│       │   │   │   ├── SearchContext.tsx
│       │   │   │   ├── SetConvoContext.tsx
│       │   │   │   ├── ShareContext.tsx
│       │   │   │   ├── ToastContext.tsx
│       │   │   │   ├── ToolCallsMapContext.tsx
│       │   │   │   └── index.ts
│       │   │   ├── a11y/
│       │   │   │   ├── Announcer.tsx
│       │   │   │   ├── LiveAnnouncer.tsx
│       │   │   │   ├── LiveMessage.tsx
│       │   │   │   ├── LiveMessenger.tsx
│       │   │   │   ├── MessageBlock.tsx
│       │   │   │   └── index.ts
│       │   │   ├── api/
│       │   │   │   ├── apps.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── linsight.ts
│       │   │   │   └── request.ts
│       │   │   ├── common/
│       │   │   │   ├── a11y.ts
│       │   │   │   ├── agents-types.ts
│       │   │   │   ├── artifacts.ts
│       │   │   │   ├── assistants-types.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── menus.ts
│       │   │   │   ├── tools.ts
│       │   │   │   └── types.ts
│       │   │   ├── components/
│       │   │   │   ├── Artifacts/
│       │   │   │   │   ├── Artifact.tsx
│       │   │   │   │   ├── ArtifactButton.tsx
│       │   │   │   │   ├── ArtifactCodeEditor.tsx
│       │   │   │   │   ├── ArtifactPreview.tsx
│       │   │   │   │   ├── ArtifactTabs.tsx
│       │   │   │   │   ├── Artifacts.tsx
│       │   │   │   │   ├── Code.tsx
│       │   │   │   │   ├── DownloadArtifact.tsx
│       │   │   │   │   ├── Mermaid.tsx
│       │   │   │   │   ├── Thinking.tsx
│       │   │   │   │   ├── remarkCitationPlugin.tsx
│       │   │   │   │   └── useDebounceCodeBlock.ts
│       │   │   │   ├── Audio/
│       │   │   │   │   ├── TTS.tsx
│       │   │   │   │   └── Voices.tsx
│       │   │   │   ├── Auth/
│       │   │   │   │   ├── ApiErrorWatcher.tsx
│       │   │   │   │   ├── AuthLayout.tsx
│       │   │   │   │   ├── BlinkAnimation.tsx
│       │   │   │   │   ├── ErrorMessage.tsx
│       │   │   │   │   ├── Footer.tsx
│       │   │   │   │   ├── Login.tsx
│       │   │   │   │   ├── LoginForm.tsx
│       │   │   │   │   ├── Registration.tsx
│       │   │   │   │   ├── RequestPasswordReset.tsx
│       │   │   │   │   ├── ResetPassword.tsx
│       │   │   │   │   ├── SocialButton.tsx
│       │   │   │   │   ├── SocialLoginRender.tsx
│       │   │   │   │   ├── TwoFactorScreen.tsx
│       │   │   │   │   ├── VerifyEmail.tsx
│       │   │   │   │   ├── __tests__/
│       │   │   │   │   │   ├── Login.spec.tsx
│       │   │   │   │   │   ├── LoginForm.spec.tsx
│       │   │   │   │   │   └── Registration.spec.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Avator/
│       │   │   │   │   └── index.tsx
│       │   │   │   ├── Banners/
│       │   │   │   │   ├── Banner.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Bookmarks/
│       │   │   │   │   ├── BookmarkEditDialog.tsx
│       │   │   │   │   ├── BookmarkForm.tsx
│       │   │   │   │   ├── BookmarkItem.tsx
│       │   │   │   │   ├── BookmarkItems.tsx
│       │   │   │   │   ├── DeleteBookmarkButton.tsx
│       │   │   │   │   ├── EditBookmarkButton.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Chat/
│       │   │   │   │   ├── AddMultiConvo.tsx
│       │   │   │   │   ├── ChatView.tsx
│       │   │   │   │   ├── ConvoStarter.tsx
│       │   │   │   │   ├── ExportAndShareMenu.tsx
│       │   │   │   │   ├── Footer.tsx
│       │   │   │   │   ├── Header.tsx
│       │   │   │   │   ├── HeaderTitle.tsx
│       │   │   │   │   ├── Input/
│       │   │   │   │   │   ├── ActiveSetting.tsx
│       │   │   │   │   │   ├── AddedConvo.tsx
│       │   │   │   │   │   ├── AudioRecorder.tsx
│       │   │   │   │   │   ├── ChatForm.tsx
│       │   │   │   │   │   ├── ChatFormTools.tsx
│       │   │   │   │   │   ├── ChatKnowledge.tsx
│       │   │   │   │   │   ├── CircleRender.tsx
│       │   │   │   │   │   ├── CollapseChat.tsx
│       │   │   │   │   │   ├── Files/
│       │   │   │   │   │   │   ├── AttachFile.tsx
│       │   │   │   │   │   │   ├── AttachFileMenu.tsx
│       │   │   │   │   │   │   ├── DragDropModal.tsx
│       │   │   │   │   │   │   ├── DragDropOverlay.tsx
│       │   │   │   │   │   │   ├── DragDropWrapper.tsx
│       │   │   │   │   │   │   ├── FileContainer.tsx
│       │   │   │   │   │   │   ├── FileFormWrapper.tsx
│       │   │   │   │   │   │   ├── FilePreview.tsx
│       │   │   │   │   │   │   ├── FileRow.tsx
│       │   │   │   │   │   │   ├── FileUpload.tsx
│       │   │   │   │   │   │   ├── FilesView.tsx
│       │   │   │   │   │   │   ├── Image.tsx
│       │   │   │   │   │   │   ├── ImagePreview.tsx
│       │   │   │   │   │   │   ├── MyKnowledgeView.tsx
│       │   │   │   │   │   │   ├── ProgressCircle.tsx
│       │   │   │   │   │   │   ├── RemoveFile.tsx
│       │   │   │   │   │   │   ├── SourceIcon.tsx
│       │   │   │   │   │   │   └── Table/
│       │   │   │   │   │   │       ├── AttachFileButton.tsx
│       │   │   │   │   │   │       ├── Columns.tsx
│       │   │   │   │   │   │       ├── DataTable.tsx
│       │   │   │   │   │   │       ├── DataTableKnowledge.tsx
│       │   │   │   │   │   │       ├── KnowledgeColumns.tsx
│       │   │   │   │   │   │       ├── SortFilterHeader.tsx
│       │   │   │   │   │   │       ├── TemplateTable.tsx
│       │   │   │   │   │   │       ├── fakeData.ts
│       │   │   │   │   │   │       └── index.ts
│       │   │   │   │   │   ├── HeaderOptions.tsx
│       │   │   │   │   │   ├── Mention.tsx
│       │   │   │   │   │   ├── MentionItem.tsx
│       │   │   │   │   │   ├── OptionsPopover.tsx
│       │   │   │   │   │   ├── PopoverButtons.tsx
│       │   │   │   │   │   ├── PromptsCommand.tsx
│       │   │   │   │   │   ├── SameSopSpan.tsx
│       │   │   │   │   │   ├── SendButton.tsx
│       │   │   │   │   │   ├── StopButton.tsx
│       │   │   │   │   │   ├── StreamAudio.tsx
│       │   │   │   │   │   ├── TemporaryChat.tsx
│       │   │   │   │   │   └── TextareaHeader.tsx
│       │   │   │   │   ├── InviteCode.tsx
│       │   │   │   │   ├── Landing.tsx
│       │   │   │   │   ├── Menus/
│       │   │   │   │   │   ├── BookmarkMenu.tsx
│       │   │   │   │   │   ├── Bookmarks/
│       │   │   │   │   │   │   └── BookmarkMenuItems.tsx
│       │   │   │   │   │   ├── Endpoints/
│       │   │   │   │   │   │   ├── Icons.tsx
│       │   │   │   │   │   │   ├── MenuItem.tsx
│       │   │   │   │   │   │   ├── MenuItems.tsx
│       │   │   │   │   │   │   └── UnknownIcon.tsx
│       │   │   │   │   │   ├── EndpointsMenu.tsx
│       │   │   │   │   │   ├── HeaderNewChat.tsx
│       │   │   │   │   │   ├── Models/
│       │   │   │   │   │   │   ├── MenuButton.tsx
│       │   │   │   │   │   │   ├── ModelSpec.tsx
│       │   │   │   │   │   │   ├── ModelSpecs.tsx
│       │   │   │   │   │   │   ├── ModelSpecsMenu.tsx
│       │   │   │   │   │   │   ├── SpecIcon.tsx
│       │   │   │   │   │   │   └── fakeData.ts
│       │   │   │   │   │   ├── Presets/
│       │   │   │   │   │   │   ├── EditPresetDialog.tsx
│       │   │   │   │   │   │   ├── PresetItems.tsx
│       │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   ├── PresetsMenu.tsx
│       │   │   │   │   │   ├── UI/
│       │   │   │   │   │   │   ├── MenuItem.tsx
│       │   │   │   │   │   │   ├── MenuSeparator.tsx
│       │   │   │   │   │   │   ├── TitleButton.tsx
│       │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   └── index.ts
│       │   │   │   │   ├── Messages/
│       │   │   │   │   │   ├── Content/
│       │   │   │   │   │   │   ├── ActionIcon.tsx
│       │   │   │   │   │   │   ├── CancelledIcon.tsx
│       │   │   │   │   │   │   ├── CodeAnalyze.tsx
│       │   │   │   │   │   │   ├── Container.tsx
│       │   │   │   │   │   │   ├── ContentParts.tsx
│       │   │   │   │   │   │   ├── DialogImage.tsx
│       │   │   │   │   │   │   ├── Echarts.tsx
│       │   │   │   │   │   │   ├── EditMessage.tsx
│       │   │   │   │   │   │   ├── Files.tsx
│       │   │   │   │   │   │   ├── FinishedIcon.tsx
│       │   │   │   │   │   │   ├── Image.tsx
│       │   │   │   │   │   │   ├── ImageGen.tsx
│       │   │   │   │   │   │   ├── InProgressCall.tsx
│       │   │   │   │   │   │   ├── Markdown.tsx
│       │   │   │   │   │   │   ├── MarkdownLite.tsx
│       │   │   │   │   │   │   ├── Mermaid.tsx
│       │   │   │   │   │   │   ├── MessageContent.tsx
│       │   │   │   │   │   │   ├── Part.tsx
│       │   │   │   │   │   │   ├── Parts/
│       │   │   │   │   │   │   │   ├── Attachment.tsx
│       │   │   │   │   │   │   │   ├── CodeProgress.tsx
│       │   │   │   │   │   │   │   ├── EditTextPart.tsx
│       │   │   │   │   │   │   │   ├── ExecuteCode.tsx
│       │   │   │   │   │   │   │   ├── LogContent.tsx
│       │   │   │   │   │   │   │   ├── LogLink.tsx
│       │   │   │   │   │   │   │   ├── Reasoning.tsx
│       │   │   │   │   │   │   │   └── Text.tsx
│       │   │   │   │   │   │   ├── ProgressCircle.tsx
│       │   │   │   │   │   │   ├── ProgressText.tsx
│       │   │   │   │   │   │   ├── RetrievalCall.tsx
│       │   │   │   │   │   │   ├── RetrievalIcon.tsx
│       │   │   │   │   │   │   ├── SearchContent.tsx
│       │   │   │   │   │   │   ├── SearchWebUrls.tsx
│       │   │   │   │   │   │   ├── ToolCall.tsx
│       │   │   │   │   │   │   ├── ToolPopover.tsx
│       │   │   │   │   │   │   └── WrenchIcon.tsx
│       │   │   │   │   │   ├── HoverButtons.tsx
│       │   │   │   │   │   ├── Message.tsx
│       │   │   │   │   │   ├── MessageAudio.tsx
│       │   │   │   │   │   ├── MessageIcon.tsx
│       │   │   │   │   │   ├── MessageParts.tsx
│       │   │   │   │   │   ├── MessagesView.tsx
│       │   │   │   │   │   ├── MinimalHoverButtons.tsx
│       │   │   │   │   │   ├── MinimalMessages.tsx
│       │   │   │   │   │   ├── MultiMessage.tsx
│       │   │   │   │   │   ├── SearchButtons.tsx
│       │   │   │   │   │   ├── SearchMessage.tsx
│       │   │   │   │   │   ├── SiblingSwitch.tsx
│       │   │   │   │   │   ├── SubRow.tsx
│       │   │   │   │   │   └── ui/
│       │   │   │   │   │       ├── MessageRender.tsx
│       │   │   │   │   │       └── PlaceholderRow.tsx
│       │   │   │   │   ├── Presentation.tsx
│       │   │   │   │   ├── PromptCard.tsx
│       │   │   │   │   ├── Prompts.tsx
│       │   │   │   │   └── SegmentSelector.tsx
│       │   │   │   ├── Conversations/
│       │   │   │   │   ├── Conversations.tsx
│       │   │   │   │   ├── Convo.tsx
│       │   │   │   │   ├── ConvoOptions/
│       │   │   │   │   │   ├── ConvoOptions.tsx
│       │   │   │   │   │   ├── DeleteButton.tsx
│       │   │   │   │   │   ├── ShareButton.tsx
│       │   │   │   │   │   ├── SharedLinkButton.tsx
│       │   │   │   │   │   └── index.ts
│       │   │   │   │   ├── Fork.tsx
│       │   │   │   │   ├── HoverToggle.tsx
│       │   │   │   │   ├── Pages.tsx
│       │   │   │   │   ├── ToggleContext.ts
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Endpoints/
│       │   │   │   │   ├── AlternativeSettings.tsx
│       │   │   │   │   ├── ConvoIcon.tsx
│       │   │   │   │   ├── ConvoIconURL.tsx
│       │   │   │   │   ├── EndpointIcon.tsx
│       │   │   │   │   ├── EndpointSettings.tsx
│       │   │   │   │   ├── Icon.tsx
│       │   │   │   │   ├── MessageEndpointIcon.tsx
│       │   │   │   │   ├── MinimalIcon.tsx
│       │   │   │   │   ├── SaveAsPresetDialog.tsx
│       │   │   │   │   ├── Settings/
│       │   │   │   │   │   ├── Advanced.tsx
│       │   │   │   │   │   ├── AgentSettings.tsx
│       │   │   │   │   │   ├── Anthropic.tsx
│       │   │   │   │   │   ├── Assistants.tsx
│       │   │   │   │   │   ├── Bedrock.tsx
│       │   │   │   │   │   ├── Examples.tsx
│       │   │   │   │   │   ├── Google.tsx
│       │   │   │   │   │   ├── MultiView/
│       │   │   │   │   │   │   ├── GoogleSettings.tsx
│       │   │   │   │   │   │   ├── PluginSettings.tsx
│       │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   ├── OpenAI.tsx
│       │   │   │   │   │   ├── OptionHover.tsx
│       │   │   │   │   │   ├── Plugins.tsx
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   └── settings.ts
│       │   │   │   │   ├── URLIcon.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Files/
│       │   │   │   │   ├── ActionButton.tsx
│       │   │   │   │   ├── DeleteIconButton.tsx
│       │   │   │   │   ├── FileDashboardView.tsx
│       │   │   │   │   ├── FileList/
│       │   │   │   │   │   ├── DataTableFile.tsx
│       │   │   │   │   │   ├── DataTableFilePreview.tsx
│       │   │   │   │   │   ├── EmptyFilePreview.tsx
│       │   │   │   │   │   ├── FileList.tsx
│       │   │   │   │   │   ├── FileListItem.tsx
│       │   │   │   │   │   ├── FileListItem2.tsx
│       │   │   │   │   │   ├── FilePreview.tsx
│       │   │   │   │   │   ├── FileSidePanel.tsx
│       │   │   │   │   │   ├── FileTableColumns.tsx
│       │   │   │   │   │   ├── UploadFileButton.tsx
│       │   │   │   │   │   └── UploadFileModal.tsx
│       │   │   │   │   ├── FilesListView.tsx
│       │   │   │   │   ├── FilesSectionSelector.tsx
│       │   │   │   │   ├── VectorStore/
│       │   │   │   │   │   ├── EmptyVectorStorePreview.tsx
│       │   │   │   │   │   ├── VectorStoreButton.tsx
│       │   │   │   │   │   ├── VectorStoreFilter.tsx
│       │   │   │   │   │   ├── VectorStoreList.tsx
│       │   │   │   │   │   ├── VectorStoreListItem.tsx
│       │   │   │   │   │   ├── VectorStorePreview.tsx
│       │   │   │   │   │   └── VectorStoreSidePanel.tsx
│       │   │   │   │   └── VectorStoreView.tsx
│       │   │   │   ├── Input/
│       │   │   │   │   ├── Generations/
│       │   │   │   │   │   ├── Button.tsx
│       │   │   │   │   │   ├── Continue.tsx
│       │   │   │   │   │   ├── Regenerate.tsx
│       │   │   │   │   │   ├── Stop.tsx
│       │   │   │   │   │   └── __tests__/
│       │   │   │   │   │       ├── Button.spec.tsx
│       │   │   │   │   │       ├── Continue.spec.tsx
│       │   │   │   │   │       ├── Regenerate.spec.tsx
│       │   │   │   │   │       └── Stop.spec.tsx
│       │   │   │   │   ├── ModelSelect/
│       │   │   │   │   │   ├── Anthropic.tsx
│       │   │   │   │   │   ├── ChatGPT.tsx
│       │   │   │   │   │   ├── Google.tsx
│       │   │   │   │   │   ├── ModelSelect.tsx
│       │   │   │   │   │   ├── OpenAI.tsx
│       │   │   │   │   │   ├── PluginsByIndex.tsx
│       │   │   │   │   │   ├── TemporaryChat.tsx
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   └── options.ts
│       │   │   │   │   └── SetKeyDialog/
│       │   │   │   │       ├── CustomEndpoint.tsx
│       │   │   │   │       ├── GoogleConfig.tsx
│       │   │   │   │       ├── HelpText.tsx
│       │   │   │   │       ├── InputWithLabel.tsx
│       │   │   │   │       ├── OpenAIConfig.tsx
│       │   │   │   │       ├── OtherConfig.tsx
│       │   │   │   │       ├── SetKeyDialog.tsx
│       │   │   │   │       └── index.ts
│       │   │   │   ├── Messages/
│       │   │   │   │   ├── Content/
│       │   │   │   │   │   ├── CodeBlock.tsx
│       │   │   │   │   │   ├── Container.tsx
│       │   │   │   │   │   ├── Error.tsx
│       │   │   │   │   │   ├── Plugin.tsx
│       │   │   │   │   │   ├── ResultSwitcher.tsx
│       │   │   │   │   │   ├── RunCode.tsx
│       │   │   │   │   │   ├── SubRow.tsx
│       │   │   │   │   │   └── index.ts
│       │   │   │   │   ├── ContentRender.tsx
│       │   │   │   │   ├── MessageContent.tsx
│       │   │   │   │   └── ScrollToBottom.tsx
│       │   │   │   ├── Nav/
│       │   │   │   │   ├── AccountSettings.tsx
│       │   │   │   │   ├── Bookmarks/
│       │   │   │   │   │   ├── BookmarkNav.tsx
│       │   │   │   │   │   └── BookmarkNavItems.tsx
│       │   │   │   │   ├── ExportConversation/
│       │   │   │   │   │   ├── ExportModal.tsx
│       │   │   │   │   │   └── index.ts
│       │   │   │   │   ├── MobileNav.tsx
│       │   │   │   │   ├── Nav.spec.tsx
│       │   │   │   │   ├── Nav.tsx
│       │   │   │   │   ├── NavLink.tsx
│       │   │   │   │   ├── NavToggle.tsx
│       │   │   │   │   ├── NewChat.tsx
│       │   │   │   │   ├── SearchBar.tsx
│       │   │   │   │   ├── Settings.tsx
│       │   │   │   │   ├── SettingsTabs/
│       │   │   │   │   │   ├── Account/
│       │   │   │   │   │   │   ├── Account.tsx
│       │   │   │   │   │   │   ├── Avatar.tsx
│       │   │   │   │   │   │   ├── BackupCodesItem.tsx
│       │   │   │   │   │   │   ├── DeleteAccount.tsx
│       │   │   │   │   │   │   ├── DisableTwoFactorToggle.tsx
│       │   │   │   │   │   │   ├── DisplayUsernameMessages.tsx
│       │   │   │   │   │   │   ├── TwoFactorAuthentication.tsx
│       │   │   │   │   │   │   └── TwoFactorPhases/
│       │   │   │   │   │   │       ├── BackupPhase.tsx
│       │   │   │   │   │   │       ├── DisablePhase.tsx
│       │   │   │   │   │   │       ├── QRPhase.tsx
│       │   │   │   │   │   │       ├── SetupPhase.tsx
│       │   │   │   │   │   │       ├── VerifyPhase.tsx
│       │   │   │   │   │   │       └── index.ts
│       │   │   │   │   │   ├── Beta/
│       │   │   │   │   │   │   ├── Beta.tsx
│       │   │   │   │   │   │   └── CodeArtifacts.tsx
│       │   │   │   │   │   ├── Chat/
│       │   │   │   │   │   │   ├── Chat.tsx
│       │   │   │   │   │   │   ├── ChatDirection.tsx
│       │   │   │   │   │   │   ├── EnterToSend.tsx
│       │   │   │   │   │   │   ├── FontSizeSelector.tsx
│       │   │   │   │   │   │   ├── ForkSettings.tsx
│       │   │   │   │   │   │   ├── LaTeXParsing.tsx
│       │   │   │   │   │   │   ├── MaximizeChatSpace.tsx
│       │   │   │   │   │   │   ├── ModularChat.tsx
│       │   │   │   │   │   │   ├── SaveDraft.tsx
│       │   │   │   │   │   │   ├── ScrollButton.tsx
│       │   │   │   │   │   │   ├── ShowCodeSwitch.tsx
│       │   │   │   │   │   │   └── ShowThinking.tsx
│       │   │   │   │   │   ├── Commands/
│       │   │   │   │   │   │   ├── AtCommandSwitch.tsx
│       │   │   │   │   │   │   ├── Commands.tsx
│       │   │   │   │   │   │   ├── PlusCommandSwitch.tsx
│       │   │   │   │   │   │   └── SlashCommandSwitch.tsx
│       │   │   │   │   │   ├── DangerButton.tsx
│       │   │   │   │   │   ├── Data/
│       │   │   │   │   │   │   ├── ClearChats.tsx
│       │   │   │   │   │   │   ├── Data.tsx
│       │   │   │   │   │   │   ├── DeleteCache.tsx
│       │   │   │   │   │   │   ├── ImportConversations.tsx
│       │   │   │   │   │   │   ├── RevokeAllKeys.tsx
│       │   │   │   │   │   │   ├── RevokeKeysButton.tsx
│       │   │   │   │   │   │   └── SharedLinks.tsx
│       │   │   │   │   │   ├── General/
│       │   │   │   │   │   │   ├── ArchivedChats.tsx
│       │   │   │   │   │   │   ├── ArchivedChatsTable.tsx
│       │   │   │   │   │   │   ├── AutoScrollSwitch.spec.tsx
│       │   │   │   │   │   │   ├── AutoScrollSwitch.tsx
│       │   │   │   │   │   │   ├── General.tsx
│       │   │   │   │   │   │   ├── HideSidePanelSwitch.tsx
│       │   │   │   │   │   │   ├── LangSelector.spec.tsx
│       │   │   │   │   │   │   ├── ThemeSelector.spec.tsx
│       │   │   │   │   │   │   └── UserMsgMarkdownSwitch.tsx
│       │   │   │   │   │   ├── HoverCardSettings.tsx
│       │   │   │   │   │   ├── Speech/
│       │   │   │   │   │   │   ├── ConversationModeSwitch.spec.tsx
│       │   │   │   │   │   │   ├── ConversationModeSwitch.tsx
│       │   │   │   │   │   │   ├── STT/
│       │   │   │   │   │   │   │   ├── AutoSendTextSelector.tsx
│       │   │   │   │   │   │   │   ├── AutoTranscribeAudioSwitch.tsx
│       │   │   │   │   │   │   │   ├── DecibelSelector.tsx
│       │   │   │   │   │   │   │   ├── EngineSTTDropdown.tsx
│       │   │   │   │   │   │   │   ├── LanguageSTTDropdown.tsx
│       │   │   │   │   │   │   │   ├── SpeechToTextSwitch.tsx
│       │   │   │   │   │   │   │   ├── __tests__/
│       │   │   │   │   │   │   │   │   ├── AutoTranscribeAudioSwitch.spec.tsx
│       │   │   │   │   │   │   │   │   └── SpeechToTextSwitch.spec.tsx
│       │   │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   │   ├── Speech.tsx
│       │   │   │   │   │   │   └── TTS/
│       │   │   │   │   │   │       ├── AutomaticPlaybackSwitch.tsx
│       │   │   │   │   │   │       ├── CacheTTSSwitch.tsx
│       │   │   │   │   │   │       ├── CloudBrowserVoicesSwitch.tsx
│       │   │   │   │   │   │       ├── EngineTTSDropdown.tsx
│       │   │   │   │   │   │       ├── PlaybackRate.tsx
│       │   │   │   │   │   │       ├── TextToSpeechSwitch.tsx
│       │   │   │   │   │   │       ├── VoiceDropdown.tsx
│       │   │   │   │   │   │       ├── __tests__/
│       │   │   │   │   │   │       │   ├── AutomaticPlaybackSwitch.spec.tsx
│       │   │   │   │   │   │       │   ├── CacheTTSSwitch.spec.tsx
│       │   │   │   │   │   │       │   ├── CloudBrowserVoicesSwitch.spec.tsx
│       │   │   │   │   │   │       │   └── TextToSpeechSwitch.spec.tsx
│       │   │   │   │   │   │       └── index.ts
│       │   │   │   │   │   └── index.ts
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Plugins/
│       │   │   │   │   ├── Store/
│       │   │   │   │   │   ├── PluginAuthForm.tsx
│       │   │   │   │   │   ├── PluginPagination.tsx
│       │   │   │   │   │   ├── PluginStoreDialog.tsx
│       │   │   │   │   │   ├── PluginStoreItem.tsx
│       │   │   │   │   │   ├── PluginStoreLinkButton.tsx
│       │   │   │   │   │   ├── PluginTooltip.tsx
│       │   │   │   │   │   ├── __tests__/
│       │   │   │   │   │   │   ├── PluginAuthForm.spec.tsx
│       │   │   │   │   │   │   ├── PluginPagination.spec.tsx
│       │   │   │   │   │   │   ├── PluginStoreDialog.spec.tsx
│       │   │   │   │   │   │   └── PluginStoreItem.spec.tsx
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   └── styles.module.css
│       │   │   │   │   └── index.ts
│       │   │   │   ├── PreviewFile/
│       │   │   │   │   ├── DocxFileViewer.tsx
│       │   │   │   │   ├── FileView.tsx
│       │   │   │   │   ├── TxtFileViewer.tsx
│       │   │   │   │   └── index.tsx
│       │   │   │   ├── Prompts/
│       │   │   │   │   ├── AdminSettings.tsx
│       │   │   │   │   ├── AdvancedSwitch.tsx
│       │   │   │   │   ├── BackToChat.tsx
│       │   │   │   │   ├── Command.tsx
│       │   │   │   │   ├── DeleteVersion.tsx
│       │   │   │   │   ├── Description.tsx
│       │   │   │   │   ├── EmptyPromptPreview.tsx
│       │   │   │   │   ├── Groups/
│       │   │   │   │   │   ├── AlwaysMakeProd.tsx
│       │   │   │   │   │   ├── AutoSendPrompt.tsx
│       │   │   │   │   │   ├── CategoryIcon.tsx
│       │   │   │   │   │   ├── CategorySelector.tsx
│       │   │   │   │   │   ├── ChatGroupItem.tsx
│       │   │   │   │   │   ├── CreatePromptForm.tsx
│       │   │   │   │   │   ├── DashGroupItem.tsx
│       │   │   │   │   │   ├── FilterPrompts.tsx
│       │   │   │   │   │   ├── GroupSidePanel.tsx
│       │   │   │   │   │   ├── List.tsx
│       │   │   │   │   │   ├── ListCard.tsx
│       │   │   │   │   │   ├── NoPromptGroup.tsx
│       │   │   │   │   │   ├── PanelNavigation.tsx
│       │   │   │   │   │   ├── VariableDialog.tsx
│       │   │   │   │   │   └── VariableForm.tsx
│       │   │   │   │   ├── ManagePrompts.tsx
│       │   │   │   │   ├── Markdown.tsx
│       │   │   │   │   ├── PreviewLabels.tsx
│       │   │   │   │   ├── PreviewPrompt.tsx
│       │   │   │   │   ├── PromptDetails.tsx
│       │   │   │   │   ├── PromptEditor.tsx
│       │   │   │   │   ├── PromptForm.tsx
│       │   │   │   │   ├── PromptName.tsx
│       │   │   │   │   ├── PromptVariables.tsx
│       │   │   │   │   ├── PromptVersions.tsx
│       │   │   │   │   ├── PromptsAccordion.tsx
│       │   │   │   │   ├── PromptsView.tsx
│       │   │   │   │   ├── SharePrompt.tsx
│       │   │   │   │   ├── SkeletonForm.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Share/
│       │   │   │   │   ├── Message.tsx
│       │   │   │   │   ├── MessageIcon.tsx
│       │   │   │   │   ├── MessagesView.tsx
│       │   │   │   │   ├── MultiMessage.tsx
│       │   │   │   │   ├── ShareChat.tsx
│       │   │   │   │   └── ShareView.tsx
│       │   │   │   ├── SidePanel/
│       │   │   │   │   ├── AgentSwitcher.tsx
│       │   │   │   │   ├── Agents/
│       │   │   │   │   │   ├── ActionsInput.tsx
│       │   │   │   │   │   ├── ActionsPanel.tsx
│       │   │   │   │   │   ├── ActionsTable/
│       │   │   │   │   │   │   ├── Columns.tsx
│       │   │   │   │   │   │   ├── Table.tsx
│       │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   ├── AdminSettings.tsx
│       │   │   │   │   │   ├── AgentAvatar.tsx
│       │   │   │   │   │   ├── AgentConfig.tsx
│       │   │   │   │   │   ├── AgentPanel.tsx
│       │   │   │   │   │   ├── AgentPanelSkeleton.tsx
│       │   │   │   │   │   ├── AgentPanelSwitch.tsx
│       │   │   │   │   │   ├── AgentSelect.tsx
│       │   │   │   │   │   ├── AgentTool.tsx
│       │   │   │   │   │   ├── Artifacts.tsx
│       │   │   │   │   │   ├── Code/
│       │   │   │   │   │   │   ├── Action.tsx
│       │   │   │   │   │   │   ├── ApiKeyDialog.tsx
│       │   │   │   │   │   │   ├── Files.tsx
│       │   │   │   │   │   │   └── Form.tsx
│       │   │   │   │   │   ├── DeleteButton.tsx
│       │   │   │   │   │   ├── DuplicateAgent.tsx
│       │   │   │   │   │   ├── FileSearch.tsx
│       │   │   │   │   │   ├── FileSearchCheckbox.tsx
│       │   │   │   │   │   ├── ImageVision.tsx
│       │   │   │   │   │   ├── Images.tsx
│       │   │   │   │   │   ├── ModelPanel.tsx
│       │   │   │   │   │   ├── Retrieval.tsx
│       │   │   │   │   │   ├── Sequential/
│       │   │   │   │   │   │   ├── HideSequential.tsx
│       │   │   │   │   │   │   └── SequentialAgents.tsx
│       │   │   │   │   │   └── ShareAgent.tsx
│       │   │   │   │   ├── AssistantSwitcher.tsx
│       │   │   │   │   ├── Bookmarks/
│       │   │   │   │   │   ├── BookmarkPanel.tsx
│       │   │   │   │   │   ├── BookmarkTable.tsx
│       │   │   │   │   │   └── BookmarkTableRow.tsx
│       │   │   │   │   ├── Builder/
│       │   │   │   │   │   ├── Action.tsx
│       │   │   │   │   │   ├── ActionCallback.tsx
│       │   │   │   │   │   ├── ActionsAuth.tsx
│       │   │   │   │   │   ├── ActionsInput.tsx
│       │   │   │   │   │   ├── ActionsPanel.tsx
│       │   │   │   │   │   ├── ActionsTable/
│       │   │   │   │   │   │   ├── Columns.tsx
│       │   │   │   │   │   │   ├── Table.tsx
│       │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   ├── AppendDateCheckbox.tsx
│       │   │   │   │   │   ├── AssistantAvatar.tsx
│       │   │   │   │   │   ├── AssistantConversationStarters.tsx
│       │   │   │   │   │   ├── AssistantPanel.tsx
│       │   │   │   │   │   ├── AssistantSelect.tsx
│       │   │   │   │   │   ├── AssistantTool.tsx
│       │   │   │   │   │   ├── CapabilitiesForm.tsx
│       │   │   │   │   │   ├── Code.tsx
│       │   │   │   │   │   ├── CodeFiles.tsx
│       │   │   │   │   │   ├── ContextButton.tsx
│       │   │   │   │   │   ├── ImageVision.tsx
│       │   │   │   │   │   ├── Images.tsx
│       │   │   │   │   │   ├── Knowledge.tsx
│       │   │   │   │   │   ├── PanelSwitch.tsx
│       │   │   │   │   │   └── Retrieval.tsx
│       │   │   │   │   ├── Files/
│       │   │   │   │   │   ├── Panel.tsx
│       │   │   │   │   │   ├── PanelColumns.tsx
│       │   │   │   │   │   ├── PanelFileCell.tsx
│       │   │   │   │   │   └── PanelTable.tsx
│       │   │   │   │   ├── ModelSwitcher.tsx
│       │   │   │   │   ├── Nav.tsx
│       │   │   │   │   ├── Parameters/
│       │   │   │   │   │   ├── DynamicCheckbox.tsx
│       │   │   │   │   │   ├── DynamicCombobox.tsx
│       │   │   │   │   │   ├── DynamicDropdown.tsx
│       │   │   │   │   │   ├── DynamicInput.tsx
│       │   │   │   │   │   ├── DynamicSlider.tsx
│       │   │   │   │   │   ├── DynamicSwitch.tsx
│       │   │   │   │   │   ├── DynamicTags.tsx
│       │   │   │   │   │   ├── DynamicTextarea.tsx
│       │   │   │   │   │   ├── OptionHover.tsx
│       │   │   │   │   │   ├── Panel.tsx
│       │   │   │   │   │   ├── components.tsx
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   └── settings.ts
│       │   │   │   │   ├── SidePanel.tsx
│       │   │   │   │   ├── SidePanelGroup.tsx
│       │   │   │   │   ├── Switcher.tsx
│       │   │   │   │   ├── data.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Sop/
│       │   │   │   │   ├── FilePreview.tsx
│       │   │   │   │   ├── FilePreviewDrawer.tsx
│       │   │   │   │   ├── Header.tsx
│       │   │   │   │   ├── SOPEditor.tsx
│       │   │   │   │   ├── SopMarkdown.tsx
│       │   │   │   │   ├── SopToolsDown.tsx
│       │   │   │   │   ├── TaskControls.tsx
│       │   │   │   │   ├── TaskFiles.tsx
│       │   │   │   │   ├── TaskFlow.tsx
│       │   │   │   │   ├── TaskFlowContent.tsx
│       │   │   │   │   ├── components/
│       │   │   │   │   │   ├── CopyButton.tsx
│       │   │   │   │   │   ├── DownloadResultFileBtn.tsx
│       │   │   │   │   │   ├── ErrorDisplay.tsx
│       │   │   │   │   │   ├── SearchKnowledgeSheet.tsx
│       │   │   │   │   │   ├── SopLoading.tsx
│       │   │   │   │   │   ├── SvgImage.tsx
│       │   │   │   │   │   ├── UserInput.tsx
│       │   │   │   │   │   └── WebSearchSheet.tsx
│       │   │   │   │   └── index.tsx
│       │   │   │   ├── Tools/
│       │   │   │   │   ├── ToolItem.tsx
│       │   │   │   │   ├── ToolSelectDialog.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Voice/
│       │   │   │   │   ├── SpeechToText.tsx
│       │   │   │   │   ├── TextToSpeechButton.tsx
│       │   │   │   │   └── textToSpeechStore.tsx
│       │   │   │   ├── WebView.tsx
│       │   │   │   ├── index.ts
│       │   │   │   ├── svg/
│       │   │   │   │   ├── AnthropicIcon.tsx
│       │   │   │   │   ├── AnthropicMinimalIcon.tsx
│       │   │   │   │   ├── AppleIcon.tsx
│       │   │   │   │   ├── ArchiveIcon.tsx
│       │   │   │   │   ├── AssistantIcon.tsx
│       │   │   │   │   ├── AttachmentIcon.tsx
│       │   │   │   │   ├── AzureMinimalIcon.tsx
│       │   │   │   │   ├── BedrockIcon.tsx
│       │   │   │   │   ├── BirthdayIcon.tsx
│       │   │   │   │   ├── Blocks.tsx
│       │   │   │   │   ├── CautionIcon.tsx
│       │   │   │   │   ├── ChatGPTMinimalIcon.tsx
│       │   │   │   │   ├── ChatIcon.tsx
│       │   │   │   │   ├── CheckMark.tsx
│       │   │   │   │   ├── CircleHelpIcon.tsx
│       │   │   │   │   ├── Clipboard.tsx
│       │   │   │   │   ├── CodeyIcon.tsx
│       │   │   │   │   ├── ContinueIcon.tsx
│       │   │   │   │   ├── ConvoIcon.tsx
│       │   │   │   │   ├── CrossIcon.tsx
│       │   │   │   │   ├── CustomMinimalIcon.tsx
│       │   │   │   │   ├── DarkModeIcon.tsx
│       │   │   │   │   ├── DataIcon.tsx
│       │   │   │   │   ├── DiscordIcon.tsx
│       │   │   │   │   ├── DislikeIcon.tsx
│       │   │   │   │   ├── DotsIcon.tsx
│       │   │   │   │   ├── DownIcon.tsx
│       │   │   │   │   ├── EditIcon.tsx
│       │   │   │   │   ├── ExperimentIcon.tsx
│       │   │   │   │   ├── FacebookIcon.tsx
│       │   │   │   │   ├── Files/
│       │   │   │   │   │   ├── CodePaths.tsx
│       │   │   │   │   │   ├── FileIcon.tsx
│       │   │   │   │   │   ├── FilePaths.tsx
│       │   │   │   │   │   ├── SheetPaths.tsx
│       │   │   │   │   │   └── TextPaths.tsx
│       │   │   │   │   ├── GPTIcon.tsx
│       │   │   │   │   ├── GearIcon.tsx
│       │   │   │   │   ├── GeminiIcon.tsx
│       │   │   │   │   ├── GithubIcon.tsx
│       │   │   │   │   ├── GoogleIcon.tsx
│       │   │   │   │   ├── GoogleIconChat.tsx
│       │   │   │   │   ├── GoogleMinimalIcon.tsx
│       │   │   │   │   ├── LightModeIcon.tsx
│       │   │   │   │   ├── LightningIcon.tsx
│       │   │   │   │   ├── LikeIcon.tsx
│       │   │   │   │   ├── LinkIcon.tsx
│       │   │   │   │   ├── ListeningIcon.tsx
│       │   │   │   │   ├── LockIcon.tsx
│       │   │   │   │   ├── LogOutIcon.tsx
│       │   │   │   │   ├── MessagesSquared.tsx
│       │   │   │   │   ├── MinimalPlugin.tsx
│       │   │   │   │   ├── NewChatIcon.tsx
│       │   │   │   │   ├── OpenAIMinimalIcon.tsx
│       │   │   │   │   ├── OpenIDIcon.tsx
│       │   │   │   │   ├── PaLMIcon.tsx
│       │   │   │   │   ├── PaLMinimalIcon.tsx
│       │   │   │   │   ├── Panel.tsx
│       │   │   │   │   ├── PinIcon.tsx
│       │   │   │   │   ├── Plugin.tsx
│       │   │   │   │   ├── RegenerateIcon.tsx
│       │   │   │   │   ├── RenameIcon.tsx
│       │   │   │   │   ├── SaveIcon.tsx
│       │   │   │   │   ├── SendIcon.tsx
│       │   │   │   │   ├── SendMessageIcon.tsx
│       │   │   │   │   ├── Sparkles.tsx
│       │   │   │   │   ├── SpeechIcon.tsx
│       │   │   │   │   ├── Spinner.tsx
│       │   │   │   │   ├── StopGeneratingIcon.tsx
│       │   │   │   │   ├── SunIcon.tsx
│       │   │   │   │   ├── SwitchIcon.tsx
│       │   │   │   │   ├── TrashIcon.tsx
│       │   │   │   │   ├── UserIcon.tsx
│       │   │   │   │   ├── VolumeIcon.tsx
│       │   │   │   │   ├── VolumeMuteIcon.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   └── ui/
│       │   │   │       ├── Accordion.tsx
│       │   │   │       ├── AlertDialog.tsx
│       │   │   │       ├── AnimatedSearchInput.tsx
│       │   │   │       ├── Badge.tsx
│       │   │   │       ├── Breadcrumb.tsx
│       │   │   │       ├── Button.tsx
│       │   │   │       ├── Card.tsx
│       │   │   │       ├── Checkbox.tsx
│       │   │   │       ├── Collapsible.tsx
│       │   │   │       ├── Combobox.tsx
│       │   │   │       ├── ControlCombobox.tsx
│       │   │   │       ├── DataTable.tsx
│       │   │   │       ├── DataTableColumnHeader.tsx
│       │   │   │       ├── DelayedRender.tsx
│       │   │   │       ├── Dialog.tsx
│       │   │   │       ├── DialogTemplate.spec.tsx
│       │   │   │       ├── DialogTemplate.tsx
│       │   │   │       ├── Dropdown.tsx
│       │   │   │       ├── DropdownMenu.tsx
│       │   │   │       ├── DropdownNoState.tsx
│       │   │   │       ├── DropdownPopup.tsx
│       │   │   │       ├── FileUpload.tsx
│       │   │   │       ├── HoverCard.tsx
│       │   │   │       ├── Input.tsx
│       │   │   │       ├── InputCombobox.tsx
│       │   │   │       ├── InputNumber.tsx
│       │   │   │       ├── InputOTP.tsx
│       │   │   │       ├── InputWithDropDown.tsx
│       │   │   │       ├── Label.tsx
│       │   │   │       ├── ModelParameters.tsx
│       │   │   │       ├── MultiSearch.tsx
│       │   │   │       ├── MultiSelect.tsx
│       │   │   │       ├── MultiSelectDropDown.tsx
│       │   │   │       ├── MultiSelectPop.tsx
│       │   │   │       ├── OGDialogTemplate.tsx
│       │   │   │       ├── OriginalDialog.tsx
│       │   │   │       ├── Pagination.tsx
│       │   │   │       ├── Popover.tsx
│       │   │   │       ├── Progress.tsx
│       │   │   │       ├── Prompt.tsx
│       │   │   │       ├── QuestionMark.tsx
│       │   │   │       ├── Resizable.tsx
│       │   │   │       ├── Select.tsx
│       │   │   │       ├── SelectDropDown.tsx
│       │   │   │       ├── SelectDropDownPop.tsx
│       │   │   │       ├── Separator.tsx
│       │   │   │       ├── Sheet.tsx
│       │   │   │       ├── Skeleton.tsx
│       │   │   │       ├── Slider.tsx
│       │   │   │       ├── Steps.tsx
│       │   │   │       ├── Switch.tsx
│       │   │   │       ├── Table.tsx
│       │   │   │       ├── Tabs.tsx
│       │   │   │       ├── Tag.tsx
│       │   │   │       ├── TermsAndConditionsModal.tsx
│       │   │   │       ├── Textarea.tsx
│       │   │   │       ├── TextareaAutosize.tsx
│       │   │   │       ├── ThemeSelector.tsx
│       │   │   │       ├── Toast.tsx
│       │   │   │       ├── Tooltip.tsx
│       │   │   │       ├── Tooltip2.tsx
│       │   │   │       ├── icon/
│       │   │   │       │   ├── Apps.tsx
│       │   │   │       │   ├── File/
│       │   │   │       │   │   ├── FileIcon.tsx
│       │   │   │       │   │   └── index.tsx
│       │   │   │       │   ├── Loading/
│       │   │   │       │   │   └── index.tsx
│       │   │   │       │   ├── Message/
│       │   │   │       │   │   └── index.tsx
│       │   │   │       │   ├── Star/
│       │   │   │       │   │   └── index.tsx
│       │   │   │       │   └── Voice/
│       │   │   │       │       └── index.tsx
│       │   │   │       └── index.ts
│       │   │   ├── data-provider/
│       │   │   │   ├── Agents/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── mutations.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── Auth/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── mutations.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── Endpoints/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── Files/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── mutations.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── Messages/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── mutations.ts
│       │   │   │   ├── Misc/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── Tools/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── mutations.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── connection.ts
│       │   │   │   ├── data-provider/
│       │   │   │   │   ├── .gitignore
│       │   │   │   │   ├── babel.config.js
│       │   │   │   │   ├── check_updates.sh
│       │   │   │   │   ├── jest.config.js
│       │   │   │   │   ├── package.json
│       │   │   │   │   ├── react-query/
│       │   │   │   │   │   └── package.json
│       │   │   │   │   ├── rollup.config.js
│       │   │   │   │   ├── server-rollup.config.js
│       │   │   │   │   ├── specs/
│       │   │   │   │   │   ├── actions.spec.ts
│       │   │   │   │   │   ├── azure.spec.ts
│       │   │   │   │   │   ├── filetypes.spec.ts
│       │   │   │   │   │   ├── generate.spec.ts
│       │   │   │   │   │   ├── mcp.spec.ts
│       │   │   │   │   │   ├── openapiSpecs.ts
│       │   │   │   │   │   └── utils.spec.ts
│       │   │   │   │   ├── src/
│       │   │   │   │   │   ├── actions.ts
│       │   │   │   │   │   ├── api-endpoints.ts
│       │   │   │   │   │   ├── artifacts.ts
│       │   │   │   │   │   ├── azure.ts
│       │   │   │   │   │   ├── bedrock.ts
│       │   │   │   │   │   ├── config.ts
│       │   │   │   │   │   ├── createPayload.ts
│       │   │   │   │   │   ├── data-service.ts
│       │   │   │   │   │   ├── file-config.ts
│       │   │   │   │   │   ├── generate.ts
│       │   │   │   │   │   ├── headers-helpers.ts
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   ├── keys.ts
│       │   │   │   │   │   ├── mcp.ts
│       │   │   │   │   │   ├── models.ts
│       │   │   │   │   │   ├── parsers.ts
│       │   │   │   │   │   ├── react-query/
│       │   │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   │   └── react-query-service.ts
│       │   │   │   │   │   ├── request.ts
│       │   │   │   │   │   ├── roles.ts
│       │   │   │   │   │   ├── schemas.ts
│       │   │   │   │   │   ├── types/
│       │   │   │   │   │   │   ├── agents.ts
│       │   │   │   │   │   │   ├── assistants.ts
│       │   │   │   │   │   │   ├── files.ts
│       │   │   │   │   │   │   ├── mutations.ts
│       │   │   │   │   │   │   ├── queries.ts
│       │   │   │   │   │   │   └── runs.ts
│       │   │   │   │   │   ├── types.ts
│       │   │   │   │   │   ├── utils.ts
│       │   │   │   │   │   ├── zod.spec.ts
│       │   │   │   │   │   └── zod.ts
│       │   │   │   │   ├── tsconfig.json
│       │   │   │   │   └── tsconfig.spec.json
│       │   │   │   ├── index.ts
│       │   │   │   ├── mutations.ts
│       │   │   │   ├── prompts.ts
│       │   │   │   ├── queries.ts
│       │   │   │   ├── roles.ts
│       │   │   │   └── tags.ts
│       │   │   ├── hooks/
│       │   │   │   ├── Agents/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAgentsMap.ts
│       │   │   │   │   └── useSelectAgent.ts
│       │   │   │   ├── ApiErrorBoundaryContext.tsx
│       │   │   │   ├── Artifacts/
│       │   │   │   │   ├── useArtifactProps.ts
│       │   │   │   │   ├── useArtifacts.ts
│       │   │   │   │   └── useAutoScroll.ts
│       │   │   │   ├── Assistants/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAssistantListMap.ts
│       │   │   │   │   ├── useAssistantsMap.ts
│       │   │   │   │   └── useSelectAssistant.ts
│       │   │   │   ├── Audio/
│       │   │   │   │   ├── MediaSourceAppender.ts
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAudioRef.ts
│       │   │   │   │   ├── useCustomAudioRef.ts
│       │   │   │   │   ├── usePauseGlobalAudio.ts
│       │   │   │   │   ├── useTTSBrowser.ts
│       │   │   │   │   ├── useTTSEdge.ts
│       │   │   │   │   └── useTTSExternal.ts
│       │   │   │   ├── AuthContext.tsx
│       │   │   │   ├── Chat/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAddedHelpers.ts
│       │   │   │   │   ├── useAddedResponse.ts
│       │   │   │   │   ├── useChatFunctions.ts
│       │   │   │   │   └── useChatHelpers.ts
│       │   │   │   ├── Config/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAppStartup.ts
│       │   │   │   │   ├── useClearStates.ts
│       │   │   │   │   └── useConfigOverride.ts
│       │   │   │   ├── Conversations/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useArchiveHandler.ts
│       │   │   │   │   ├── useBookmarkSuccess.ts
│       │   │   │   │   ├── useDebouncedInput.ts
│       │   │   │   │   ├── useDefaultConvo.ts
│       │   │   │   │   ├── useExportConversation.ts
│       │   │   │   │   ├── useGenerateConvo.ts
│       │   │   │   │   ├── useGetSender.ts
│       │   │   │   │   ├── useNavigateToConvo.tsx
│       │   │   │   │   ├── useParameterEffects.ts
│       │   │   │   │   ├── usePresetIndexOptions.ts
│       │   │   │   │   ├── usePresets.ts
│       │   │   │   │   ├── useSearch.ts
│       │   │   │   │   ├── useSetIndexOptions.ts
│       │   │   │   │   └── useUpdateTagsInConvo.ts
│       │   │   │   ├── Files/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useDelayedUploadToast.ts
│       │   │   │   │   ├── useDeleteFilesFromTable.tsx
│       │   │   │   │   ├── useDragHelpers.ts
│       │   │   │   │   ├── useFileDeletion.ts
│       │   │   │   │   ├── useFileHandling.ts
│       │   │   │   │   ├── useFileMap.ts
│       │   │   │   │   ├── useSetFilesToDelete.ts
│       │   │   │   │   └── useUpdateFiles.ts
│       │   │   │   ├── Generic/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── useLazyEffect.ts
│       │   │   │   ├── Input/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAutoSave.ts
│       │   │   │   │   ├── useCombobox.ts
│       │   │   │   │   ├── useDebounce.ts
│       │   │   │   │   ├── useGetAudioSettings.ts
│       │   │   │   │   ├── useHandleKeyUp.ts
│       │   │   │   │   ├── useMentions.ts
│       │   │   │   │   ├── useMultipleKeys.ts
│       │   │   │   │   ├── useQueryParams.ts
│       │   │   │   │   ├── useRequiresKey.ts
│       │   │   │   │   ├── useSelectMention.ts
│       │   │   │   │   ├── useSpeechToText.ts
│       │   │   │   │   ├── useSpeechToTextBrowser.ts
│       │   │   │   │   ├── useSpeechToTextExternal.ts
│       │   │   │   │   ├── useTextToSpeech.ts
│       │   │   │   │   ├── useTextToSpeechBrowser.ts
│       │   │   │   │   ├── useTextToSpeechEdge.ts
│       │   │   │   │   ├── useTextToSpeechExternal.ts
│       │   │   │   │   ├── useTextarea.ts
│       │   │   │   │   └── useUserKey.ts
│       │   │   │   ├── Messages/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAvatar.ts
│       │   │   │   │   ├── useBuildMessageTree.ts
│       │   │   │   │   ├── useCopyToClipboard.ts
│       │   │   │   │   ├── useMessageActions.tsx
│       │   │   │   │   ├── useMessageHelpers.tsx
│       │   │   │   │   ├── useMessageProcess.tsx
│       │   │   │   │   ├── useMessageScrolling.ts
│       │   │   │   │   ├── useProgress.ts
│       │   │   │   │   └── useSubmitMessage.ts
│       │   │   │   ├── Nav/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useNavHelpers.ts
│       │   │   │   │   ├── useNavScrolling.ts
│       │   │   │   │   └── useSideNavLinks.ts
│       │   │   │   ├── Plugins/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAuthCodeTool.ts
│       │   │   │   │   ├── useCodeApiKeyForm.ts
│       │   │   │   │   ├── usePluginDialogHelpers.ts
│       │   │   │   │   ├── usePluginInstall.ts
│       │   │   │   │   └── useToolCallsMap.ts
│       │   │   │   ├── Prompts/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useCategories.tsx
│       │   │   │   │   └── usePromptGroupsNav.ts
│       │   │   │   ├── Roles/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── useHasAccess.ts
│       │   │   │   ├── SSE/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAttachmentHandler.ts
│       │   │   │   │   ├── useContentHandler.ts
│       │   │   │   │   ├── useEventHandlers.ts
│       │   │   │   │   ├── useSSE.ts
│       │   │   │   │   └── useStepHandler.ts
│       │   │   │   ├── ScreenshotContext.tsx
│       │   │   │   ├── ThemeContext.tsx
│       │   │   │   ├── Websocket/
│       │   │   │   │   ├── index.tsx
│       │   │   │   │   └── mock.js
│       │   │   │   ├── index.ts
│       │   │   │   ├── useAutoScroll.ts
│       │   │   │   ├── useDelayedRender.tsx
│       │   │   │   ├── useDocumentTitle.ts
│       │   │   │   ├── useGenerationsByLatest.ts
│       │   │   │   ├── useLinsightManager.tsx
│       │   │   │   ├── useLocalStorage.tsx
│       │   │   │   ├── useLocalize.ts
│       │   │   │   ├── useMediaQuery.tsx
│       │   │   │   ├── useNewConvo.ts
│       │   │   │   ├── useOnClickOutside.ts
│       │   │   │   ├── useScrollToRef.ts
│       │   │   │   ├── useTimeout.tsx
│       │   │   │   └── useToast.ts
│       │   │   ├── locales/
│       │   │   │   ├── Translation.spec.ts
│       │   │   │   ├── ar/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── de/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── en/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── es/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── et/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── fi/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── fr/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── he/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── i18n.ts
│       │   │   │   ├── id/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── it/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── ja/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── ka/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── ko/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── nl/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── pl/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── pt-BR/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── pt-PT/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── ru/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── sv/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── tr/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── vi/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── zh-Hans/
│       │   │   │   │   └── translation.json
│       │   │   │   └── zh-Hant/
│       │   │   │       └── translation.json
│       │   │   ├── main.jsx
│       │   │   ├── markdown.css
│       │   │   ├── mobile.css
│       │   │   ├── pages/
│       │   │   │   ├── Page404.tsx
│       │   │   │   ├── appChat/
│       │   │   │   │   ├── ChatInput.tsx
│       │   │   │   │   ├── ChatMessages.tsx
│       │   │   │   │   ├── ChatView.tsx
│       │   │   │   │   ├── README.md
│       │   │   │   │   ├── appUtils/
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   └── skillMethod.ts
│       │   │   │   │   ├── components/
│       │   │   │   │   │   ├── ChatFile.tsx
│       │   │   │   │   │   ├── GuideWord.tsx
│       │   │   │   │   │   ├── InputComponent.tsx
│       │   │   │   │   │   ├── InputFileComponent.tsx
│       │   │   │   │   │   ├── InputFiles.tsx
│       │   │   │   │   │   ├── InputForm.tsx
│       │   │   │   │   │   ├── InputFormSkill.tsx
│       │   │   │   │   │   ├── MessageBs.tsx
│       │   │   │   │   │   ├── MessageBsChoose.tsx
│       │   │   │   │   │   ├── MessageButtons.tsx
│       │   │   │   │   │   ├── MessageFeedbackForm.tsx
│       │   │   │   │   │   ├── MessageFile.tsx
│       │   │   │   │   │   ├── MessageNodeRun.tsx
│       │   │   │   │   │   ├── MessageRemark.tsx
│       │   │   │   │   │   ├── MessageRunlog.tsx
│       │   │   │   │   │   ├── MessageSource.tsx
│       │   │   │   │   │   ├── MessageSystem.tsx
│       │   │   │   │   │   ├── MessageUser.tsx
│       │   │   │   │   │   └── ResouceModal.tsx
│       │   │   │   │   ├── index.tsx
│       │   │   │   │   ├── store/
│       │   │   │   │   │   └── atoms.ts
│       │   │   │   │   ├── useAreaText.ts
│       │   │   │   │   ├── useChatHelpers.ts
│       │   │   │   │   ├── useFileDropAndPaste.ts
│       │   │   │   │   ├── useMessages.ts
│       │   │   │   │   └── useWebsocket.ts
│       │   │   │   ├── apps/
│       │   │   │   │   ├── components/
│       │   │   │   │   │   ├── AgentCard.tsx
│       │   │   │   │   │   ├── AgentGrid.tsx
│       │   │   │   │   │   ├── AgentNavigation.tsx
│       │   │   │   │   │   ├── MarkLabel.tsx
│       │   │   │   │   │   └── SearchOverlay.tsx
│       │   │   │   │   └── index.tsx
│       │   │   │   └── share.tsx
│       │   │   ├── routes/
│       │   │   │   ├── ChatRoute.tsx
│       │   │   │   ├── Dashboard.tsx
│       │   │   │   ├── Layouts/
│       │   │   │   │   ├── DashBreadcrumb.tsx
│       │   │   │   │   ├── Dashboard.tsx
│       │   │   │   │   ├── Login.tsx
│       │   │   │   │   └── Startup.tsx
│       │   │   │   ├── Root.tsx
│       │   │   │   ├── RouteErrorBoundary.tsx
│       │   │   │   ├── Search.tsx
│       │   │   │   ├── ShareRoute.tsx
│       │   │   │   ├── index.tsx
│       │   │   │   └── useAuthRedirect.ts
│       │   │   ├── store/
│       │   │   │   ├── artifacts.ts
│       │   │   │   ├── endpoints.ts
│       │   │   │   ├── families.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── language.ts
│       │   │   │   ├── linsight.ts
│       │   │   │   ├── misc.ts
│       │   │   │   ├── modeltype.ts
│       │   │   │   ├── preset.ts
│       │   │   │   ├── prompts.ts
│       │   │   │   ├── search.ts
│       │   │   │   ├── settings.ts
│       │   │   │   ├── submission.ts
│       │   │   │   ├── temporary.ts
│       │   │   │   ├── text.ts
│       │   │   │   ├── toast.ts
│       │   │   │   ├── user.ts
│       │   │   │   └── utils.ts
│       │   │   ├── style.css
│       │   │   ├── utils/
│       │   │   │   ├── artifacts.spec.ts
│       │   │   │   ├── artifacts.ts
│       │   │   │   ├── buildDefaultConvo.ts
│       │   │   │   ├── buildTree.ts
│       │   │   │   ├── cleanupPreset.ts
│       │   │   │   ├── cn.ts
│       │   │   │   ├── collection.ts
│       │   │   │   ├── conversationTags.spec.ts
│       │   │   │   ├── conversationTags.ts
│       │   │   │   ├── convos.fakeData.ts
│       │   │   │   ├── convos.spec.ts
│       │   │   │   ├── convos.ts
│       │   │   │   ├── endpoints.spec.ts
│       │   │   │   ├── endpoints.ts
│       │   │   │   ├── files.ts
│       │   │   │   ├── forms.tsx
│       │   │   │   ├── getDefaultEndpoint.ts
│       │   │   │   ├── getLoginError.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── json.ts
│       │   │   │   ├── languages.ts
│       │   │   │   ├── latex.spec.ts
│       │   │   │   ├── latex.ts
│       │   │   │   ├── localStorage.ts
│       │   │   │   ├── logger.ts
│       │   │   │   ├── map.ts
│       │   │   │   ├── mermaid.ts
│       │   │   │   ├── messages.ts
│       │   │   │   ├── presets.ts
│       │   │   │   ├── promptGroups.ts
│       │   │   │   ├── prompts.ts
│       │   │   │   ├── resetConvo.ts
│       │   │   │   ├── textarea.ts
│       │   │   │   └── theme.ts
│       │   │   ├── vditor.css
│       │   │   └── vite-env.d.ts
│       │   ├── tailwind.config.cjs
│       │   ├── test/
│       │   │   ├── layout-test-utils.tsx
│       │   │   ├── localStorage.mock
│       │   │   ├── matchMedia.mock
│       │   │   ├── resizeObserver.mock
│       │   │   └── setupTests.js
│       │   ├── tsconfig.json
│       │   └── vite.config.ts
│       ├── nginx.conf
│       └── platform/
│           ├── Dockerfile
│           ├── README.md
│           ├── dev.Dockerfile
│           ├── index.html
│           ├── local-packages/
│           │   └── vditor-3.11.1.tgz
│           ├── nginx.conf
│           ├── package.json
│           ├── postcss.config.js
│           ├── prettier.config.js
│           ├── public/
│           │   ├── assets/
│           │   │   └── bisheng/
│           │   │       └── config.js
│           │   ├── cmaps/
│           │   │   ├── Adobe-GB1-UCS2.bcmap
│           │   │   ├── GB-EUC-H.bcmap
│           │   │   └── UniGB-UCS2-H.bcmap
│           │   ├── dataset.csv
│           │   ├── dataset.json
│           │   ├── empty.docx
│           │   ├── iframe.js
│           │   ├── iframe.source.js
│           │   ├── locales/
│           │   │   ├── dev/
│           │   │   │   ├── bs.json
│           │   │   │   ├── flow.json
│           │   │   │   ├── knowledge.json
│           │   │   │   └── model.json
│           │   │   ├── en-US/
│           │   │   │   ├── bs.json
│           │   │   │   ├── dashboard.json
│           │   │   │   ├── flow.json
│           │   │   │   ├── knowledge.json
│           │   │   │   ├── model.json
│           │   │   │   └── tool.json
│           │   │   ├── ja/
│           │   │   │   ├── bs.json
│           │   │   │   ├── dashboard.json
│           │   │   │   ├── flow.json
│           │   │   │   ├── knowledge.json
│           │   │   │   ├── model.json
│           │   │   │   └── tool.json
│           │   │   └── zh-Hans/
│           │   │       ├── bs.json
│           │   │       ├── dashboard.json
│           │   │       ├── flow.json
│           │   │       ├── knowledge.json
│           │   │       ├── model.json
│           │   │       └── tool.json
│           │   ├── models/
│           │   │   └── data.json
│           │   ├── sopexample.xlsx
│           │   ├── template.csv
│           │   └── vditor/
│           │       └── dist/
│           │           ├── css/
│           │           │   └── content-theme/
│           │           │       ├── ant-design.css
│           │           │       ├── dark.css
│           │           │       ├── light.css
│           │           │       └── wechat.css
│           │           ├── index.css
│           │           ├── index.d.ts
│           │           ├── index.js
│           │           ├── js/
│           │           │   ├── graphviz/
│           │           │   │   ├── full.render.js
│           │           │   │   └── viz.js
│           │           │   ├── highlight.js/
│           │           │   │   ├── highlight.pack.js
│           │           │   │   └── styles/
│           │           │   │       ├── abap.css
│           │           │   │       ├── algol.css
│           │           │   │       ├── algol_nu.css
│           │           │   │       ├── ant-design.css
│           │           │   │       ├── arduino.css
│           │           │   │       ├── autumn.css
│           │           │   │       ├── borland.css
│           │           │   │       ├── bw.css
│           │           │   │       ├── colorful.css
│           │           │   │       ├── dracula.css
│           │           │   │       ├── emacs.css
│           │           │   │       ├── friendly.css
│           │           │   │       ├── fruity.css
│           │           │   │       ├── github.css
│           │           │   │       ├── igor.css
│           │           │   │       ├── lovelace.css
│           │           │   │       ├── manni.css
│           │           │   │       ├── monokai.css
│           │           │   │       ├── monokailight.css
│           │           │   │       ├── murphy.css
│           │           │   │       ├── native.css
│           │           │   │       ├── paraiso-dark.css
│           │           │   │       ├── paraiso-light.css
│           │           │   │       ├── pastie.css
│           │           │   │       ├── perldoc.css
│           │           │   │       ├── pygments.css
│           │           │   │       ├── rainbow_dash.css
│           │           │   │       ├── rrt.css
│           │           │   │       ├── solarized-dark.css
│           │           │   │       ├── solarized-dark256.css
│           │           │   │       ├── solarized-light.css
│           │           │   │       ├── swapoff.css
│           │           │   │       ├── tango.css
│           │           │   │       ├── trac.css
│           │           │   │       ├── vim.css
│           │           │   │       ├── vs.css
│           │           │   │       └── xcode.css
│           │           │   ├── i18n/
│           │           │   │   ├── en_US.js
│           │           │   │   ├── fr_FR.js
│           │           │   │   ├── ja_JP.js
│           │           │   │   ├── ko_KR.js
│           │           │   │   ├── pt_BR.js
│           │           │   │   ├── ru_RU.js
│           │           │   │   ├── sv_SE.js
│           │           │   │   ├── zh_CN.js
│           │           │   │   └── zh_TW.js
│           │           │   ├── icons/
│           │           │   │   ├── ant.js
│           │           │   │   └── material.js
│           │           │   ├── markmap/
│           │           │   │   └── prism.css
│           │           │   └── mathjax/
│           │           │       ├── LICENSE
│           │           │       ├── a11y/
│           │           │       │   ├── assistive-mml.js
│           │           │       │   ├── complexity.js
│           │           │       │   ├── explorer.js
│           │           │       │   └── semantic-enrich.js
│           │           │       ├── input/
│           │           │       │   ├── asciimath.js
│           │           │       │   ├── mml/
│           │           │       │   │   └── entities.js
│           │           │       │   ├── mml.js
│           │           │       │   ├── tex/
│           │           │       │   │   └── extensions/
│           │           │       │   │       ├── action.js
│           │           │       │   │       ├── all-packages.js
│           │           │       │   │       ├── ams.js
│           │           │       │   │       ├── amscd.js
│           │           │       │   │       ├── autoload.js
│           │           │       │   │       ├── bbox.js
│           │           │       │   │       ├── boldsymbol.js
│           │           │       │   │       ├── braket.js
│           │           │       │   │       ├── bussproofs.js
│           │           │       │   │       ├── cancel.js
│           │           │       │   │       ├── color.js
│           │           │       │   │       ├── colorV2.js
│           │           │       │   │       ├── configMacros.js
│           │           │       │   │       ├── enclose.js
│           │           │       │   │       ├── extpfeil.js
│           │           │       │   │       ├── html.js
│           │           │       │   │       ├── mhchem.js
│           │           │       │   │       ├── newcommand.js
│           │           │       │   │       ├── noerrors.js
│           │           │       │   │       ├── noundefined.js
│           │           │       │   │       ├── physics.js
│           │           │       │   │       ├── require.js
│           │           │       │   │       ├── tagFormat.js
│           │           │       │   │       ├── textmacros.js
│           │           │       │   │       ├── unicode.js
│           │           │       │   │       └── verb.js
│           │           │       │   ├── tex-base.js
│           │           │       │   ├── tex-full.js
│           │           │       │   └── tex.js
│           │           │       ├── sre/
│           │           │       │   ├── mathmaps/
│           │           │       │   │   ├── de.js
│           │           │       │   │   ├── en.js
│           │           │       │   │   ├── es.js
│           │           │       │   │   ├── fr.js
│           │           │       │   │   ├── mathmaps_ie.js
│           │           │       │   │   └── nemeth.js
│           │           │       │   ├── sre-node.js
│           │           │       │   └── sre_browser.js
│           │           │       └── tex-svg-full.js
│           │           ├── method.d.ts
│           │           ├── method.js
│           │           ├── ts/
│           │           │   ├── constants.d.ts
│           │           │   ├── devtools/
│           │           │   │   └── index.d.ts
│           │           │   ├── export/
│           │           │   │   └── index.d.ts
│           │           │   ├── hint/
│           │           │   │   └── index.d.ts
│           │           │   ├── ir/
│           │           │   │   ├── expandMarker.d.ts
│           │           │   │   ├── highlightToolbarIR.d.ts
│           │           │   │   ├── index.d.ts
│           │           │   │   ├── input.d.ts
│           │           │   │   ├── process.d.ts
│           │           │   │   └── processKeydown.d.ts
│           │           │   ├── markdown/
│           │           │   │   ├── abcRender.d.ts
│           │           │   │   ├── adapterRender.d.ts
│           │           │   │   ├── anchorRender.d.ts
│           │           │   │   ├── chartRender.d.ts
│           │           │   │   ├── codeRender.d.ts
│           │           │   │   ├── flowchartRender.d.ts
│           │           │   │   ├── getHTML.d.ts
│           │           │   │   ├── getMarkdown.d.ts
│           │           │   │   ├── graphvizRender.d.ts
│           │           │   │   ├── highlightRender.d.ts
│           │           │   │   ├── lazyLoadImageRender.d.ts
│           │           │   │   ├── markmapRender.d.ts
│           │           │   │   ├── mathRender.d.ts
│           │           │   │   ├── mediaRender.d.ts
│           │           │   │   ├── mermaidRender.d.ts
│           │           │   │   ├── mindmapRender.d.ts
│           │           │   │   ├── outlineRender.d.ts
│           │           │   │   ├── plantumlRender.d.ts
│           │           │   │   ├── previewRender.d.ts
│           │           │   │   ├── setLute.d.ts
│           │           │   │   └── speechRender.d.ts
│           │           │   ├── outline/
│           │           │   │   └── index.d.ts
│           │           │   ├── preview/
│           │           │   │   ├── image.d.ts
│           │           │   │   └── index.d.ts
│           │           │   ├── resize/
│           │           │   │   └── index.d.ts
│           │           │   ├── sv/
│           │           │   │   ├── combineFootnote.d.ts
│           │           │   │   ├── index.d.ts
│           │           │   │   ├── inputEvent.d.ts
│           │           │   │   ├── process.d.ts
│           │           │   │   └── processKeydown.d.ts
│           │           │   ├── tip/
│           │           │   │   └── index.d.ts
│           │           │   ├── toolbar/
│           │           │   │   ├── Both.d.ts
│           │           │   │   ├── Br.d.ts
│           │           │   │   ├── CodeTheme.d.ts
│           │           │   │   ├── ContentTheme.d.ts
│           │           │   │   ├── Counter.d.ts
│           │           │   │   ├── Custom.d.ts
│           │           │   │   ├── Devtools.d.ts
│           │           │   │   ├── Divider.d.ts
│           │           │   │   ├── EditMode.d.ts
│           │           │   │   ├── Emoji.d.ts
│           │           │   │   ├── Export.d.ts
│           │           │   │   ├── Fullscreen.d.ts
│           │           │   │   ├── Headings.d.ts
│           │           │   │   ├── Help.d.ts
│           │           │   │   ├── Indent.d.ts
│           │           │   │   ├── Info.d.ts
│           │           │   │   ├── InsertAfter.d.ts
│           │           │   │   ├── InsertBefore.d.ts
│           │           │   │   ├── MenuItem.d.ts
│           │           │   │   ├── Outdent.d.ts
│           │           │   │   ├── Outline.d.ts
│           │           │   │   ├── Preview.d.ts
│           │           │   │   ├── Record.d.ts
│           │           │   │   ├── Redo.d.ts
│           │           │   │   ├── Undo.d.ts
│           │           │   │   ├── Upload.d.ts
│           │           │   │   ├── index.d.ts
│           │           │   │   └── setToolbar.d.ts
│           │           │   ├── ui/
│           │           │   │   ├── initUI.d.ts
│           │           │   │   ├── setCodeTheme.d.ts
│           │           │   │   ├── setContentTheme.d.ts
│           │           │   │   ├── setPreviewMode.d.ts
│           │           │   │   └── setTheme.d.ts
│           │           │   ├── undo/
│           │           │   │   └── index.d.ts
│           │           │   ├── upload/
│           │           │   │   ├── getElement.d.ts
│           │           │   │   ├── index.d.ts
│           │           │   │   └── setHeaders.d.ts
│           │           │   ├── util/
│           │           │   │   ├── Options.d.ts
│           │           │   │   ├── RecordMedia.d.ts
│           │           │   │   ├── addScript.d.ts
│           │           │   │   ├── addStyle.d.ts
│           │           │   │   ├── code160to32.d.ts
│           │           │   │   ├── compatibility.d.ts
│           │           │   │   ├── editorCommonEvent.d.ts
│           │           │   │   ├── fixBrowserBehavior.d.ts
│           │           │   │   ├── function.d.ts
│           │           │   │   ├── getSelectText.d.ts
│           │           │   │   ├── hasClosest.d.ts
│           │           │   │   ├── hasClosestByHeadings.d.ts
│           │           │   │   ├── highlightToolbar.d.ts
│           │           │   │   ├── hotKey.d.ts
│           │           │   │   ├── log.d.ts
│           │           │   │   ├── merge.d.ts
│           │           │   │   ├── processCode.d.ts
│           │           │   │   ├── selection.d.ts
│           │           │   │   └── toc.d.ts
│           │           │   └── wysiwyg/
│           │           │       ├── afterRenderEvent.d.ts
│           │           │       ├── highlightToolbarWYSIWYG.d.ts
│           │           │       ├── index.d.ts
│           │           │       ├── inlineTag.d.ts
│           │           │       ├── input.d.ts
│           │           │       ├── processKeydown.d.ts
│           │           │       ├── renderDomByMd.d.ts
│           │           │       ├── setHeading.d.ts
│           │           │       ├── showCode.d.ts
│           │           │       └── toolbarEvent.d.ts
│           │           └── types/
│           │               └── index.d.ts
│           ├── set_proxy.sh
│           ├── src/
│           │   ├── App.css
│           │   ├── App.tsx
│           │   ├── CustomNodes/
│           │   │   └── GenericNode/
│           │   │       ├── components/
│           │   │       │   └── parameterComponent/
│           │   │       │       ├── index.tsx
│           │   │       │       └── l2Index.tsx
│           │   │       └── index.tsx
│           │   ├── alerts/
│           │   │   ├── alertDropDown/
│           │   │   │   ├── components/
│           │   │   │   │   └── singleAlertComponent/
│           │   │   │   │       └── index.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── error/
│           │   │   │   └── index.tsx
│           │   │   ├── hooks/
│           │   │   │   └── useOnClickOutside/
│           │   │   │       └── index.ts
│           │   │   ├── notice/
│           │   │   │   └── index.tsx
│           │   │   └── success/
│           │   │       └── index.tsx
│           │   ├── assets/
│           │   │   └── AlibabaPuHuiTi-3-55-Regular.otf
│           │   ├── components/
│           │   │   ├── EditFlowSettingsComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── LinSight/
│           │   │   │   ├── DeleteConfirmModal.tsx
│           │   │   │   ├── LocalFileImportDialog.tsx
│           │   │   │   ├── SopActionsBar.tsx
│           │   │   │   ├── SopFormDrawer.tsx
│           │   │   │   ├── SopFromRecord.tsx
│           │   │   │   ├── SopMarkdown.tsx
│           │   │   │   ├── SopSearchBar.tsx
│           │   │   │   ├── SopTable.tsx
│           │   │   │   ├── SopToolsDown.tsx
│           │   │   │   ├── SvgImage.tsx
│           │   │   │   ├── ToolSelector.tsx
│           │   │   │   ├── ToolSelectorContainer.tsx
│           │   │   │   └── ValidationDialog.tsx
│           │   │   ├── Pro/
│           │   │   │   └── security/
│           │   │   │       ├── AssistantSetting.tsx
│           │   │   │       ├── FlowSetting.tsx
│           │   │   │       ├── FormSet.tsx
│           │   │   │       └── FormView.tsx
│           │   │   ├── RadialProgress/
│           │   │   │   └── index.tsx
│           │   │   ├── SanitizedHTMLWrapper/
│           │   │   │   └── index.tsx
│           │   │   ├── ShadTooltipComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── VariablesComponent/
│           │   │   │   ├── VarDialog.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── bs-comp/
│           │   │   │   ├── FileView.tsx
│           │   │   │   ├── apiComponent/
│           │   │   │   │   ├── ApiAccess.tsx
│           │   │   │   │   ├── ApiAccessFlow.tsx
│           │   │   │   │   ├── ApiAccessSkill.tsx
│           │   │   │   │   ├── ChatLink.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── cardComponent/
│           │   │   │   │   ├── LabelShow.tsx
│           │   │   │   │   ├── avatar.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── chatComponent/
│           │   │   │   │   ├── ChatInput.tsx
│           │   │   │   │   ├── FileBs.tsx
│           │   │   │   │   ├── GuideQuestions.tsx
│           │   │   │   │   ├── MessageBs.tsx
│           │   │   │   │   ├── MessageButtons.tsx
│           │   │   │   │   ├── MessagePanne.tsx
│           │   │   │   │   ├── MessageSystem.tsx
│           │   │   │   │   ├── MessageUser.tsx
│           │   │   │   │   ├── RunLog.tsx
│           │   │   │   │   ├── Separator.tsx
│           │   │   │   │   ├── SourceEntry.tsx
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   └── messageStore.ts
│           │   │   │   ├── filterTableDataComponent/
│           │   │   │   │   ├── FilterByApp.tsx
│           │   │   │   │   ├── FilterByDate.tsx
│           │   │   │   │   ├── FilterByUser.tsx
│           │   │   │   │   └── FilterByUsergroup.tsx
│           │   │   │   ├── knowledgeUploadComponent/
│           │   │   │   │   ├── DropZone.tsx
│           │   │   │   │   ├── ProgressItem.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── loadMore/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── selectComponent/
│           │   │   │   │   ├── LabelSelect.tsx
│           │   │   │   │   ├── Users.tsx
│           │   │   │   │   └── knowledge.tsx
│           │   │   │   ├── sheets/
│           │   │   │   │   ├── AppTempSheet.tsx
│           │   │   │   │   ├── SkillChatSheet.tsx
│           │   │   │   │   ├── SkillSheet.tsx
│           │   │   │   │   ├── TaggingSheet.tsx
│           │   │   │   │   └── ToolsSheet.tsx
│           │   │   │   └── tableComponent/
│           │   │   │       └── ColFilterUser.tsx
│           │   │   ├── bs-icons/
│           │   │   │   ├── DownIcon.tsx
│           │   │   │   ├── addTo/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── app/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── avatar/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── bookOpen/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── clear/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── dashboard/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── del/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── down/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── en/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── expand/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── file/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── filter/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── flag/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── flow/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── form/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── github/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── go/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── index.ts
│           │   │   │   ├── knowledge/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── label/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── loading/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── menu/
│           │   │   │   │   ├── application/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── dataset/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── evaluation/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── label/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── log/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── model/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── system/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   └── technology/
│           │   │   │   │       └── index.tsx
│           │   │   │   ├── moon/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── moveOne/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── newApplication/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── office/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── plus/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── plusBox/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── prompt/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── questionMark/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── quit/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── rbDrag/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── save/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── search/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── send/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── setting/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── tab/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── thumbs/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── tip/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── toast/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── tool/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── upload/
│           │   │   │   │   └── index.tsx
│           │   │   │   └── user/
│           │   │   │       └── index.tsx
│           │   │   ├── bs-ui/
│           │   │   │   ├── accordion/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── alert.tsx
│           │   │   │   ├── alertDialog/
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   └── useConfirm.tsx
│           │   │   │   ├── badge/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── button/
│           │   │   │   │   ├── actionButton.tsx
│           │   │   │   │   ├── group.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── calendar/
│           │   │   │   │   ├── datePicker.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── card/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── checkBox/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── command.tsx
│           │   │   │   ├── dialog/
│           │   │   │   │   ├── DialogForceUpdate.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── dropdownMenu/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── editLabel/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── input/
│           │   │   │   │   ├── avator.tsx
│           │   │   │   │   ├── editTitle.tsx
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   └── textInput.tsx
│           │   │   │   ├── label/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── multiSelect.tsx/
│           │   │   │   │   ├── Example.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── pagination/
│           │   │   │   │   ├── autoPagination.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── popover/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── progress.tsx
│           │   │   │   ├── radio/
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   └── radioCard.tsx
│           │   │   │   ├── radio-group.tsx
│           │   │   │   ├── select/
│           │   │   │   │   ├── cascader.tsx
│           │   │   │   │   ├── filter.tsx
│           │   │   │   │   ├── hover.tsx
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   ├── multi.tsx
│           │   │   │   │   └── select.tsx
│           │   │   │   ├── separator.tsx
│           │   │   │   ├── sheet/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── skeleton/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── slider/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── step/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── switch/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── table/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── tabs/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── toast/
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   ├── toast.tsx
│           │   │   │   │   └── use-toast.tsx
│           │   │   │   ├── toggle-group.tsx
│           │   │   │   ├── toggle.tsx
│           │   │   │   ├── tooltip/
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   └── tip.tsx
│           │   │   │   ├── upload/
│           │   │   │   │   └── simple.tsx
│           │   │   │   ├── utils.tsx
│           │   │   │   └── voice/
│           │   │   │       └── index.tsx
│           │   │   ├── chatComponent/
│           │   │   │   ├── buildTrigger/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── chatTrigger/
│           │   │   │   │   └── index.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── codeAreaComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── dictComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── dropdownComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── floatComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── inputComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── inputFileComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── inputListComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── intComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── keypairListComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── promptComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── textAreaComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── toggleComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── toggleShadComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── ui/
│           │   │   │   ├── accordion.tsx
│           │   │   │   ├── editLabel.tsx
│           │   │   │   ├── loading.tsx
│           │   │   │   └── select-custom.tsx
│           │   │   └── voiceFunction/
│           │   │       ├── audioPlayButton.tsx
│           │   │       ├── audioPlayerStore.tsx
│           │   │       └── speechToText.tsx
│           │   ├── constants.tsx
│           │   ├── contexts/
│           │   │   ├── SSEContext.tsx
│           │   │   ├── alertContext.tsx
│           │   │   ├── darkContext.tsx
│           │   │   ├── index.tsx
│           │   │   ├── locationContext.tsx
│           │   │   ├── popUpContext.tsx
│           │   │   ├── tabsContext.tsx
│           │   │   ├── typesContext.tsx
│           │   │   ├── undoRedoContext.tsx
│           │   │   └── userContext.tsx
│           │   ├── controllers/
│           │   │   ├── API/
│           │   │   │   ├── assistant.ts
│           │   │   │   ├── dashboard.ts
│           │   │   │   ├── evaluate.ts
│           │   │   │   ├── finetune.ts
│           │   │   │   ├── flow.ts
│           │   │   │   ├── index.ts
│           │   │   │   ├── label.ts
│           │   │   │   ├── linsight.ts
│           │   │   │   ├── log.ts
│           │   │   │   ├── pro.ts
│           │   │   │   ├── tools.ts
│           │   │   │   ├── user.ts
│           │   │   │   ├── workbench.ts
│           │   │   │   └── workflow.ts
│           │   │   ├── hooks/
│           │   │   │   ├── knowledge.ts
│           │   │   │   └── useSopManagement.ts
│           │   │   └── request.ts
│           │   ├── flow_constants.tsx
│           │   ├── i18n.js
│           │   ├── icons/
│           │   │   ├── AWS/
│           │   │   │   ├── AWS.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Airbyte/
│           │   │   │   ├── Airbyte.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Anthropic/
│           │   │   │   ├── Anthropic.jsx
│           │   │   │   ├── AnthropicBox.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── AstraDB/
│           │   │   │   ├── AstraDB.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── AzLogo/
│           │   │   │   ├── AzLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Azure/
│           │   │   │   ├── Azure.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Bing/
│           │   │   │   ├── Bing.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── BotMessageSquare/
│           │   │   │   ├── BotMessageSquare.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Cassandra/
│           │   │   │   ├── Cassandra.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── ChromaIcon/
│           │   │   │   ├── Chroma.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Cohere/
│           │   │   │   ├── Cohere.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Confluence/
│           │   │   │   ├── Confluence.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Couchbase/
│           │   │   │   ├── Couchbase.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── CrewAI/
│           │   │   │   ├── CrewAiIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── ElasticsearchStore/
│           │   │   │   ├── ElasticsearchLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Evernote/
│           │   │   │   ├── EvernoteIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── FacebookMessenger/
│           │   │   │   ├── FacebookMessengerLogo2020.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Firecrawl/
│           │   │   │   ├── FirecrawlLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── GitBook/
│           │   │   │   ├── GitbookSvgrepoCom.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Google/
│           │   │   │   ├── Google.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── GoogleGenerativeAI/
│           │   │   │   ├── GoogleGemini.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── GradientSparkles/
│           │   │   │   └── index.tsx
│           │   │   ├── Groq/
│           │   │   │   ├── GroqLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── HuggingFace/
│           │   │   │   ├── HfLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── IFixIt/
│           │   │   │   ├── IfixitSeeklogoCom.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── LangChain/
│           │   │   │   ├── LangChainIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Maritalk/
│           │   │   │   ├── MaritalkIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Meta/
│           │   │   │   ├── MetaIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Midjorney/
│           │   │   │   ├── MidjourneyEmblem.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── MongoDB/
│           │   │   │   ├── MongodbIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Notion/
│           │   │   │   ├── NotionLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Nvidia/
│           │   │   │   ├── index.tsx
│           │   │   │   └── nvidia.jsx
│           │   │   ├── Ollama/
│           │   │   │   ├── Ollama.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── OpenAi/
│           │   │   │   ├── OpenAi.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Pinecone/
│           │   │   │   ├── PineconeLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Postgres/
│           │   │   │   ├── Postgres.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── PowerPoint/
│           │   │   │   ├── PowerPoint.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Python/
│           │   │   │   ├── Python.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── QDrant/
│           │   │   │   ├── QDrant.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── QianFanChat/
│           │   │   │   ├── QianFanChat.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── ReadTheDocs/
│           │   │   │   ├── ReadthedocsioIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Redis/
│           │   │   │   ├── Redis.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Searx/
│           │   │   │   ├── SearxLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Serper/
│           │   │   │   ├── Serper.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Share/
│           │   │   │   ├── Share.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Share2/
│           │   │   │   ├── Share2.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Slack/
│           │   │   │   ├── SlackIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Streamlit/
│           │   │   │   ├── SvgStreamlit.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Upstash/
│           │   │   │   ├── UpstashIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── VectaraIcon/
│           │   │   │   ├── Vectara.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── VertexAI/
│           │   │   │   ├── VertexAi.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Weaviate/
│           │   │   │   ├── Weaviate.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Wikipedia/
│           │   │   │   ├── Wikipedia.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Wolfram/
│           │   │   │   ├── Wolfram.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Word/
│           │   │   │   ├── Word.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── freezeAll/
│           │   │   │   ├── freezeAll.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── hackerNews/
│           │   │   │   ├── YCombinatorLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── mistral/
│           │   │   │   ├── index.tsx
│           │   │   │   └── mistralIcon.jsx
│           │   │   └── supabase/
│           │   │       ├── SupabaseIcon.jsx
│           │   │       └── index.tsx
│           │   ├── index.tsx
│           │   ├── layout/
│           │   │   ├── HeaderMenu.tsx
│           │   │   └── MainLayout.tsx
│           │   ├── modals/
│           │   │   ├── EditNodeModal/
│           │   │   │   └── index.tsx
│           │   │   ├── L2ParamsModal/
│           │   │   │   └── index.tsx
│           │   │   ├── UploadModal/
│           │   │   │   └── upload.ts
│           │   │   ├── baseModal/
│           │   │   │   └── index.tsx
│           │   │   ├── codeAreaModal/
│           │   │   │   └── index.tsx
│           │   │   ├── dictAreaModal/
│           │   │   │   └── index.tsx
│           │   │   ├── exportModal/
│           │   │   │   └── index.tsx
│           │   │   ├── formModal/
│           │   │   │   ├── chatInput/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── chatMessage/
│           │   │   │   │   ├── codeBlock/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── fileComponent/
│           │   │   │   │   └── index.tsx
│           │   │   │   └── index.tsx
│           │   │   └── genericModal/
│           │   │       └── index.tsx
│           │   ├── pages/
│           │   │   ├── BuildPage/
│           │   │   │   ├── CreateApp.tsx
│           │   │   │   ├── appTemps.tsx
│           │   │   │   ├── apps.tsx
│           │   │   │   ├── assistant/
│           │   │   │   │   ├── CreateAssistant.tsx
│           │   │   │   │   └── editAssistant/
│           │   │   │   │       ├── AutoPromptDialog.tsx
│           │   │   │   │       ├── EditAssistantDialog.tsx
│           │   │   │   │       ├── Header.tsx
│           │   │   │   │       ├── ModelSelect.tsx
│           │   │   │   │       ├── Prompt.tsx
│           │   │   │   │       ├── Setting.tsx
│           │   │   │   │       ├── Temperature.tsx
│           │   │   │   │       ├── TestChat.tsx
│           │   │   │   │       └── index.tsx
│           │   │   │   ├── bench/
│           │   │   │   │   ├── DialogueWork.tsx
│           │   │   │   │   ├── FormInput.tsx
│           │   │   │   │   ├── IconUploadSection.tsx
│           │   │   │   │   ├── LingSiWork.tsx
│           │   │   │   │   ├── ModelManagement.tsx
│           │   │   │   │   ├── Preview.tsx
│           │   │   │   │   ├── ToggleSection.tsx
│           │   │   │   │   ├── WebSearchConfig.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── flow/
│           │   │   │   │   ├── Controls.tsx
│           │   │   │   │   ├── FlowChat/
│           │   │   │   │   │   ├── Chat.tsx
│           │   │   │   │   │   ├── ChatFileFile.tsx
│           │   │   │   │   │   ├── ChatFiles.tsx
│           │   │   │   │   │   ├── ChatInput.tsx
│           │   │   │   │   │   ├── ChatMessages.tsx
│           │   │   │   │   │   ├── ChatPane.tsx
│           │   │   │   │   │   ├── ChatTest.tsx
│           │   │   │   │   │   ├── DragDropOverlay.tsx
│           │   │   │   │   │   ├── GuideQuestions.tsx
│           │   │   │   │   │   ├── InputForm.tsx
│           │   │   │   │   │   ├── MessageBs.tsx
│           │   │   │   │   │   ├── MessageBsChoose.tsx
│           │   │   │   │   │   ├── MessageMarkDown.tsx
│           │   │   │   │   │   ├── MessageNodeRun.tsx
│           │   │   │   │   │   ├── MessageUser.tsx
│           │   │   │   │   │   ├── messageStore.ts
│           │   │   │   │   │   └── useFileDropAndPaste.ts
│           │   │   │   │   ├── FlowEdge.tsx
│           │   │   │   │   ├── FlowNode/
│           │   │   │   │   │   ├── EditText.tsx
│           │   │   │   │   │   ├── NodeLogo.tsx
│           │   │   │   │   │   ├── NodeTabs.tsx
│           │   │   │   │   │   ├── NodeToolbarComponent.tsx
│           │   │   │   │   │   ├── Parameter.tsx
│           │   │   │   │   │   ├── ParameterGroup.tsx
│           │   │   │   │   │   ├── ParameterSubGroup.tsx
│           │   │   │   │   │   ├── RunLog.tsx
│           │   │   │   │   │   ├── RunTest.tsx
│           │   │   │   │   │   ├── component/
│           │   │   │   │   │   │   ├── CodeInputItem.tsx
│           │   │   │   │   │   │   ├── CodeOutputItem.tsx
│           │   │   │   │   │   │   ├── CodePythonItem.tsx
│           │   │   │   │   │   │   ├── ConditionItem.tsx
│           │   │   │   │   │   │   ├── DragOptions.tsx
│           │   │   │   │   │   │   ├── FileTypeSelect.tsx
│           │   │   │   │   │   │   ├── GlobalVarItem.tsx
│           │   │   │   │   │   │   ├── GroupInputFile.tsx
│           │   │   │   │   │   │   ├── HistoryNumItem.tsx
│           │   │   │   │   │   │   ├── ImagePromptItem.tsx
│           │   │   │   │   │   │   ├── InputFormItem.tsx
│           │   │   │   │   │   │   ├── InputFormItemOld.tsx
│           │   │   │   │   │   │   ├── InputItem.tsx
│           │   │   │   │   │   │   ├── InputListItem.tsx
│           │   │   │   │   │   │   ├── KnowledgeQaSelectItem.tsx
│           │   │   │   │   │   │   ├── KnowledgeSelectItem.tsx
│           │   │   │   │   │   │   ├── MetadataFilter.tsx
│           │   │   │   │   │   │   ├── ModelItem.tsx
│           │   │   │   │   │   │   ├── NumberInput.tsx
│           │   │   │   │   │   │   ├── OutputItem.tsx
│           │   │   │   │   │   │   ├── ReportItem.tsx
│           │   │   │   │   │   │   ├── ReportWordEdit.tsx
│           │   │   │   │   │   │   ├── RetrievalWeightSlider.tsx
│           │   │   │   │   │   │   ├── SelectVar.tsx
│           │   │   │   │   │   │   ├── SliderItem.tsx
│           │   │   │   │   │   │   ├── SqlConfigItem.tsx
│           │   │   │   │   │   │   ├── SwitchItem.tsx
│           │   │   │   │   │   │   ├── TextAreaItem.tsx
│           │   │   │   │   │   │   ├── ToolItem.tsx
│           │   │   │   │   │   │   ├── VarInput.tsx
│           │   │   │   │   │   │   ├── VarItem.tsx
│           │   │   │   │   │   │   ├── VarSelectItem.tsx
│           │   │   │   │   │   │   ├── VarTextareaItem.tsx
│           │   │   │   │   │   │   └── VarTextareaUploadItem.tsx
│           │   │   │   │   │   ├── flowNodeStore.ts
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── Header.tsx
│           │   │   │   │   ├── NoteNode.tsx
│           │   │   │   │   ├── Notification.tsx
│           │   │   │   │   ├── Panne.tsx
│           │   │   │   │   ├── Sidebar.tsx
│           │   │   │   │   ├── flowStore.ts
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── hook.ts
│           │   │   │   ├── skills/
│           │   │   │   │   ├── CardSelectVersion.tsx
│           │   │   │   │   ├── CreateTemp.tsx
│           │   │   │   │   ├── FormSet.tsx
│           │   │   │   │   ├── editSkill/
│           │   │   │   │   │   ├── CollectionNameComponent/
│           │   │   │   │   │   │   ├── index.tsx
│           │   │   │   │   │   │   └── selectCollection.tsx
│           │   │   │   │   │   ├── ConnectionLineComponent/
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   ├── DisclosureComponent/
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   ├── Header.tsx
│           │   │   │   │   │   ├── PageComponent/
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   ├── SelectionMenuComponent/
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   ├── extraSidebarComponent/
│           │   │   │   │   │   │   ├── PersonalComponents.tsx
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   ├── index.tsx
│           │   │   │   │   │   ├── nodeToolbarComponent/
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   └── skillPage.tsx
│           │   │   │   │   └── l2Edit.tsx
│           │   │   │   └── tools/
│           │   │   │       ├── EditMcp.tsx
│           │   │   │       ├── EditTool.tsx
│           │   │   │       ├── ToolItem.tsx
│           │   │   │       ├── ToolSet.tsx
│           │   │   │       ├── builtInTool/
│           │   │   │       │   ├── BingSearch.tsx
│           │   │   │       │   ├── CodeExecutor.tsx
│           │   │   │       │   ├── CrawlerConfig.tsx
│           │   │   │       │   ├── Dalle3.tsx
│           │   │   │       │   ├── EmailConfig.tsx
│           │   │   │       │   ├── FeishuConfig.tsx
│           │   │   │       │   ├── FinancialData.tsx
│           │   │   │       │   ├── InputField.tsx
│           │   │   │       │   ├── JinaConfig.tsx
│           │   │   │       │   ├── SiliconFlowApiKey.tsx
│           │   │   │       │   ├── Tianyancha.tsx
│           │   │   │       │   └── WebSearchFrom.tsx
│           │   │   │       ├── index.tsx
│           │   │   │       └── webSearchStore.ts
│           │   │   ├── ChatAppPage/
│           │   │   │   ├── chatAssitantShare.tsx
│           │   │   │   ├── chatShare.tsx
│           │   │   │   ├── chatWebview.tsx
│           │   │   │   ├── components/
│           │   │   │   │   ├── ChatHome.tsx
│           │   │   │   │   ├── ChatPanne.tsx
│           │   │   │   │   ├── ChatReportForm.tsx
│           │   │   │   │   ├── FileViewPanne.tsx
│           │   │   │   │   ├── ForcePrompt.tsx
│           │   │   │   │   ├── MarkLabel.tsx
│           │   │   │   │   ├── ResouceModal.tsx
│           │   │   │   │   └── ThumbsMessage.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── Dashboard/
│           │   │   │   ├── colorSchemes.ts
│           │   │   │   ├── components/
│           │   │   │   │   ├── AdvancedDatePicker.tsx
│           │   │   │   │   ├── charts/
│           │   │   │   │   │   ├── BaseChart.tsx
│           │   │   │   │   │   ├── ChartContainer.tsx
│           │   │   │   │   │   ├── MetricCard.tsx
│           │   │   │   │   │   └── QueryFilter.tsx
│           │   │   │   │   ├── config/
│           │   │   │   │   │   ├── ChartSelector.tsx
│           │   │   │   │   │   ├── ComponentConfigDrawer.tsx
│           │   │   │   │   │   ├── DashboardConfigPanel.tsx
│           │   │   │   │   │   ├── DatasetSelector.tsx
│           │   │   │   │   │   ├── DimensionBlock.tsx
│           │   │   │   │   │   ├── FilterConditionDialog.tsx
│           │   │   │   │   │   ├── StyleConfigPanel.tsx
│           │   │   │   │   │   └── useChartState.tsx
│           │   │   │   │   ├── dashboard/
│           │   │   │   │   │   ├── DashboardDetail.tsx
│           │   │   │   │   │   ├── DashboardListItem.tsx
│           │   │   │   │   │   └── DashboardSidebar.tsx
│           │   │   │   │   └── editor/
│           │   │   │   │       ├── ComponentPicker.tsx
│           │   │   │   │       ├── ComponentWrapper.tsx
│           │   │   │   │       ├── EditorCanvas.tsx
│           │   │   │   │       ├── EditorHeader.tsx
│           │   │   │   │       ├── Home.tsx
│           │   │   │   │       └── index.css
│           │   │   │   ├── editor.tsx
│           │   │   │   ├── hook.ts
│           │   │   │   ├── index.tsx
│           │   │   │   ├── share.tsx
│           │   │   │   └── types/
│           │   │   │       ├── chartData.ts
│           │   │   │       └── dataConfig.ts
│           │   │   ├── DataSetPage/
│           │   │   │   ├── CreateDataSet.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── DiffFlowPage/
│           │   │   │   ├── components/
│           │   │   │   │   ├── Cell.tsx
│           │   │   │   │   ├── Component.tsx
│           │   │   │   │   ├── ComponentParameter.tsx
│           │   │   │   │   ├── RunForm.tsx
│           │   │   │   │   └── RunTest.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── EvaluationPage/
│           │   │   │   ├── EvaluationCreate.tsx
│           │   │   │   ├── PromptCom.tsx
│           │   │   │   ├── defaultPrompt.js
│           │   │   │   ├── index.tsx
│           │   │   │   └── types.ts
│           │   │   ├── KnowledgePage/
│           │   │   │   ├── AdjustFilesUpload.tsx
│           │   │   │   ├── KnowledgeFile.tsx
│           │   │   │   ├── KnowledgeQa.tsx
│           │   │   │   ├── components/
│           │   │   │   │   ├── DocxFileViewer.tsx
│           │   │   │   │   ├── DuplicateFileDialog.tsx
│           │   │   │   │   ├── EditKnowledgeDialog.tsx
│           │   │   │   │   ├── ExcelPreview.tsx
│           │   │   │   │   ├── FileSelector.tsx
│           │   │   │   │   ├── FileUploadParagraphs.tsx
│           │   │   │   │   ├── FileUploadSplitStrategy.tsx
│           │   │   │   │   ├── FileUploadStep1.tsx
│           │   │   │   │   ├── FileUploadStep2.tsx
│           │   │   │   │   ├── FileUploadStep4.tsx
│           │   │   │   │   ├── Files.tsx
│           │   │   │   │   ├── Guide.tsx
│           │   │   │   │   ├── Header.tsx
│           │   │   │   │   ├── ImportQa.tsx
│           │   │   │   │   ├── Markdown.tsx
│           │   │   │   │   ├── MetadataDialog.tsx
│           │   │   │   │   ├── MetadataManagementDialog.tsx
│           │   │   │   │   ├── ParagraphEdit.tsx
│           │   │   │   │   ├── Paragraphs.tsx
│           │   │   │   │   ├── PreviewFile.tsx
│           │   │   │   │   ├── PreviewParagraph.tsx
│           │   │   │   │   ├── PreviewResult.tsx
│           │   │   │   │   ├── RuleFile.tsx
│           │   │   │   │   ├── RuleTable.tsx
│           │   │   │   │   └── TxtFileViewer.tsx
│           │   │   │   ├── detail.tsx
│           │   │   │   ├── filesUpload.tsx
│           │   │   │   ├── index.tsx
│           │   │   │   ├── qas.tsx
│           │   │   │   └── useKnowledgeStore.ts
│           │   │   ├── LabelPage/
│           │   │   │   ├── AddSimilarQuestions.tsx
│           │   │   │   ├── SaveQaLibForm.tsx
│           │   │   │   ├── index.tsx
│           │   │   │   ├── taskAppChats.tsx
│           │   │   │   └── taskApps.tsx
│           │   │   ├── LogPage/
│           │   │   │   ├── index.tsx
│           │   │   │   ├── systemLog/
│           │   │   │   │   └── index.tsx
│           │   │   │   └── useAppLog/
│           │   │   │       ├── DailyMessageContent.tsx
│           │   │   │       ├── appChatDetail.tsx
│           │   │   │       ├── dailyChatDetail.tsx
│           │   │   │       └── index.tsx
│           │   │   ├── LoginPage/
│           │   │   │   ├── UserPwdModal.tsx
│           │   │   │   ├── login.tsx
│           │   │   │   ├── loginBridge.tsx
│           │   │   │   ├── resetPwd.tsx
│           │   │   │   └── utils.ts
│           │   │   ├── ModelPage/
│           │   │   │   ├── components/
│           │   │   │   │   ├── Combobox.tsx
│           │   │   │   │   ├── CreateTask.tsx
│           │   │   │   │   ├── CreateTaskList.tsx
│           │   │   │   │   ├── FinetuneDetail.tsx
│           │   │   │   │   ├── FinetuneHead.tsx
│           │   │   │   │   ├── FinetuneResult.tsx
│           │   │   │   │   ├── RTConfig.tsx
│           │   │   │   │   ├── UploadModal.tsx
│           │   │   │   │   └── sampleData.js
│           │   │   │   ├── cpuInfo.tsx
│           │   │   │   ├── doc.tsx
│           │   │   │   ├── finetune.tsx
│           │   │   │   └── manage/
│           │   │   │       ├── CustomForm.tsx
│           │   │   │       ├── ModelConfig.tsx
│           │   │   │       ├── SystemModelConfig.tsx
│           │   │   │       ├── index.tsx
│           │   │   │       ├── tabs/
│           │   │   │       │   ├── AssisModel.tsx
│           │   │   │       │   ├── EvaluationModel.tsx
│           │   │   │       │   ├── KnowledgeModel.tsx
│           │   │   │       │   ├── WorkbenchModel.tsx
│           │   │   │       │   └── WorkflowModel.tsx
│           │   │   │       └── useLink.ts
│           │   │   ├── Page403.tsx
│           │   │   ├── Page404.tsx
│           │   │   ├── Report/
│           │   │   │   ├── components/
│           │   │   │   │   ├── Label.tsx
│           │   │   │   │   └── Word.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── SystemPage/
│           │   │   │   ├── components/
│           │   │   │   │   ├── Config.tsx
│           │   │   │   │   ├── CreateUser.tsx
│           │   │   │   │   ├── EditRole.tsx
│           │   │   │   │   ├── EditUserGroup.tsx
│           │   │   │   │   ├── Roles.tsx
│           │   │   │   │   ├── UserGroup.tsx
│           │   │   │   │   ├── UserRoleItem.tsx
│           │   │   │   │   ├── UserRoleModal.tsx
│           │   │   │   │   └── Users.tsx
│           │   │   │   ├── index.tsx
│           │   │   │   └── theme/
│           │   │   │       ├── Example.tsx
│           │   │   │       ├── HSLitem.tsx
│           │   │   │       └── index.tsx
│           │   │   └── resoucePage.tsx
│           │   ├── prettierrc.js
│           │   ├── reportWebVitals.ts
│           │   ├── routes/
│           │   │   ├── RouteErrorBoundary.tsx
│           │   │   └── index.tsx
│           │   ├── store/
│           │   │   ├── assistantStore.tsx
│           │   │   ├── dashboardStore.tsx
│           │   │   ├── diffFlowStore.tsx
│           │   │   └── editFlowStore.tsx
│           │   ├── style/
│           │   │   ├── applies.css
│           │   │   ├── classes.css
│           │   │   ├── index.css
│           │   │   ├── markdown.css
│           │   │   └── vditor.css
│           │   ├── types/
│           │   │   ├── alerts/
│           │   │   │   └── index.ts
│           │   │   ├── api/
│           │   │   │   ├── app.ts
│           │   │   │   ├── finetune.ts
│           │   │   │   ├── index.ts
│           │   │   │   └── user.ts
│           │   │   ├── app.ts
│           │   │   ├── assistant/
│           │   │   │   └── index.tsx
│           │   │   ├── chat/
│           │   │   │   └── index.ts
│           │   │   ├── components/
│           │   │   │   └── index.ts
│           │   │   ├── entities/
│           │   │   │   └── index.ts
│           │   │   ├── flow/
│           │   │   │   └── index.ts
│           │   │   ├── global.d.ts
│           │   │   ├── tabs/
│           │   │   │   └── index.ts
│           │   │   ├── templatesContext/
│           │   │   │   └── index.ts
│           │   │   ├── typesContext/
│           │   │   │   └── index.ts
│           │   │   └── utils/
│           │   │       └── reactflowUtils.ts
│           │   ├── util/
│           │   │   ├── advancedParamsTemplates.ts
│           │   │   ├── flowCompatible.ts
│           │   │   ├── flowUtils.ts
│           │   │   ├── hook.ts
│           │   │   ├── reactflowUtils.ts
│           │   │   └── utils.ts
│           │   ├── utils.ts
│           │   └── workspace/
│           │       ├── DownloadList.tsx
│           │       ├── FileDrawer.tsx
│           │       ├── FileIcon.tsx
│           │       ├── FilePreview.tsx
│           │       ├── FilePreviewDrawer.tsx
│           │       ├── README.md
│           │       ├── SearchKnowledgeSheet.tsx
│           │       ├── SopTasks.tsx
│           │       ├── WebSearchSheet.tsx
│           │       └── markdown/
│           │           ├── Echarts.tsx
│           │           └── Mermaid.tsx
│           ├── tailwind.config.js
│           ├── tsconfig.json
│           └── vite.config.mts
└── update.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .drone.yml
================================================
kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: cicd # 定义流水线名称

clone:
  disable: true
  
steps: # 定义流水线执行步骤,这些步骤将顺序执行
  - name: clone
    image: alpine/git
    pull: if-not-exists
    environment:
      http_proxy: 
        from_secret: PROXY
      https_proxy:
        from_secret: PROXY
    commands:
    - git config --global core.compression 0
    - git clone https://github.com/dataelement/bisheng.git .
    - git checkout $DRONE_COMMIT

  - name: set poetry
    pull: if-not-exists
    image: golang
    environment:
      RELEASE_VERSION: 99.99.99
      NEXUS_PUBLIC:
        from_secret: NEXUS_PUBLIC
      NEXUS_PUBLIC_PASSWORD:
        from_secret: NEXUS_PUBLIC_PASSWORD
      REPO:
        from_secret: PY_NEXUS
      PROXY:
        from_secret: APT-GET
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: bisheng-cache
        path: /app/build/
    commands:
    - cd ./src/backend
    - echo $REPO
    - REPO2=$(echo $REPO | sed 's/http:\\/\\///g')
    - sed  '/apt-get/ s|$| '"$PROXY"'|' Dockerfile
    - sed -i.bak 's/uv cache clean.*$/ /' Dockerfile
    - sed -i '6i\RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple' Dockerfile
    - sed -i '7i\ENV UV_PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple' Dockerfile
    - sed -i '8i\ENV UV_DEFAULT_INDEX=https://pypi.tuna.tsinghua.edu.cn/simple' Dockerfile
    - sed -i '9i\ENV PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple' Dockerfile
    - cat Dockerfile

  - name: build_docker
    pull: if-not-exists
    image: docker:24.0.6
    privileged: true
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: apt-cache
        path: /var/cache/apt/archives # 将应用打包好的Jar和执行脚本挂载出来
      - name: socket
        path: /var/run/docker.sock
      - name: pro-cache
        path: /root/.local/share/pypoetry
      - name: uv-cache
        path: /root/.cache/uv
    environment:
      http_proxy:
        from_secret: PROXY
      https_proxy:
        from_secret: PROXY
      no_proxy: 192.168.106.8
      version: release
      docker_registry: http://192.168.106.8:6082
      docker_repo: 192.168.106.8:6082/dataelement/bisheng-backend
      docker_user:
        from_secret: NEXUS_USER
      docker_password:
        from_secret: NEXUS_PASSWORD
    commands:
      - cd ./src/backend/
      - docker login -u $docker_user -p $docker_password $docker_registry
      - docker build -t $docker_repo:$version .
      - docker push $docker_repo:$version

  - name: build_docker_frontend
    pull: if-not-exists
    image: docker:24.0.6
    privileged: true
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: apt-cache
        path: /var/cache/apt/archives # 将应用打包好的Jar和执行脚本挂载出来
      - name: socket
        path: /var/run/docker.sock
    environment:
      http_proxy:
        from_secret: PROXY
      https_proxy:
        from_secret: PROXY
      no_proxy: 192.168.106.8
      version: release
      docker_registry: http://192.168.106.8:6082
      docker_repo: 192.168.106.8:6082/dataelement/bisheng-frontend
      docker_user:
        from_secret: NEXUS_USER
      docker_password:
        from_secret: NEXUS_PASSWORD
    commands:
      - cd ./src/frontend/
      - docker login -u $docker_user -p $docker_password $docker_registry
      - docker build -t $docker_repo:$version .
      - docker push $docker_repo:$version

  - name: ssh deploy
    image: appleboy/drone-ssh
    pull: if-not-exists
    settings:
      host: 192.168.106.116
      username: root
      password:
        from_secret: sshpwd
      script:
       - echo =======找到目录=======
       - cd /opt/server/bisheng-test
       - echo =======直接启动=======
       - docker compose pull
       - docker compose up -d

  - name: notify-start # notify
    pull: if-not-exists
    image: plugins/webhook
    settings:
      debug: true
      urls: 
        from_secret: FEISHU_URL
      content_type: application/json
      template: |
        {
          "msg_type": "interactive",
          "card": {
            "type": "template",
            "data": {
              "template_id": "AAqkI9bnY5FUs",
              "template_variable": {
                "repo_name": "{{ repo.name }}",
                "build_branch": "{{build.branch}}",
                "build_author": "{{ DRONE_COMMIT_AUTHOR }}",
                "link": "{{build.link}}",
                "commit_msg": "{{ trim build.message }}",
                "build_tag":"{{build.tag}}",
                "build_start":"{{build.started}}",
                "status": "{{ build.status }}"
              }
            }
          }
        }
    when: # 成功
      status:
        - success
trigger:
  branch:
  - release
  event:
  - push

volumes:
- name: bisheng-cache
  host:
    path: /opt/drone/data/bisheng/
- name: pro-cache
  host:
    path: /opt/drone/data/pro/
- name: apt-cache
  host:
    path: /opt/drone/data/bisheng/apt/
- name: socket
  host:
    path: /var/run/docker.sock


---

kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: feat_cicd # 定义流水线名称

clone:
  disable: true

steps: # 定义流水线执行步骤,这些步骤将顺序执行
  - name: clone
    image: alpine/git
    pull: if-not-exists
    environment:
      http_proxy:
        from_secret: PROXY
      https_proxy:
        from_secret: PROXY
    commands:
    - git config --global core.compression 0
    - git clone https://github.com/dataelement/bisheng.git .
    - git checkout $DRONE_COMMIT

  - name: set poetry
    pull: if-not-exists
    image: golang
    environment:
      NEXUS_PUBLIC:
        from_secret: NEXUS_PUBLIC
      NEXUS_PUBLIC_PASSWORD:
        from_secret: NEXUS_PUBLIC_PASSWORD
      REPO:
        from_secret: PY_NEXUS
      PROXY:
        from_secret: APT-GET
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: bisheng-cache
        path: /app/build/
    commands:
    - cd ./src/backend
    - echo $REPO
    - REPO2=$(echo $REPO | sed 's/http:\\/\\///g')
    - sed  '/apt-get/ s|$| '"$PROXY"'|' Dockerfile
    - sed -i '6i\RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple' Dockerfile
    - sed -i '7i\RUN export UV_PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple' Dockerfile
    - cat Dockerfile

  - name: build_docker
    pull: if-not-exists
    image: docker:24.0.6
    privileged: true
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: apt-cache
        path: /var/cache/apt/archives # 将应用打包好的Jar和执行脚本挂载出来
      - name: socket
        path: /var/run/docker.sock
      - name: pro-cache
        path: /root/.local/share/pypoetry
    environment:
      http_proxy:
        from_secret: PROXY
      https_proxy:
        from_secret: PROXY
      no_proxy: 192.168.106.8
      version: ${DRONE_BRANCH}
      docker_registry: http://192.168.106.8:6082
      docker_repo: 192.168.106.8:6082/dataelement/bisheng-backend
      docker_user:
        from_secret: NEXUS_USER
      docker_password:
        from_secret: NEXUS_PASSWORD
    commands:
      - echo "old tag is $version"
      - version=$(echo $version | sed 's/\\//_/g')
      - echo "build image tag is $version"
      - cd ./src/backend/
      - docker login -u $docker_user -p $docker_password $docker_registry
      - docker build -t $docker_repo:$version .
      - docker push $docker_repo:$version

  - name: build_docker_frontend
    pull: if-not-exists
    image: docker:24.0.6
    privileged: true
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: apt-cache
        path: /var/cache/apt/archives # 将应用打包好的Jar和执行脚本挂载出来
      - name: socket
        path: /var/run/docker.sock
    environment:
      http_proxy:
        from_secret: PROXY
      https_proxy:
        from_secret: PROXY
      no_proxy: 192.168.106.8
      version: ${DRONE_BRANCH}
      docker_registry: http://192.168.106.8:6082
      docker_repo: 192.168.106.8:6082/dataelement/bisheng-frontend
      docker_user:
        from_secret: NEXUS_USER
      docker_password:
        from_secret: NEXUS_PASSWORD
    commands:
      - echo "old tag is $version"
      - version=$(echo $version | sed 's/\\//_/g')
      - echo "build image tag is $version"
      - cd ./src/frontend/
      - docker login -u $docker_user -p $docker_password $docker_registry
      - docker build -t $docker_repo:$version .
      - docker push $docker_repo:$version

  - name: notify-start # notify
    pull: if-not-exists
    image: plugins/webhook
    settings:
      debug: true
      urls:
        from_secret: FEISHU_URL
      content_type: application/json
      template: |
        {
          "msg_type": "interactive",
          "card": {
            "type": "template",
            "data": {
              "template_id": "AAqkI9bnY5FUs",
              "template_variable": {
                "repo_name": "{{ repo.name }}",
                "build_branch": "{{build.branch}}",
                "build_author": "{{ DRONE_COMMIT_AUTHOR }}",
                "link": "{{build.link}}",
                "commit_msg": "{{ trim build.message }}",
                "build_tag":"{{build.tag}}",
                "build_start":"{{build.started}}",
                "status": "{{ build.status }}"
              }
            }
          }
        }
    when: # 成功
      status:
        - success
trigger:
  branch:
  - add_some_branch_you_need
  event:
  - push
   
volumes:
- name: bisheng-cache
  host:
    path: /opt/drone/data/bisheng/
- name: pro-cache
  host:
    path: /opt/drone/data/pro/
- name: apt-cache
  host:
    path: /opt/drone/data/bisheng/apt/
- name: socket
  host:
    path: /var/run/docker.sock


================================================
FILE: .gitattributes
================================================
# 默认:自动识别文本,统一用 LF 存库
#* text=auto eol=lf

# 明确常见文本文件用 LF
*.py   text eol=lf
*.sh   text eol=lf
*.yml  text eol=lf
*.yaml text eol=lf
*.md   text eol=lf
*.txt  text eol=lf
*.json text eol=lf
*.toml text eol=lf
*.cfg  text eol=lf
*.ini  text eol=lf

# Windows 脚本保留 CRLF
*.bat  text eol=crlf
*.cmd  text eol=crlf

# 二进制:禁止任何换行转换和 diff
*.png  binary
*.jpg  binary
*.jpeg binary
*.gif  binary
*.ico  binary
*.pdf  binary
*.zip  binary
*.tar  binary
*.gz   binary
*.7z   binary
*.mp4  binary
*.docx binary
*.xlsx binary
*.pptx binary


================================================
FILE: .github/workflows/base_ci.yml
================================================
name: BASE_CI

on:
  push:
    # Sequence of patterns matched against refs/tags
    tags:
      - "base.v*"

env:
  DOCKERHUB_REPO: dataelement/
  
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build_bisheng_arm:
    runs-on: ubuntu-22.04-arm
    # if: startsWith(github.event.ref, 'refs/tags')
    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
      
      - name: Set Environment Variable
        run: echo "RELEASE_VERSION=${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_ENV

      # 登录 docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          # GitHub Repo => Settings => Secrets 增加 docker hub 登录密钥信息
          # DOCKERHUB_USERNAME 是 docker hub 账号名.
          # DOCKERHUB_TOKEN: docker hub => Account Setting => Security 创建.
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      
      # because ibm-db driver not support linux arm64
      - name: fix ibm-db lib error
        run: |
          # remove ibm-db lib
          sed -i '/ibm-db*/d' ./src/backend/pyproject.toml

      - name: Build backend arm64 and push
        id: docker_build_backend
        run: |
          docker buildx build --build-arg PANDOC_ARCH=arm64 --file ./src/backend/base.Dockerfile --platform linux/arm64 --provenance false --tag ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-arm64 --push ./src/backend/
  
  build_bisheng_amd:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v2
      
      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
      
      - name: Set Environment Variable
        run: echo "RELEASE_VERSION=${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_ENV

      # 登录 docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          # GitHub Repo => Settings => Secrets 增加 docker hub 登录密钥信息
          # DOCKERHUB_USERNAME 是 docker hub 账号名.
          # DOCKERHUB_TOKEN: docker hub => Account Setting => Security 创建.
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      
      - name: Build backend amd64 and push
        id: docker_build_backend
        run: |
          docker buildx build --build-arg PANDOC_ARCH=amd64 --file ./src/backend/base.Dockerfile --platform linux/amd64 --provenance false --tag ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-amd64 --push ./src/backend/
  
  
  combine_two_images:
    runs-on: ubuntu-latest
    needs: 
      - build_bisheng_amd
      - build_bisheng_arm
    steps:
      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
      
      - name: Set Environment Variable
        run: echo "RELEASE_VERSION=${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_ENV

      # 登录 docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          # GitHub Repo => Settings => Secrets 增加 docker hub 登录密钥信息
          # DOCKERHUB_USERNAME 是 docker hub 账号名.
          # DOCKERHUB_TOKEN: docker hub => Account Setting => Security 创建.
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Combine Two images
        run: |
          docker manifest create ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }} ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-arm64 ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-amd64
          docker manifest push ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}
      
      # 获取提交信息
      - name: Process git message
        id: process_message
        run: |
          value=$(echo "${{ github.event.head_commit.message }}" | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/%0A/g')
          value=$(echo "${value}" | sed -e ':a' -e 'N' -e '$!ba' -e 's/\r/%0A/g')
          echo "message=${value}" >> $GITHUB_ENV
        shell: bash

      # 飞书通知
      - name: notify feishu
        uses: fjogeleit/http-request-action@v1
        with:
          url: ${{ secrets.FEISHU_WEBHOOK }}
          method: 'POST'
          data: '{"msg_type":"post","content":{"post":{"zh_cn":{"title": "${{ steps.get_version.outputs.VERSION }}发布成功",  "content": [[{"tag":"text","text":"基础镜像"},{"tag":"text","text":"${{ env.message }}"}]]}}}}'

================================================
FILE: .github/workflows/build_linux_only.yml
================================================
name: Build Linux Binaries (x86_64 & ARM)

on:
  workflow_dispatch:
  push:
    tags:
      - "build.*"

jobs:
  build_pyc:
    name: Build for pyc files only
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          repository: dataelement/bisheng-telemetry-search
          token: ${{ secrets.CROSS_REPO_TOKEN }}
          path: bisheng-telemetry-search

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'

      - name: Build and Clean Artifacts
        working-directory: ./bisheng-telemetry-search/telemetry_search
        run: |
          # 执行构建
          python -m compileall -b .
          
          # 在上传前彻底清理源代码和中间文件
          # 即使 build_all.py 做了清理,这里再次强制清理,防止 .c 文件泄露
          find . -name "*.py" -delete
          find . -name "__pycache__" -exec rm -rf {} +
          
          # 准备输出
          mkdir ../../build_output
          cp -r ./* ../../build_output/
          
          echo "Listing artifacts to be uploaded:"
          ls -R ../../build_output/

      - name: Upload PYC Artifacts
        uses: actions/upload-artifact@v4
        with:
          name: telemetry_search
          path: ./build_output/*

  deploy_to_sso_project:
    name: Deploy Artifacts to SSO Project
    needs: [ build_pyc ]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout SSO Project
        uses: actions/checkout@v4
        with:
          repository: dataelement/bisheng
          token: ${{ secrets.CROSS_REPO_TOKEN }}
          # 使用 ref 指定分支,而不是 base
          ref: feat/2.3.0
          path: bisheng
          # 确保拉取完整的历史以便正确提交
          fetch-depth: 0

      - name: Download PYC Artifacts
        uses: actions/download-artifact@v4
        with:
          name: telemetry_search
          path: ./telemetry_search

      - name: Merge and Place Files
        run: |
          
          find ./telemetry_search -name "*.py" -delete
          
          # 移动到目标仓库目录
          cp -r ./telemetry_search ./bisheng/src/backend/bisheng/
          
          echo "Final content of target directory:"
          ls -lh ./bisheng/src/backend/bisheng/telemetry_search

      - name: Commit and Push changes
        working-directory: ./bisheng
        run: |
          git config --global user.name "github-actions[bot]"
          git config --global user.email "github-actions[bot]@users.noreply.github.com"
          
          git add .
          
          # 检查是否有变更,有才提交
          if git diff --staged --quiet; then
            echo "No changes to commit"
          else
            git commit -m "chore: update telemetry_search build artifacts [skip ci]"
            git push origin feat/2.3.0
          fi

================================================
FILE: .github/workflows/ci.yml
================================================
name: CI

on:
  push:
    # Sequence of patterns matched against refs/tags
    tags:
      - "v*"

env:
  DOCKERHUB_REPO: dataelement/
  
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
        
  build_bisheng_backend:
    runs-on: ubuntu-latest
    # if: startsWith(github.event.ref, 'refs/tags')
    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
      
      - name: Set Environment Variable
        run: echo "RELEASE_VERSION=1.3.1" >> $GITHUB_ENV


      # 登录 docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          # GitHub Repo => Settings => Secrets 增加 docker hub 登录密钥信息
          # DOCKERHUB_USERNAME 是 docker hub 账号名.
          # DOCKERHUB_TOKEN: docker hub => Account Setting => Security 创建.
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
          
      # 构建 backend 并推送到 Docker hub
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1

      - name: set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build backend and push
        id: docker_build_backend
        run: |
          docker buildx build --file ./src/backend/Dockerfile --platform linux/amd64 --provenance false --tag ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-amd64 --push ./src/backend/
      
  build_backend_arm:
    runs-on: ubuntu-22.04-arm
    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
      
      - name: Set Environment Variable
        run: echo "RELEASE_VERSION=1.3.1" >> $GITHUB_ENV

      # 登录 docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          # GitHub Repo => Settings => Secrets 增加 docker hub 登录密钥信息
          # DOCKERHUB_USERNAME 是 docker hub 账号名.
          # DOCKERHUB_TOKEN: docker hub => Account Setting => Security 创建.
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
  
      # - name: Set up QEMU
      #   uses: docker/setup-qemu-action@v1

      - name: set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      # because ibm-db driver not support linux arm64
      - name: fix ibm-db lib error
        run: |
          # remove ibm-db lib
          sed -i '/ibm-db*/d' ./src/backend/pyproject.toml

      - name: Build backend and push
        id: docker_build_backend
        run: |
          docker buildx build --file ./src/backend/Dockerfile --platform linux/arm64 --provenance false --tag ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-arm64 --push ./src/backend/

  build_bisheng_frontend:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
      
      - name: Set Environment Variable
        run: echo "RELEASE_VERSION=${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_ENV

      # 登录 docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          # GitHub Repo => Settings => Secrets 增加 docker hub 登录密钥信息
          # DOCKERHUB_USERNAME 是 docker hub 账号名.
          # DOCKERHUB_TOKEN: docker hub => Account Setting => Security 创建.
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build frontend and push
        id: docker_build_frontend
        run: |
          docker buildx build --file ./src/frontend/Dockerfile --platform linux/amd64 --provenance false --tag ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-amd64 --push ./src/frontend/

  build_frontend_arm:
    runs-on: ubuntu-22.04-arm
    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
      
      - name: Set Environment Variable
        run: echo "RELEASE_VERSION=${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_ENV

      # - name: Set up QEMU
      #   uses: docker/setup-qemu-action@v1

      - name: set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      # 登录 docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          # GitHub Repo => Settings => Secrets 增加 docker hub 登录密钥信息
          # DOCKERHUB_USERNAME 是 docker hub 账号名.
          # DOCKERHUB_TOKEN: docker hub => Account Setting => Security 创建.
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build frontend and push
        id: docker_build_frontend
        run: |
          docker buildx build --file ./src/frontend/Dockerfile --platform linux/arm64 --provenance false --tag ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-arm64 --push ./src/frontend/

  notify_feishu:
    needs:
      - build_bisheng_backend
      - build_backend_arm
      - build_bisheng_frontend
      - build_frontend_arm
    runs-on: ubuntu-latest
    steps:
      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}

      - name: Process git message
        id: process_message
        run: |
          value=$(echo "${{ github.event.head_commit.message }}" | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/%0A/g')
          value=$(echo "${value}" | sed -e ':a' -e 'N' -e '$!ba' -e 's/\r/%0A/g')
          echo "message=${value}" >> $GITHUB_ENV
        shell: bash

      - name: notify feishu
        uses: fjogeleit/http-request-action@v1
        with:
          url: ${{ secrets.FEISHU_WEBHOOK }}
          method: 'POST'
          data: '{"msg_type":"post","content":{"post":{"zh_cn":{"title": "${{ steps.get_version.outputs.VERSION }}-amd64镜像预发布成功",  "content": [[{"tag":"text","text":"发布功能:"},{"tag":"text","text":"${{ env.message }}"}]]}}}}'
  

================================================
FILE: .github/workflows/release.yml
================================================
name: PublishRelease

# 在github上新建release发行版时触发此CICD,主要是把预发布镜像的tag改为正式镜像的tag,并同步到私有镜像仓库
on:
  release:
    types: [published]

env:
  DOCKERHUB_REPO: dataelement/
  
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  combine_publish_images:
    runs-on: ubuntu-latest
    steps:
      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
      - name: Echo version
        id: echo_version
        run: |
          echo "this release is link version: ${{ steps.get_version.outputs.VERSION }}"

      # 登录 docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          # GitHub Repo => Settings => Secrets 增加 docker hub 登录密钥信息
          # DOCKERHUB_USERNAME 是 docker hub 账号名.
          # DOCKERHUB_TOKEN: docker hub => Account Setting => Security 创建.
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Combine two images
        id: combine_two_images
        run: |
          docker manifest create ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }} ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-arm64 ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-amd64
          docker manifest push ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}

          docker manifest create ${{ env.DOCKERHUB_REPO }}bisheng-backend:latest ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-arm64 ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-amd64
          docker manifest push ${{ env.DOCKERHUB_REPO }}bisheng-backend:latest

          docker manifest create ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }} ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-arm64 ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-amd64
          docker manifest push ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}

          docker manifest create ${{ env.DOCKERHUB_REPO }}bisheng-frontend:latest ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-arm64 ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-amd64
          docker manifest push ${{ env.DOCKERHUB_REPO }}bisheng-frontend:latest
  
  sync_dataelem_repos:
    runs-on: ubuntu-latest
    steps:
      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
      - name: Echo version
        id: echo_version
        run: |
          echo "this release is link version: ${{ steps.get_version.outputs.VERSION }}"
      # 登录 docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          registry: https://cr.dataelem.com/
          username: ${{ secrets.CR_DOCKERHUB_USERNAME }}
          password: ${{ secrets.CR_DOCKERHUB_TOKEN }}

      - name: Sync images
        id: sync_images
        run: |
          echo "sync backend images"
          docker pull ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-amd64
          
          docker tag ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-amd64 cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}
          docker tag ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-amd64 cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-backend:latest
          
          docker push cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}
          docker push cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-backend:latest

          echo "sync frontend images"
          docker pull ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-amd64

          docker tag ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-amd64 cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}
          docker tag ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-amd64 cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-frontend:latest

          docker push cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}
          docker push cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-frontend:latest

          echo "sync arm image"
          docker pull ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-arm64
          docker tag ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-arm64 cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-arm64
          docker push cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}-arm64

          docker pull ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-arm64
          docker tag ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-arm64 cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-arm64
          docker push cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}-arm64
          echo "--- sync over ---"

  test_pull_images:
    needs:
      - combine_publish_images
      - sync_dataelem_repos
    runs-on: ubuntu-22.04
    steps:
      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
      - name: Echo version
        id: echo_version
        run: |
          echo "this release is link version: ${{ steps.get_version.outputs.VERSION }}"
      # 登录 cr docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          registry: https://cr.dataelem.com/
          username: ${{ secrets.CR_DOCKERHUB_USERNAME }}
          password: ${{ secrets.CR_DOCKERHUB_TOKEN }}
      # 登录 docker hub
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          # GitHub Repo => Settings => Secrets 增加 docker hub 登录密钥信息
          # DOCKERHUB_USERNAME 是 docker hub 账号名.
          # DOCKERHUB_TOKEN: docker hub => Account Setting => Security 创建.
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Test pull images
        run: |
          docker pull ${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}
          docker pull cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}
          
          docker pull ${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}
          docker pull cr.dataelem.com/${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}


  notify_feishu:
      needs:
        - test_pull_images
      runs-on: ubuntu-latest
      steps:
        - name: Get version
          id: get_version
          run: |
            echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
        
        - name: Process git message
          id: process_message
          run: |
            value=$(echo "${{ github.event.head_commit.message }}" | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/%0A/g')
            value=$(echo "${value}" | sed -e ':a' -e 'N' -e '$!ba' -e 's/\r/%0A/g')
            echo "message=${value}" >> $GITHUB_ENV
          shell: bash

        - name: notify feishu
          uses: fjogeleit/http-request-action@v1
          with:
            url: ${{ secrets.FEISHU_WEBHOOK }}
            method: 'POST'
            data: '{"msg_type":"post","content":{"post":{"zh_cn":{"title": "${{ steps.get_version.outputs.VERSION }}镜像发布成功",  "content": [[{"tag":"text","text":"发布功能:"},{"tag":"text","text":"${{ env.message }}"}]]}}}}'


================================================
FILE: .github/workflows/test.yml
================================================
name: test_build

on:
  push:
    # Sequence of patterns matched against refs/tags
    branches:
      - "develop/*"

env:
  DOCKERHUB_REPO: project/
  PY_NEXUS: 110.16.193.170:50083
  DOCKER_NEXUS: 110.16.193.170:50080

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    #if: startsWith(github.event.ref, 'refs/tags')
    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: Get version
        id: get_version
        run: |
          echo ::set-output name=VERSION::${GITHUB_REF/refs\/heads\/develop\//}
          echo $GITHUB_REF
          echo $VERSION

      # 构建 bisheng-langchain
      - name: Set python version 3.8
        uses: actions/setup-python@v1
        with:
          python-version: 3.8

      # 发布到 私有仓库
      - name: set insecure registry
        run: |
          echo "{ \"insecure-registries\": [\"http://${{ env.DOCKER_NEXUS }}\"] }" | sudo tee /etc/docker/daemon.json
          sudo service docker restart

      # - name: Set up QEMU
      #   uses: docker/setup-qemu-action@v1

      - name: Login Nexus Container Registry
        uses: docker/login-action@v2
        with:
          registry: http://${{ env.DOCKER_NEXUS }}/
          username: ${{ secrets.NEXUS_USER }}
          password: ${{ secrets.NEXUS_PASSWORD }}

      # 替换poetry编译为私有服务
      - name: replace self-host repo
        uses: snok/install-poetry@v1
        with:
          installer-parallel: true

      - name: build lock
        run: |
          cd ./src/backend
          poetry source add --priority=supplemental foo http://${{ secrets.NEXUS_PUBLIC }}:${{ secrets.NEXUS_PUBLIC_PASSWORD }}@${{ env.PY_NEXUS }}/repository/pypi-group/simple
          poetry lock
          cd ../../

      # 构建 backend 并推送到 Docker hub
      - name: Build backend and push
        id: docker_build_backend
        uses: docker/build-push-action@v2
        with:
          # backend 的context目录
          context: "./src/backend/"
          # 是否 docker push
          push: true
          # docker build arg, 注入 APP_NAME/APP_VERSION
          build-args: |
            APP_NAME="bisheng-backend"
            APP_VERSION=${{ steps.get_version.outputs.VERSION }}
          # 生成两个 docker tag: ${APP_VERSION} 和 latest
          tags: |
            ${{ env.DOCKER_NEXUS }}/${{ env.DOCKERHUB_REPO }}bisheng-backend:${{ steps.get_version.outputs.VERSION }}
      # 构建 Docker frontend 并推送到 Docker hub
      - name: Build frontend and push
        id: docker_build_frontend
        uses: docker/build-push-action@v2
        with:
          # frontend 的context目录
          context: "./src/frontend/"
          # 是否 docker push
          push: true
          # docker build arg, 注入 APP_NAME/APP_VERSION
          build-args: |
            APP_NAME="bisheng-frontend"
            APP_VERSION=${{ steps.get_version.outputs.VERSION }}
          # 生成两个 docker tag: ${APP_VERSION} 和 latest
          tags: |
            ${{ env.DOCKER_NEXUS }}/${{ env.DOCKERHUB_REPO }}bisheng-frontend:${{ steps.get_version.outputs.VERSION }}
      

================================================
FILE: .gitignore
================================================
# This is to avoid Opencommit hook from getting pushed
prepare-commit-msg
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
qdrant_storage
autogen_coding/

# Mac
.DS_Store

# VSCode
.vscode
.vscode/settings.json
.chroma
.ruff_cache
.isort.cfg
.idea/

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock
.isort.cfg

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# TypeScript v1 declaration files
typings/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
# *.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
.env.test

# parcel-bundler cache (https://parceljs.org/)
.cache

# Next.js build output
.next

# Nuxt.js build / generate output
.nuxt

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and *not* Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
notebooks

# Distribution / packaging
.Python
build/
./third_party
develop-eggs/
config.dev.yaml
downloads/
eggs/
.eggs/
lib/
lib64/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Poetry
.testenv/*
poetry.lock

.githooks/prepare-commit-msg
.langchain.db

# docusaurus
.docusaurus/

sftp-config.json

/tmp/*
sftp-config.json

# Docker local files
docker/data/*
docker/mysql/data/*
docker/office/bisheng/*.gz

CLAUDE.md
!src/backend/bisheng/telemetry_search/**/*.pyc


================================================
FILE: .gitmodules
================================================


================================================
FILE: .pre-commit-config.yaml
================================================
exclude: ^scripts|docs|docker|requirements|README.md|test|experimental
repos:
  - repo: https://github.com/PyCQA/flake8.git
    rev: 3.8.3
    hooks:
      - id: flake8
        args: ["--max-line-length=120"]
  - repo: https://github.com/asottile/seed-isort-config
    rev: v2.2.0
    hooks:
      - id: seed-isort-config
  - repo: https://github.com/timothycrosley/isort
    rev: 4.3.21
    hooks:
      - id: isort
        files: \.(py|pyd)$
        args: ["-l 100"]
  - repo: https://github.com/pre-commit/mirrors-yapf
    rev: v0.32.0
    hooks:
      - id: yapf
        files: \.(py|pyd)$
        args: ["--style={column_limit: 120}"]
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v3.1.0
    hooks:
      - id: trailing-whitespace
        files: \.(py|pyd)$
      - id: check-yaml
      - id: end-of-file-fixer
        files: \.(py|pyd)$
      - id: requirements-txt-fixer
      - id: double-quote-string-fixer
      - id: check-merge-conflict
      - id: fix-encoding-pragma
        args: ["--remove"]
      - id: mixed-line-ending
        args: ["--fix=lf"]
        files: \.(py|pyd)$
  # - repo: https://github.com/jumanjihouse/pre-commit-hooks
  #   rev: 2.1.4
  #   hooks:
  #     - id: markdownlint
  #       args: ["-r", "~MD002,~MD013,~MD029,~MD033,~MD034,~MD005"]
  # - repo: https://github.com/myint/docformatter
  #   rev: v1.3.1
  #   hooks:
  #     - id: docformatter
  #       args: ["--in-place", "--wrap-descriptions", "79"]
  - repo: local
    hooks:
      - id: clang-format
        name: clang-format
        description: Format files with ClangFormat
        entry: clang-format -i
        language: system
        files: \.(c|cc|cxx|cpp|cu|h|hpp|hxx|cuh|proto)$


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
  community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or advances of
  any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
  without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
codeofconduct@globalsecuritydatabase.org.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series of
actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within the
community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version [v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html).

Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].

For answers to common questions about this code of conduct, see the FAQ at
[FAQ](https://www.contributor-covenant.org/faq). Translations are available at
[translations](https://www.contributor-covenant.org/translations)


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      the copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by the Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributors that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, the Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assuming any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your behalf and Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   Copyright © 2024 Dataelement Technologies, Inc

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
**Proudly made by Chinese,May we, like the creators of Deepseek and Black Myth: Wukong, bring more wonder and greatness to the world.**

> 源自中国匠心,希望我们能像 [Deepseek]、[黑神话:悟空] 团队一样,给世界带来更多美好。

<img src="https://dataelem.com/bs/face.png" alt="Bisheng banner">

<p align="center">
    <a href="https://dataelem.feishu.cn/wiki/ZxW6wZyAJicX4WkG0NqcWsbynde"><img src="https://img.shields.io/badge/docs-Wiki-brightgreen"></a>
    <img src="https://img.shields.io/github/license/dataelement/bisheng" alt="license"/>
    <a href=""><img src="https://img.shields.io/github/last-commit/dataelement/bisheng"></a>
    <a href="https://star-history.com/#dataelement/bisheng&Timeline"><img src="https://img.shields.io/github/stars/dataelement/bisheng?color=yellow"></a> 
</p>
<p align="center">
  <a href="./README_CN.md">简体中文</a> |
  <a href="./README.md">English</a> |
  <a href="./README_JPN.md">日本語</a>
</p>

<p align="center">
  <a href="https://trendshift.io/repositories/717" target="_blank"><img src="https://trendshift.io/api/badge/repositories/717" alt="dataelement%2Fbisheng | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
</p>
<div class="column" align="middle">
  <!-- <a href="https://bisheng.slack.com/join/shared_invite/"> -->
    <!-- <img src="https://img.shields.io/badge/Join-Slack-orange" alt="join-slack"/> -->
  </a>
  <!-- <img src="https://img.shields.io/github/license/bisheng-io/bisheng" alt="license"/> -->
  <!-- <img src="https://img.shields.io/docker/pulls/bisheng-io/bisheng" alt="docker-pull-count" /> -->
</div>


BISHENG is an open LLM application devops platform, focusing on enterprise scenarios. It has been used by a large number of industry leading organizations and Fortune 500 companies.

"Bi Sheng" was the inventor of movable type printing, which played a vital role in promoting the transmission of human knowledge. We hope that BISHENG can also provide strong support for the widespread implementation of intelligent applications. Everyone is welcome to participate.


## Features 
1. **Lingsight, a general-purpose agent with expert-level taste**: Through the [AGL](https://github.com/dataelement/AgentGuidanceLanguage)(Agent Guidance Language) framework, we embed domain experts’ preferences, experience, and business logic into the AI, enabling the agent to exhibit “expert-level understanding” when handling tasks.  
<p align="center"><img src="https://dataelem.com/bs/Linsight.png" alt="sence1"></p>   

2. **Unique [BISHENG Workflow](https://dataelem.feishu.cn/wiki/R7HZwH5ZGiJUDrkHZXicA9pInif)**
   - 🧩 **Independent and comprehensive application orchestration framework**: Enables the execution of various tasks within a single framework (while similar products rely on bot invocation or separate chatflow and workflow modules for different tasks).
   - 🔄 **Human in the loop**: Allows users to intervene and provide feedback during the execution of workflows (including multi-turn conversations), whereas similar products can only execute workflows from start to finish without intervention.
   - 💥 **Powerful**: Supports loops, parallelism, batch processing, conditional logic, and free combination of all logic components. It also handles complex scenarios such as multi-type input/output, report generation, content review, and more.
   - 🖐️ **User-friendly and intuitive**: Operations like loops, parallelism, and batch processing, which require specialized components in similar products, can be easily visualized in BISHENG as a "flowchart" (drawing a loop forms a loop, aligning elements creates parallelism, and selecting multiple items enables batch processing).
   <p align="center"><img src="https://dataelem.com/bs/bisheng_workflow.png" alt="sence0"></p>

3. <b>Designed for Enterprise Applications</b>: Document review, fixed-layout report generation, multi-agent collaboration, policy update comparison, support ticket assistance, customer service assistance, meeting minutes generation, resume screening, call record analysis, unstructured data governance, knowledge mining, data analysis, and more.   
The platform supports the construction of <b>highly complex enterprise application scenarios</b> and offers <b>deep optimization</b> 	with hundreds of components and thousands of parameters.
<p align="center"><img src="https://dataelem.com/bs/chat.png" alt="sence1"></p>

4. <b>Enterprise-grade</b> features are the fundamental guarantee for application implementation: security review, RBAC, user group management, traffic control by group, SSO/LDAP, vulnerability scanning and patching, high availability deployment solutions, monitoring, statistics, and more.
<p align="center"><img src="https://dataelem.com/bs/pro.png" alt="sence2"></p>

5. <b>High-Precision Document Parsing</b>: Our high-precision document parsing model is trained on a vast amount of high-quality data accumulated over past 5 years. It includes high-precision printed text, handwritten text, and rare character recognition models, table recognition models, layout analysis models, and seal models., table recognition models, layout analysis models, and seal models. You can deploy it privately for free.
<p align="center"><img src="https://dataelem.com/bs/ocr.png" alt="sence3"></p>

6. A community for sharing best practices across various enterprise scenarios: An open repository of application cases and best practices.
## Quick start 

Please ensure the following conditions are met before installing BISHENG:
- CPU >= 4 Virtual Cores
- RAM >= 16 GB
- Docker 19.03.9+
- Docker Compose 1.25.1+
> Recommended hardware condition: 18 virtual cores, 48G. In addition to installing BISHENG, we will also install the following third-party components by default: ES, Milvus, and Onlyoffice.

Download BISHENG
```bash
git clone https://github.com/dataelement/bisheng.git
# Enter the installation directory
cd bisheng/docker

# If the system does not have the git command, you can download the BISHENG code as a zip file.
wget https://github.com/dataelement/bisheng/archive/refs/heads/main.zip
# Unzip and enter the installation directory
unzip main.zip && cd bisheng-main/docker
```
Start BISHENG
```bash
docker compose -f docker-compose.yml -p bisheng up -d
```
After the startup is complete, access http://IP:3001 in the browser. The login page will appear, proceed with user registration. 

By default, the first registered user will become the system admin. 

For more installation and deployment issues, refer to::[Self-hosting](https://dataelem.feishu.cn/wiki/BSCcwKd4Yiot3IkOEC8cxGW7nPc)

## Acknowledgement 
This repo benefits from [langchain](https://github.com/langchain-ai/langchain) [langflow](https://github.com/logspace-ai/langflow) [unstructured](https://github.com/Unstructured-IO/unstructured) and [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory) . Thanks for their wonderful works.

<b>Thank you to our contributors:</b>

<a href="https://github.com/dataelement/bisheng/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=dataelement/bisheng" />
</a>



## Community & contact 
Welcome to join our discussion group

<img src="https://www.dataelem.com/nstatic/qrcode.png" alt="Wechat QR Code">


<!--
## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=dataelement/bisheng&type=Date)](https://star-history.com/#dataelement/bisheng&Date)
-->


================================================
FILE: README_CN.md
================================================
<img src="https://dataelem.com/bs/face.png" alt="Bisheng banner">

<p align="center">
    <a href="https://dataelem.feishu.cn/wiki/ZxW6wZyAJicX4WkG0NqcWsbynde"><img src="https://img.shields.io/badge/docs-Wiki-brightgreen"></a>
    <img src="https://img.shields.io/github/license/dataelement/bisheng" alt="license"/>
    <img src="https://img.shields.io/docker/pulls/dataelement/bisheng-frontend" alt="docker-pull-count" />
    <a href=""><img src="https://img.shields.io/github/last-commit/dataelement/bisheng"></a>
    <a href="https://star-history.com/#dataelement/bisheng&Timeline"><img src="https://img.shields.io/github/stars/dataelement/bisheng?color=yellow"></a> 
</p>
<p align="center">
  <a href="./README_CN.md">简体中文</a> |
  <a href="./README.md">English</a> |
  <a href="./README_JPN.md">日本語</a>
</p>

<p align="center">
  <a href="https://trendshift.io/repositories/717" target="_blank"><img src="https://trendshift.io/api/badge/repositories/717" alt="dataelement%2Fbisheng | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
</p>
<div class="column" align="middle">
  <!-- <a href="https://bisheng.slack.com/join/shared_invite/"> -->
    <!-- <img src="https://img.shields.io/badge/Join-Slack-orange" alt="join-slack"/> -->
  </a>
  <!-- <img src="https://img.shields.io/github/license/bisheng-io/bisheng" alt="license"/> -->
  <!-- <img src="https://img.shields.io/docker/pulls/bisheng-io/bisheng" alt="docker-pull-count" /> -->
</div>


BISHENG毕昇 是一款 <b>开源</b> LLM应用开发平台,主攻<b>企业场景</b>, 已有大量行业头部组织及世界500强企业在使用。

“毕昇”是活字印刷术的发明人,活字印刷术为人类知识的传递起到了巨大的推动作用。我们希望“BISHENG毕昇”同样能够为智能应用的广泛落地提供有力支撑。欢迎大家一道参与。


## 特点 
1. **具备专家级品味的通用Agent灵思**:通过 [AGL](https://github.com/dataelement/AgentGuidanceLanguage)(Agent Guidance Language)框架,将领域专家的偏好、经验与业务逻辑融入 AI 之中,让 Agent 在处理任务时能具备 「专家级理解」。
<p align="center"><img src="https://dataelem.com/bs/Linsight.png" alt="sence1"></p>  

2. **独具特色的[BISHENG workflow](https://dataelem.feishu.cn/wiki/R7HZwH5ZGiJUDrkHZXicA9pInif)**
   
   - 🧩 **独立、完备的应用编排框架**:可在一个框架下实现各类任务(同类产品需要被 bot 调用,或划分成 chatflow 与 workflow 来完成不同类型的任务)。
   - 🔄 **Human in the loop**:支持用户在Workflow执行的中间过程进行干预和反馈(包括多轮对话),而同类产品只能从头执行到尾。
   - 💥 **强大**:支持成环、并行、跑批、判断逻辑以及所有逻辑的任意自由组合;支持多类型输入输出、撰写报告、内容审核等复杂场景。
   - 🖐️ **易用、符合直觉**:如成环、并行、批量运行操作,在同类产品中用户需借助专门组件实现,在BISHENG中只需完全按照直觉连接成“流程图”即可(画圈成环、并列即并行、多选即批量)。
   <p align="center"><img src="https://dataelem.com/bs/bisheng_workflow.png" alt="sence0"></p>

3. **专为企业应用而生**:文档审核、固定版式报告生成、多智能体协作、规范制度更新差异比对、工单问答、客服辅助、会议纪要生成、简历筛选、通话记录分析、非结构化数据治理、知识挖掘、数据分析...平台支持高复杂度企业应用场景构建,支持数百个组件与数千个参数的深度调优。
<p align="center"><img src="https://dataelem.com/bs/chat.png" alt="sence1"></p>

4. **企业级特性是应用落地的基本保障**:安全审查、基于角色的细颗粒度权限管理、用户组管理、分组流量控制、SSO/LDAP、漏洞扫描修复、高可用部署方案、监控、统计...
<p align="center"><img src="https://dataelem.com/bs/pro.png" alt="sence2"></p>

5. **高精度文档解析**:5年海量数据沉淀,高精度文档解析模型支持免费私有化部署使用,包括高精度印刷体、手写体与生僻字识别模型、表格识别模型、版式分析模型、印章模型...
<p align="center"><img src="https://dataelem.com/bs/ocr.png" alt="sence3"></p>

6. **大量企业场景落地最佳实践分享社区**:开放的应用案例与最佳实践库。
<p align="center"><img src="https://dataelem.com/bs/sence.png" alt="sence4"></p>


## 快速安装 

安装BISHENG前请先确保满足以下条件:
- CPU >= 8 Core
- RAM >= 32 GB
- Docker 19.03.9+
- Docker Compose 1.25.1+
> 除了BISHENG前后端,我们默认还会安装第三方组件ES、Milvus、Onlyoffice

下载BISHENG代码
```bash
# 如果系统中有git命令,可以直接下载毕昇代码
git clone https://github.com/dataelement/bisheng.git
# 进入安装目录
cd bisheng/docker

# 如果系统没有没有git命令,可以下载毕昇代码zip包
wget https://github.com/dataelement/bisheng/archive/refs/heads/main.zip
# 解压并进入安装目录
unzip main.zip && cd bisheng-main/docker
```
启动BISHENG
```bash
# 进入bisheng/docker或bisheng-main/docker目录,执行
docker compose -f docker-compose.yml -p bisheng up -d
```
启动后,在浏览器中访问 http://IP:3001 ,出现登录页,进行用户注册。默认第一个注册的用户会成为系统admin。

其他安装部署问题参考:[私有化部署](https://dataelem.feishu.cn/wiki/BSCcwKd4Yiot3IkOEC8cxGW7nPc)


## 资源
- [📄应用案例/场景库](https://dataelem.feishu.cn/wiki/ZfkmwLPfeiAhQSkK2WvcX87unxc)
- [📄经验技巧](https://dataelem.feishu.cn/wiki/OWFRwknFaiIMajke4m5cFeLrnie)
- [📄功能使用说明](https://dataelem.feishu.cn/wiki/WxH6wubbAiBkRIkSEyecmpDMnjF)
- [📄BISHENG Blog](https://dataelem.feishu.cn/wiki/BiNowcaYWilewdksXQ5cZl3tnzy)


## 感谢 

感谢我们的贡献者:

<a href="https://github.com/dataelement/bisheng/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=dataelement/bisheng" />
</a>


<br>
Bisheng 采用了以下依赖库:

- 感谢开源LLM应用开发库 [langchain](https://github.com/langchain-ai/langchain)。
- 感谢开源langchain可视化工具 [langflow](https://github.com/logspace-ai/langflow)。
- 感谢开源非结构化数据解析引擎 [unstructured](https://github.com/Unstructured-IO/unstructured)。
- 感谢开源LLM微调框架 [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory) 。


## 社区与支持 
欢迎加入我们的交流群

<img src="https://www.dataelem.com/nstatic/qrcode.png" alt="Wechat QR Code">


<!--
## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=dataelement/bisheng&type=Date)](https://star-history.com/#dataelement/bisheng&Date)
-->


================================================
FILE: README_JPN.md
================================================
以下は、あなたが提供したMarkdownコンテンツの日本語翻訳です。

---

<img src="https://dataelem.com/bs/face.png" alt="Bisheng banner">

<p align="center">
    <a href="https://dataelem.feishu.cn/wiki/ZxW6wZyAJicX4WkG0NqcWsbynde"><img src="https://img.shields.io/badge/docs-Wiki-brightgreen"></a>
    <img src="https://img.shields.io/github/license/dataelement/bisheng" alt="license"/>
    <img src="https://img.shields.io/docker/pulls/dataelement/bisheng-frontend" alt="docker-pull-count" />
    <a href=""><img src="https://img.shields.io/github/last-commit/dataelement/bisheng"></a>
    <a href="https://star-history.com/#dataelement/bisheng&Timeline"><img src="https://img.shields.io/github/stars/dataelement/bisheng?color=yellow"></a> 
</p>
<p align="center">
  <a href="./README_CN.md">简体中文</a> |
  <a href="./README.md">English</a> |
  <a href="./README_JPN.md">日本語</a>
</p>

<p align="center">
  <a href="https://trendshift.io/repositories/717" target="_blank"><img src="https://trendshift.io/api/badge/repositories/717" alt="dataelement%2Fbisheng | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
</p>
<div class="column" align="middle">
  <!-- <a href="https://bisheng.slack.com/join/shared_invite/"> -->
    <!-- <img src="https://img.shields.io/badge/Join-Slack-orange" alt="join-slack"/> -->
  </a>
  <!-- <img src="https://img.shields.io/github/license/bisheng-io/bisheng" alt="license"/> -->
  <!-- <img src="https://img.shields.io/docker/pulls/bisheng-io/bisheng" alt="docker-pull-count" /> -->
</div>

BISHENGは、エンタープライズシナリオに焦点を当てたオープンなLLMアプリケーションDevOpsプラットフォームです。多くの業界リーディング企業やフォーチュン500企業で使用されています。

「畢昇(Bi Sheng)」は、活版印刷の発明者であり、人類の知識の伝播に重要な役割を果たしました。我々は、BISHENGがインテリジェントアプリケーションの広範な実装に強力なサポートを提供できることを願っています。皆さんの参加を歓迎します。

## 特徴
1. **専門家級のセンスを備えた汎用エージェント「灵思」:**:[AGL](https://github.com/dataelement/AgentGuidanceLanguage)(Agent Guidance Language)フレームワークを通じて、分野の専門家の志向・経験・業務ロジックをAIに組み込み、エージェントがタスク処理時に「専門家レベルの理解」を備えられるようにします。  
<p align="center"><img src="https://dataelem.com/bs/Linsight.png" alt="sence1"></p>    

2. **独自の特徴を持つ[BISHENG workflow](https://dataelem.feishu.cn/wiki/R7HZwH5ZGiJUDrkHZXicA9pInif)**
   
   - 🧩 **独立性と完備性を備えたアプリケーションオーケストレーションフレームワーク**:1つのフレームワーク内でさまざまなタスクを実現可能(類似製品では、botの呼び出しが必要だったり、chatflowとworkflowに分けて異なるタスクを処理する必要があります)。
   - 🔄 **Human in the loop**:Workflowの実行途中でユーザーが介入やフィードバック(多ターン対話を含む)を行えます(類似製品では最初から最後まで一貫して実行されるのみ)。
   - 💥 **強力な機能**:ループ化、並列処理、一括処理、条件分岐ロジック、さらにこれら全ての自由な組み合わせが可能です。多種類の入出力、レポート作成、コンテンツ審査といった複雑なシナリオも対応可能。
   - 🖐️ **直感的で使いやすい**:類似製品では専用のコンポーネントを使用する必要があるループ化、並列処理、一括処理操作も、BISHENGでは直感的に「フローチャート」として接続するだけで実現可能です(円を描けばループ化、並列に配置すれば並列処理、複数選択すれば一括処理)。

   <p align="center"><img src="https://dataelem.com/bs/bisheng_workflow.png" alt="sence0"></p>
   
3. **エンタープライズアプリケーション向けに設計**: ドキュメントレビュー、固定レイアウトレポート生成、マルチエージェント協働、ポリシー更新比較、サポートチケット支援、カスタマーサービス支援、会議議事録生成、履歴書スクリーニング、通話記録分析、非構造化データガバナンス、知識採掘、データ分析など。プラットフォームは、**高度に複雑なエンタープライズアプリケーションシナリオの構築**をサポートし、**深い最適化**を行い、数百のコンポーネントと数千のパラメータを提供します。
<p align="center"><img src="https://dataelem.com/bs/chat.png" alt="sence1"></p>

4. **エンタープライズグレード**の機能は、アプリケーション実装の基本的な保証です: セキュリティレビュー、RBAC、ユーザーグループ管理、グループごとのトラフィックコントロール、SSO/LDAP、脆弱性スキャンとパッチ適用、高可用性デプロイメントソリューション、モニタリング、統計など。
<p align="center"><img src="https://dataelem.com/bs/pro.png" alt="sence2"></p>

5. **高精度ドキュメント解析**: 私たちの高精度ドキュメント解析モデルは、過去5年間にわたる大量の高品質データに基づいてトレーニングされています。高精度な印刷テキスト、手書きテキスト、稀少文字認識モデル、テーブル認識モデル、レイアウト解析モデル、印鑑モデルを含みます。プライベートに無料で展開することができます。
<p align="center"><img src="https://dataelem.com/bs/ocr.png" alt="sence3"></p>

6. 様々なエンタープライズシナリオにおけるベストプラクティスを共有するコミュニティ: オープンなアプリケーションケースとベストプラクティスのリポジトリ。


## クイックスタート

BISHENGをインストールする前に、以下の条件を満たしていることを確認してください:
- CPU >= 8 コア
- RAM >= 32 GB
- Docker 19.03.9以上
- Docker Compose 1.25.1以上

> BISHENGをインストールする際、デフォルトで以下のサードパーティコンポーネントもインストールされます: ES, Milvus, Onlyoffice。

BISHENGのダウンロード
```bash
git clone https://github.com/dataelement/bisheng.git
# インストールディレクトリに移動
cd bisheng/docker

# システムにgitコマンドがない場合は、BISHENGのコードをzipファイルとしてダウンロードできます。
wget https://github.com/dataelement/bisheng/archive/refs/heads/main.zip
# 解凍してインストールディレクトリに移動
unzip main.zip && cd bisheng-main/docker
```

BISHENGの起動
```bash
docker compose -f docker-compose.yml -p bisheng up -d
```

起動完了後、ブラウザでhttp://IP:3001にアクセスします。ログインページが表示されるので、ユーザー登録を行います。

デフォルトでは、最初に登録されたユーザーがシステム管理者となります。

詳細なインストールおよびデプロイに関する問題は、こちらを参照してください:[私有化部署](https://dataelem.feishu.cn/wiki/BSCcwKd4Yiot3IkOEC8cxGW7nPc)

## 謝辞
このリポジトリは [langchain](https://github.com/langchain-ai/langchain) [langflow](https://github.com/logspace-ai/langflow) [unstructured](https://github.com/Unstructured-IO/unstructured) および [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory) の恩恵を受けています。素晴らしい作品に感謝します。

**貢献者に感謝します:**

<a href="https://github.com/dataelement/bisheng/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=dataelement/bisheng" />
</a>

## コミュニティと連絡先
ディスカッショングループへの参加を歓迎します。

<img src="https://www.dataelem.com/nstatic/qrcode.png" alt="Wechat QR Code">

---

この翻訳を使用して、Markdownファイルを作成できます。


================================================
FILE: SECURITY.md
================================================
# Security Policy

## Reporting Security Issues

We take the security of our project seriously. If you believe you have found a security vulnerability, please report it to us privately. **Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.**

> **Important Note**: Any code within the `classic/` folder is considered legacy, unsupported, and out of scope for security reports. We will not address security vulnerabilities in this deprecated code.

Instead, please report them via:
- [GitHub Security Advisory](https://github.com/dataelement/bisheng/security/advisories/new)
<!--- [Huntr.dev](https://huntr.com/repos/significant-gravitas/autogpt) - where you may be eligible for a bounty-->

### Reporting Process
1. **Submit Report**: Use one of the above channels to submit your report
2. **Response Time**: Our team will acknowledge receipt of your report within 14 business days.
3. **Collaboration**: We will collaborate with you to understand and validate the issue
4. **Resolution**: We will work on a fix and coordinate the release process


### Disclosure Policy
- Please provide detailed reports with reproducible steps
- Include the version/commit hash where you discovered the vulnerability
- Allow us a 90-day security fix window before any public disclosure
- Share any potential mitigations or workarounds if known

## Supported Versions
Only the following versions are eligible for security updates:

| Version | Supported |
|---------|-----------|
| Latest release on master branch | ✅ |
| Development commits (pre-master) | ✅ |
| Classic folder (deprecated) | ❌ |
| All other versions | ❌ |



---
Last updated: November 2024


================================================
FILE: docker/bisheng/config/config.yaml
================================================
# 数据库配置, 当前加密串的密码是1234,
# 密码加密参考 https://dataelem.feishu.cn/wiki/BSCcwKd4Yiot3IkOEC8cxGW7nPc#Gxitd1xEeof1TzxdhINcGS6JnXd
database_url:
  "mysql+pymysql://root:gAAAAABlp4b4c59FeVGF_OQRVf6NOUIGdxq8246EBD-b0hdK_jVKRs1x4PoAn0A6C5S6IiFKmWn0Nm5eBUWu-7jxcqw6TiVjQA==@mysql:3306/bisheng?charset=utf8mb4"

# 缓存配置  redis://[[username]:[password]]@localhost:6379/0
# 如果设置了密码,需要参考MySQL密码的加密逻辑对密码进行加密。eg: redis://root:gAAAAABlp4b4c59FeVGF_OQRVf6NOUIGdxq8246EBD-b0hdK_jVKRs1x4PoAn0A6C5S6IiFKmWn0Nm5eBUWu-7jxcqw6TiVjQA==@redis:6379/0
# 普通模式:
redis_url: "redis://redis:6379/1"

# 集群模式或者哨兵模式(只能选其一):
# redis_url: 
#   mode: "cluster"
#   startup_nodes: 
#     - {"host": "192.168.106.115", "port": 6002}
#   password: encrypt(gAAAAABlp4b4c59FeVGF_OQRVf6NOUIGdxq8246EBD-b0hdK_jVKRs1x4PoAn0A6C5S6IiFKmWn0Nm5eBUWu-7jxcqw6TiVjQA==)
#   #sentinel
#   mode: "sentinel"
#   sentinel_hosts: [("redis", 6379)]
#   sentinel_master: "mymaster"
#   sentinel_password: encrypt(gAAAAABlp4b4c59FeVGF_OQRVf6NOUIGdxq8246EBD-b0hdK_jVKRs1x4PoAn0A6C5S6IiFKmWn0Nm5eBUWu-7jxcqw6TiVjQA==)
#   db: 1

# celery的broken地址
celery_redis_url: "redis://redis:6379/2"
celery_task:
  # 对celery熟悉的用户可以自定义配置任务的路由,启动不同类型的worker处理不同类型的异步任务。注意工作流的执行只能在一个进程内!!!
  task_routers:
    bisheng.worker.knowledge.*: # 知识库文件处理相关任务
      queue: knowledge_celery
    bisheng.worker.workflow.*: # 工作流相关任务
      queue: workflow_celery

# 知识库的milvus和es配置  支持使用 !env ${PATH} 填写环境变量的值, 若环境变量不存在则会报错
vector_stores:
  milvus:
    connection_args: !env ${BS_MILVUS_CONNECTION_ARGS}
    is_partition: !env ${BS_MILVUS_IS_PARTITION}
    partition_suffix: !env ${BS_MILVUS_PARTITION_SUFFIX}
  elasticsearch:
    url: !env ${BS_ELASTICSEARCH_URL}
    ssl_verify: !env ${BS_ELASTICSEARCH_SSL_VERIFY}


# 对象存储, 目前只支持minio
object_storage:
  type: minio
  minio:
    schema: !env ${BS_MINIO_SCHEMA}
    cert_check: !env ${BS_MINIO_CERT_CHECK}
    endpoint: !env ${BS_MINIO_ENDPOINT}
    sharepoint: !env ${BS_MINIO_SHAREPOINT}
    access_key: !env ${BS_MINIO_ACCESS_KEY}
    secret_key: !env ${BS_MINIO_SECRET_KEY}
    public_bucket: 'bisheng'  # 公共bucket,存储平台上一些需要持久化的文件。会设置为可公开访问
    tmp_bucket: 'tmp-dir'  # 临时bucket,会对传到此bucket内的文件设置有效期

environment:
  env: dev
  uns_support: ['png','jpg','jpeg','bmp','doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'txt', 'md', 'html', 'pdf', 'csv', 'tiff']

# 可根据loguru的文档配置不同 handlers
logger_conf:
  # 默认输出到sys.stdout的日志级别, 大于等于此级别都会输出
  level: DEBUG
  # 默认输出格式
  format: '<level>[{time:YYYY-MM-DD HH:mm:ss.SSSSSS}] [{level.name} process-{process.id}-{thread.id} {name}:{line}]</level> - <level>trace={extra[trace_id]} {message}</level>'
  # 参考loguru.add()中的参数可以配置多个handler
  handlers:
      # 文件路径,支持插入一些系统环境变量,若环境变量不存在则置空。例如 HOSTNAME: 主机名。后端会处理环境变量的替换
    - sink: "/app/data/bisheng.log"
      # 日志级别
      level: INFO
      # 日志格式化函数,extra内支持trace_id
      format: '<level>[{time:YYYY-MM-DD HH:mm:ss.SSSSSS}] [{level.name} process-{process.id}-{thread.id} {name}:{line}]</level> - <level>trace={extra[trace_id]} {message}</level>'
      # 每天的几点进行切割
      rotation: "00:00"
      retention: "3 Days"
      enqueue: ture
    - sink: "/app/data/statistic.log"
      level: INFO
      # 和原生不一样,后端会将配置使用eval()执行转为函数用来过滤特定日志级别。推荐lambda
      filter: "lambda record: record['level'].name == 'INFO' and record['message'].startswith('k=s')"
      format: "[{time:YYYY-MM-DD HH:mm:ss.SSSSSS}]|{level}|BISHENG|{extra[trace_id]}||{process.id}|{thread.id}|||#EX_ERR:POS={name},line {line},ERR=500,EMSG={message}"
      rotation: "00:00"
      retention: "3 Days"
      enqueue: ture


================================================
FILE: docker/bisheng/entrypoint.sh
================================================
#!/bin/bash
set -xe

export PYTHONPATH="./"

start_mode=${1:-api}

start_knowledge(){
  # 知识库解析的celery worker
    celery -A bisheng.worker.main worker -l info -c 20 -P threads -Q knowledge_celery -n knowledge@%h
}

start_workflow(){
  # 工作流相关的celery worker
    celery -A bisheng.worker.main worker -l info -c 100 -P threads -Q workflow_celery -n workflow@%h
}

start_beat(){
  # 定时任务调度
    celery -A bisheng.worker.main beat -l info
}

start_linsight(){
  # 灵思后台任务worker
    python bisheng/linsight/worker.py --worker_num 4 --max_concurrency 5
}
start_default(){
    # 默认其他任务的执行worker,目前是定时统计埋点数据
    celery -A bisheng.worker.main worker -l info -c 100 -P threads -Q celery -n celery@%h
}

if [ "$start_mode" = "api" ]; then
    echo "Starting API server..."
    uvicorn bisheng.main:app --host 0.0.0.0 --port 7860 --no-access-log --workers 8
elif [ "$start_mode" = "knowledge" ]; then
    echo "Starting Knowledge Celery worker..."
    start_knowledge
elif [ "$start_mode" = "workflow" ]; then
    echo "Starting Workflow Celery worker..."
    start_workflow
elif [ "$start_mode" = "beat" ]; then
    echo "Starting Celery beat..."
    start_beat
elif [ "$start_mode" = "default" ]; then
    echo "Starting default celery worker..."
    start_default
elif [ "$start_mode" = "linsight" ]; then
    echo "Starting LinSight worker..."
    start_linsight
elif [ "$start_mode" = "worker" ]; then
    echo "Starting All worker..."
    # 处理知识库相关任务的worker
    start_knowledge &
    # 处理工作流相关任务的worker
    start_workflow &
    # 处理linsight相关任务的worker
    start_linsight &
    # 默认其他任务的执行worker,目前是定时统计埋点数据
    start_default &
    start_beat

    echo "All workers started successfully."
else
    echo "Invalid start mode. Use api、worker、knowledge、workflow、beat、default、linsight."
    exit 1
fi


================================================
FILE: docker/bisheng-ft/config.yaml
================================================
# Celery 的broker配置。存储ft指令执行结果。
# 密码加密规则和backend一致, 暂不支持集群redis
redis_url: "redis://bisheng-redis:6379/5"


================================================
FILE: docker/bisheng-uns/config.yaml
================================================
# 可根据loguru的文档配置不同 handlers
logger_conf:
  # 默认输出到控制台的日志级别, 大于等于此级别都会输出
  level: DEBUG
  # 默认输出格式
  format: '[{time:YYYY-MM-DD HH:mm:ss.SSSSSS}] [{level.name} process-{process.id}-{thread.id} {name}:{line}] - trace={extra[trace_id]} {message}'
  # 参考loguru.add()中的参数可以配置多个handler
  handlers:
      # 文件路径,支持插入一些系统环境变量,若环境变量不存在则置空。例如 HOSTNAME: 主机名。后端会处理环境变量的替换
    - sink: "/app/logs/bisheng_uns.log"
      # 日志级别
      level: INFO
      # 和原生不一样,后端会将配置使用eval()执行转为函数用来过滤特定日志级别。推荐lambda
      # filter: "lambda record: record['level'].name == 'INFO'"
      # 日志格式化函数,extra内支持trace_id
      format: "[{time:YYYY-MM-DD HH:mm:ss.SSSSSS}]|{level}|BISHENG|{extra[trace_id]}|{process.id}|{thread.id}|{message}"
      # 每天的几点进行切割
      rotation: "00:00"
      retention: "3 Days"
    - sink: "/app/logs/err-v0-BISHENG-UNS-{HOSTNAME}.log"
      level: ERROR
      filter: "lambda record: record['level'].name == 'ERROR'"
      format: "[{time:YYYY-MM-DD HH:mm:ss.SSSSSS}]|{level}|BISHENG|{extra[trace_id]}||{process.id}|{thread.id}|||#EX_ERR:POS={name},line {line},ERR=500,EMSG={message}"
      rotation: "00:00"
      retention: "3 Days"

# pdf解析需要用到的模型配置, 配置了rt_server环境变量的话会替换为对应的地址
pdf_model_params:
  layout_ep: "http://192.168.106.12:9001/v2.1/models/elem_layout_v1/infer"
  cell_model_ep: "http://192.168.106.12:9001/v2.1/models/elem_table_cell_detect_v1/infer"
  rowcol_model_ep: "http://192.168.106.12:9001/v2.1/models/elem_table_rowcol_detect_v1/infer"
  table_model_ep: "http://192.168.106.12:9001/v2.1/models/elem_table_detect_v1/infer"
  ocr_model_ep: "http://192.168.106.12:9001/v2.1/models/elem_ocr_collection_v3/infer"

# 是否全部走ocr识别, false的话则由代码逻辑判断是否需要走ocr识别
is_all_ocr: false
# ocr识别需要的配置项
ocr_conf:
  params:
    sort_filter_boxes: true,
    enable_huarong_box_adjust: true,
    rotateupright: false,
    support_long_image_segment: true,
    split_long_sentence_blank: true
  scene_mapping:
    print:
      det: general_text_det_mrcnn_v2.0
      recog: transformer-blank-v0.2-faster
    hand:
      det: general_text_det_mrcnn_v2.0
      recog: transformer-hand-v1.16-faster
    print_recog:
      recog: transformer-blank-v0.2-faster
    hand_recog:
      recog: transformer-hand-v1.16-faster
    det:
      det: general_text_det_mrcnn_v2.0


================================================
FILE: docker/docker-compose-ft.yml
================================================
services:
  ft_server:
    container_name: bisheng-ft-server
    image: dataelement/bisheng-ft:v0.5.0
    shm_size: "4g"
    ports:
      - "8000:8000"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/bisheng-ft/config.yaml:/opt/bisheng-ft/sft_server/config.yaml  # 服务启动所需的配置文件地址,默认不用改
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data/llm:/opt/bisheng-ft/models/model_repository # 这个是存放基座模型的目录,挂载到本机目录
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data/finetune_output:/opt/bisheng-ft/finetune_output # 这个是存放微调过程的中间日志和微调训练后模型的目录,挂载到本机目录,不能与存放基座模型的目录相同
    security_opt:
      - seccomp:unconfined
    command: bash start-sft-server.sh # 启动服务
    restart: on-failure
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      start_period: 30s
      interval: 90s
      timeout: 30s
      retries: 3
    deploy:
      resources:
        reservations:
          devices:
          - driver: nvidia
            count: all
            capabilities: [gpu]


================================================
FILE: docker/docker-compose-office.yml
================================================
services:
  office:
    container_name: bisheng-office
    image: onlyoffice/documentserver:7.1.1
    ports:
      - "8701:80"
    environment:
      TZ: Asia/Shanghai
      JWT_ENABLED: "false"
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/office/bisheng:/var/www/onlyoffice/documentserver/sdkjs-plugins/bisheng
    command: bash -c "supervisorctl restart all"
    restart: on-failure



================================================
FILE: docker/docker-compose-uns.yml
================================================
services:
  bisheng-unstructured:
    container_name: bisheng-unstructured
    image: dataelement/bisheng-unstructured:v0.0.3.14
    ports:
      - "10001:10001"
    environment:
      # 填写ocr_sdk或rt服务的根地址
      # server_address: bisheng-rt:9001
      # 这里填 ocr_sdk 或 rt
      # server_type: ocr_sdk
      TZ: Asia/Shanghai
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/bisheng-uns/config.yaml:/opt/bisheng-unstructured/bisheng_unstructured/config/config.yaml
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:10001/health"]
      interval: 30s
      timeout: 20s
      retries: 3
    restart: on-failure



================================================
FILE: docker/docker-compose.yml
================================================
services:
  mysql:
    container_name: bisheng-mysql
    image: mysql:8.0
    
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: "1234"  # 数据库密码,如果修改需要同步修改bisheng/congfig/config.yaml配置database_url的mysql连接密码
      MYSQL_DATABASE: bisheng
      TZ: Asia/Shanghai
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/mysql/conf/my.cnf:/etc/mysql/my.cnf
      - ${DOCKER_VOLUME_DIRECTORY:-.}/mysql/data:/var/lib/mysql
    healthcheck:
      test: ["CMD-SHELL", "exit | mysql -u root -p$$MYSQL_ROOT_PASSWORD"]
      start_period: 30s
      interval: 20s
      timeout: 10s
      retries: 4
    restart: on-failure

  redis:
    container_name: bisheng-redis
    image: redis:7.0.4
    ports:
      - "6379:6379"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data/redis:/data
      - ${DOCKER_VOLUME_DIRECTORY:-.}/redis/redis.conf:/etc/redis.conf
    command: redis-server /etc/redis.conf
    healthcheck:
      test: ["CMD-SHELL", 'redis-cli ping|grep -e "PONG\|NOAUTH"']
      interval: 10s
      timeout: 5s
      retries: 3
    restart: on-failure

  backend:
    container_name: bisheng-backend
    image: dataelement/bisheng-backend:v2.4.0-beta1-fix
    ports:
      - "7860:7860"
    environment:
      TZ: Asia/Shanghai
      BS_MILVUS_CONNECTION_ARGS: '{"host":"milvus","port":"19530","user":"","password":"","secure":false}'
      BS_MILVUS_IS_PARTITION: 'true'
      BS_MILVUS_PARTITION_SUFFIX: '1'
      BS_ELASTICSEARCH_URL: 'http://elasticsearch:9200'
      BS_ELASTICSEARCH_SSL_VERIFY: '{}'  # 可根据自己部署的密码进行配置 '{"basic_auth": ("elastic", "elastic")}'
      BS_MINIO_SCHEMA: 'false'
      BS_MINIO_CERT_CHECK: 'false'
      BS_MINIO_ENDPOINT: 'minio:9000'
      BS_MINIO_SHAREPOINT: 'minio:9000'
      BS_MINIO_ACCESS_KEY: 'minioadmin'
      BS_MINIO_SECRET_KEY: 'minioadmin'
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/bisheng/config/config.yaml:/app/bisheng/config.yaml
      - ${DOCKER_VOLUME_DIRECTORY:-.}/bisheng/entrypoint.sh:/app/entrypoint.sh
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data/bisheng:/app/data
    security_opt:
      - seccomp:unconfined
    command: sh entrypoint.sh api  # 启动api服务
    restart: on-failure
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:7860/health"]
      start_period: 30s
      interval: 90s
      timeout: 30s
      retries: 3
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy
  
  backend_worker:
    container_name: bisheng-backend-worker
    image: dataelement/bisheng-backend:v2.4.0-beta1-fix
    environment:
      TZ: Asia/Shanghai
      BS_MILVUS_CONNECTION_ARGS: '{"host":"milvus","port":"19530","user":"","password":"","secure":false}'
      BS_MILVUS_IS_PARTITION: 'true'
      BS_MILVUS_PARTITION_SUFFIX: '1'
      BS_ELASTICSEARCH_URL: 'http://elasticsearch:9200'
      BS_ELASTICSEARCH_SSL_VERIFY: '{}'  # 可根据自己部署的密码进行配置 '{"basic_auth": ("elastic", "elastic")}'
      BS_MINIO_SCHEMA: 'false'
      BS_MINIO_CERT_CHECK: 'false'
      BS_MINIO_ENDPOINT: 'minio:9000'
      BS_MINIO_SHAREPOINT: 'minio:9000'
      BS_MINIO_ACCESS_KEY: 'minioadmin'
      BS_MINIO_SECRET_KEY: 'minioadmin'
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/bisheng/config/config.yaml:/app/bisheng/config.yaml
      - ${DOCKER_VOLUME_DIRECTORY:-.}/bisheng/entrypoint.sh:/app/entrypoint.sh
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data/bisheng:/app/data
    security_opt:
      - seccomp:unconfined
    command: sh entrypoint.sh worker  # 启动celery的异步worker服务,用来处理一些耗时的任务
    restart: on-failure
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_healthy


  frontend:
    container_name: bisheng-frontend
    image: dataelement/bisheng-frontend:v2.4.0-beta1-fix
    ports:
      - "3001:3001"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ${DOCKER_VOLUME_DIRECTORY:-.}/nginx/conf.d:/etc/nginx/conf.d
    restart: on-failure
    depends_on:
      - backend

  elasticsearch:
    container_name: bisheng-es
    image: docker.io/bitnamilegacy/elasticsearch:8.12.0
    user: root
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data/es:/bitnami/elasticsearch/data
    restart: on-failure

  etcd:
    container_name: bisheng-milvus-etcd
    image: quay.io/coreos/etcd:v3.5.5
    environment:
      ETCD_AUTO_COMPACTION_MODE: revision
      ETCD_AUTO_COMPACTION_RETENTION: "1000"
      ETCD_QUOTA_BACKEND_BYTES: "4294967296"
      ETCD_SNAPSHOT_COUNT: "50000"
      TZ: Asia/Shanghai
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data/milvus-etcd:/etcd
    command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
    restart: on-failure
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio:
    container_name: bisheng-milvus-minio
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    ports:
      - "9100:9000"
      - "9101:9001"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data/milvus-minio:/minio_data
    command: minio server /minio_data --console-address ":9001"
    restart: on-failure
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  milvus:
    container_name: bisheng-milvus-standalone
    image: milvusdb/milvus:v2.5.10
    command: ["milvus", "run", "standalone"]
    security_opt:
    - seccomp:unconfined
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ${DOCKER_VOLUME_DIRECTORY:-.}/data/milvus:/var/lib/milvus
    restart: on-failure
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
      start_period: 90s
      interval: 30s
      timeout: 20s
      retries: 3
    ports:
      - "19530:19530"
      - "9091:9091"
    depends_on:
      - etcd
      - minio


================================================
FILE: docker/mysql/conf/my.cnf
================================================
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci, NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# skip-character-set-client-handshake
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION


================================================
FILE: docker/nginx/conf.d/default.conf
================================================

# 在http区域内一定要添加下面配置, 支持websocket
map $http_upgrade $connection_upgrade {
	default upgrade;
	'' close;
}



server {
	gzip on;
	gzip_comp_level  2;
	gzip_min_length  1000;
	gzip_types  text/xml text/css;
	gzip_http_version 1.1;
	gzip_vary  on;
	gzip_disable "MSIE [4-6] \.";

	listen 3001;

	 location / {
		root /usr/share/nginx/html/platform;
		index index.html index.htm;
		# 禁止浏览器缓存 index.html
		location = /index.html {
			add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate" always;
			add_header Pragma "no-cache" always;
			add_header Expires 0 always;
		}
		try_files $uri $uri/ /index.html =404;
		add_header X-Frame-Options SAMEORIGIN;
	}

	location /workspace/ {
		alias /usr/share/nginx/html/client/;
		index index.html index.htm;
		# 禁止浏览器缓存 /workspace/index.html
		location = /workspace/index.html {
			add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate" always;
			add_header Pragma "no-cache" always;
			add_header Expires 0 always;
		}
		try_files $uri $uri/ /workspace/index.html;
	}

	location ~ ^(/workspace)?/api(/|$) {
		rewrite ^/workspace(/.*)$ $1 break;
		proxy_pass http://backend:7860;
		proxy_read_timeout 300s;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection $connection_upgrade;
		client_max_body_size 200m;
		add_header Access-Control-Allow-Origin $host;
		add_header X-Frame-Options SAMEORIGIN;
	}

	location ~ ^(/workspace)?/bisheng|/tmp-dir {
		rewrite ^/workspace(/.*)$ $1 break;
		proxy_pass http://minio:9000;
	}
}

================================================
FILE: docker/nginx/conf.d/websocket.conf
================================================

# 在http区域内一定要添加下面配置, 支持websocket
map $http_upgrade $connection_upgrade {
	default upgrade;
	'' close;
}

server {
	gzip on;
	gzip_comp_level  2;
	gzip_min_length  1000;
	gzip_types  text/xml text/css;
	gzip_http_version 1.1;
	gzip_vary  on;
	gzip_disable "MSIE [4-6] \.";

	listen 8443;
	location /api {
		proxy_pass http://backend:7860;
		proxy_read_timeout 300s;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection $connection_upgrade;
		client_max_body_size 50m;
	}
}

================================================
FILE: docker/nginx/nginx.conf
================================================

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

================================================
FILE: docker/office/bisheng/all.js
================================================
(function (window, undefined) {
  let selectText = ''

  window.Asc.plugin.init = function (e) {
    selectText = e
  }
  window.Asc.plugin.event_onClick = function () {
    selectText = ''
  }

  window.Asc.plugin.button = function (id) {
  }

  const EventMap = {
    sendToParent (method, data) {
      let params = {
        type: 'onExternalFrameMessage',
        method,
        data
      }
      window.top.postMessage(JSON.stringify(params), location.origin)
    },
    focusInDocument (data) {
      window.Asc.scope.field = {
        id: data.id,
        fieldFlag: data.fieldFlag,
        $index: data.$index || 1
      }
      window.Asc.plugin.callCommand(function () {
        let field = Asc.scope.field || {}
        let index = field.$index ? field.$index : 1
        let oDoc = Api.GetDocument()
        let flag = `{{${field.fieldFlag}}}`
        let oRange = oDoc.Search(flag)
        let cur = 1
        for (let i = 0; i < oRange.length; i++) {
          if (oRange[i].GetText() === flag) {
            if (cur === index) {
              oRange[i].Select()
              break
            }
            cur = cur + 1
          }
        }
      })
    },
    focusTableInDoc (data) {
      window.Asc.scope.marker = data.marker
      window.Asc.plugin.callCommand(function () {
        let flag = Asc.scope.marker || ''
        let oDoc = Api.GetDocument()
        let oRange = oDoc.GetBookmarkRange(flag)
        oRange.Select()
      })
    },
    addMarker (data) {
      let flag = '{{' + data.fieldFlag + '}}'
      window.Asc.plugin.executeMethod('PasteText', [flag])
    },
    addBookMarker (data) {
      window.Asc.scope.value = data
      window.Asc.plugin.callCommand(function () {
        let oDoc = Api.GetDocument()
        let range = oDoc.GetRangeBySelect()
        let params = {
          type: 'onExternalFrameMessage',
          method: 'addBookMarker'
        }
        let marker = Asc.scope.value
        let markers = []
        if (range) {
          let texts = range.GetText()
          let pars = range.GetAllParagraphs() || []
          let txtList = []
          for (let i = 0; i < pars.length; i++) {
              let text = pars[i].GetText()
              txtList.push(text)
          }
          let table = pars[0] ? pars[0].GetParentTable() : null
          let count = table ? table.GetRowsCount() : 0
          for (let i = 0; i < count; i++) {
            let row = table.GetRow(i)
            let firstCell = row.GetCell(0)
            let cellText = firstCell ? firstCell.GetContent().GetElement(0).GetText() : ''
            // 序号
            let isNumbering = false
            if (firstCell.GetContent().GetElement(0).GetNumbering()) {
              isNumbering = true
              let cellCount = row.GetCellsCount()
              for (let j = 1; j < cellCount; j++) {
                let cellItem = row.GetCell(j)
                if (!cellItem.GetContent().GetElement(0).GetNumbering()) {
                  cellText = cellItem.GetContent().GetElement(0).GetText()
                  firstCell = cellItem
                  break
                }
              }
            }
            if (cellText && txtList.includes(cellText)) {
              let cRange = firstCell.Search(cellText)[0]
              cRange.AddBookmark(marker.key + i)
              markers.push(marker.key + i)
            }
          }
          // range.AddBookmark(Asc.scope.value.key)
          params.data = Object.assign(marker, {
            key: markers.join(','),
            texts
          })
        } else {
          params.data = false
        }
        window.top.postMessage(JSON.stringify(params), location.origin)
      })
    },
    deleteBookMarker (data) {
      window.Asc.scope.value = data
      window.Asc.plugin.callCommand(function () {
        let oDoc = Api.GetDocument()
        let markers = Asc.scope.value || []
        for (let i = 0; i < markers.length; i++) {
          oDoc.DeleteBookmark(markers[i])
        }
      })
    },
    // 批量删除循环应用内标签
    deleteLoopApp (list) {
      window.Asc.scope.value = list
      window.Asc.plugin.callCommand(function () {
        let list = window.Asc.scope.value || []
        let oDoc = Api.GetDocument()
        list.forEach(row => {
          if (row.loopType === 0) {
            oDoc.SearchAndReplace({ searchString: `{{${row.startTag}}}`, replaceString: '' }, `{{${row.startTag}}}`, '')
            oDoc.SearchAndReplace({ searchString: `{{${row.endTag}}}`, replaceString: '' }, `{{${row.endTag}}}`, '')
          } else if (row.loopType === 1) {
            oDoc.DeleteBookmark(row.bookmark)
          }
        })
      })
    },
    // 更新占位符
    replaceMarker (data) {
      window.Asc.scope.st = '{{' + data.newValue + '}}'
      // 原来的值
      if (data.oldValue) {
        window.Asc.scope.old = '{{' + data.oldValue + '}}'
      } else {
        this.addMarker(data)
        return
      }
      window.Asc.plugin.callCommand(function () {
        let oDocument  = Api.GetDocument()
        oDocument.SearchAndReplace({ searchString: Asc.scope.old, replaceString: Asc.scope.st }, Asc.scope.old, Asc.scope.st)
      }, false)
    },
    // 查找并插入占位符
    findAndInsertMarker (data) {
      window.Asc.scope.st = '{{' + data.fieldName + '}}'
      window.Asc.scope.searchStr = data.fieldValue
      window.Asc.plugin.callCommand(function () {
        let oDocument = Api.GetDocument()
        oDocument.SearchAndReplace({ searchString: Asc.scope.searchStr, replaceString: Asc.scope.st }, Asc.scope.searchStr, Asc.scope.st)
      }, false)
    },
    insertPosition (data) {
      if (!selectText) {
        let postData = {
          text: selectText,
          ...data,
          selected: false
        }
        this.sendToParent('addRange', postData)
        return false
      }
      window.Asc.scope.postData = data
      window.Asc.plugin.callCommand(function() {
        let postData = Asc.scope.postData || {}
        let oDoc = Api.GetDocument()
        let oRange = oDoc.GetRangeBySelect()
        let selectText = oRange.GetText()
        let oAllPar = oRange.GetAllParagraphs()
        let oPar = oAllPar[oAllPar.length - 1]
        let parText = oPar.GetText()
        if (oAllPar.length > 1) {
          oRange.AddText(`{{${postData.start}}}`, 'before')
          if (selectText.includes(parText)) {
            let newRange = oPar.GetRange(0, parText.length - 1)
            newRange.AddText(`{{${postData.end}}}`, 'after')
          } else {
            oRange.AddText(`{{${postData.end}}}`, 'after')
          }
        } else {
          let isEnd = parText.substr(0 - selectText.length) === selectText
          isEnd = isEnd || selectText.includes(parText)
          console.log('end = ', isEnd)
          let start = Math.max(parText.indexOf(selectText), 0)
          let end = start + Math.min(parText.length, selectText.length) - 1
          let newRange = oPar.GetRange(start, end)
          oRange.AddText(`{{${postData.start}}}`, 'before')
          newRange.AddText(`{{${postData.end}}}`, 'after')
        }

        postData.selected = true
        postData.text = selectText
        let params = {
          type: 'onExternalFrameMessage',
          method: 'addRange',
          data: postData
        }
        window.top.postMessage(JSON.stringify(params), location.origin)
      })
    },
    deletePosition (data) {
      window.Asc.scope.range = data
      window.Asc.plugin.callCommand(function () {
        let oDocument  = Api.GetDocument()
        let { start, end } = Asc.scope.range
        let markers = [`{{${start}}}`, `{{${end}}}`]
        for (let j = 0; j < markers.length; j++) {
          oDocument.SearchAndReplace({ searchString: markers[j], replaceString: '' }, markers[j], '')
        }
      })
    },
    deletePositionMarker (data) {
      window.Asc.scope.data = data
      window.Asc.plugin.callCommand(function () {
        let oDocument = Api.GetDocument()
        let markers = Asc.scope.data || []
        for (let j = 0; j < markers.length; j++) {
          oDocument.SearchAndReplace({ searchString: markers[j], replaceString: '' }, markers[j], '')
        }
      })
    },
    deletePositionArray (data) {
      window.Asc.scope.data = data
      window.Asc.plugin.callCommand(function () {
        let oDocument = Api.GetDocument()
        let markers = Asc.scope.data || []
        for (let j = 0; j < markers.length; j++) {
          oDocument.SearchAndReplace({ searchString: markers[j], replaceString: '' }, markers[j], '')
        }
      })
    },
    replaceRangePosition (data) {
      window.Asc.scope.list = data
      window.Asc.plugin.callCommand(function () {
        let list = Asc.scope.list || []
        let oDocument = Api.GetDocument()
        list.forEach(row => {
          oDocument.SearchAndReplace({ searchString: row.str, replaceString: row.newStr }, row.str, row.newStr)
        })
      })
    },
    delMarker (data) {
      let fields = []
      data.forEach(item => {
        fields.push({
          text: '{{' + item.fieldFlag + '}}',
          type: 'field'
        })
      })
      window.Asc.scope.st = fields
      window.Asc.plugin.callCommand(function () {
        let oDocument  = Api.GetDocument()
        let markers = Asc.scope.st.slice(0)
        for (let j = 0; j < markers.length; j++) {
          let marker = markers[j]
          if (marker.type === 'field') {
            oDocument.SearchAndReplace({ searchString: marker.text, replaceString: '' })
          }
        }
      })
    },
    delMarkerGroup (data) {
      this.delMarker(data.fields)
    },
    // excel
    insertCellName (field) {
      window.Asc.scope.field = field
      window.Asc.plugin.callCommand(function () {
        let fieldItem = Asc.scope.field
        let sheetObj = Api.GetActiveSheet()
        let sheetName = sheetObj.GetName()
        let oRange = Api.GetSelection()
        let oCount = oRange.GetCount()
        let params = {
          type: 'onExternalFrameMessage',
          method: 'addCellName'
        }
        if (oCount !== 1) {
          params.data = false
        } else {
          let oAddr = oRange.GetAddress(true, true, '', false)
          let sheetFlag = `${sheetName}!${oAddr}`
          // let name = [fieldItem.fieldName, 'DEF', fieldItem.id].join('')
          // let nameObj = sheetObj.GetDefName(name)
          // console.log('inser cell before = ', name, sheetFlag, nameObj)
          // let result = sheetObj.AddDefName(name, sheetFlag)
          // console.log('insert cell ', name, sheetFlag, result)
          fieldItem.fieldFlag = sheetFlag
          fieldItem.$success = oAddr !== ''
          params.data = fieldItem
        }
        window.top.postMessage(JSON.stringify(params), location.origin)
      })
    },
    getFocusedCell () {
      window.Asc.plugin.callCommand(function () {
        let sheetObj = Api.GetActiveSheet()
        let sheetName = sheetObj.GetName()
        let oRange = Api.GetSelection()
        let params = {
          type: 'onExternalFrameMessage',
          method: 'getFocusedCell'
        }
        let oAddr = oRange.GetAddress(true, true, '', false)
        let sheetFlag = `${sheetName}!${oAddr}`
        params.data = sheetFlag
        window.top.postMessage(JSON.stringify(params), location.origin)
      })
    },
    loadFileFlags (data) {
      window.Asc.scope.list = data
      window.Asc.plugin.callCommand(function () {
        let list = Asc.scope.list || []
        let oDocument = Api.GetDocument()
        let oParCount = oDocument.GetElementsCount()
        let dataMap = {}
        for (let i = 0; i < oParCount; i++) {
          let oPar = oDocument.GetElement(i)
          let ctype = oPar.GetClassType()
          if (ctype === 'table') {
            list.forEach(row => {
              let flag = `{{${row.fieldFlag}}}`
              let rs = oPar.Search(flag)
              for (let i = 0; i < rs.length; i++) {
                let oRange = rs[i]
                if (oRange && oRange.GetText() === flag) {
                  if (dataMap[row.id]) {
                    dataMap[row.id] = dataMap[row.id] + 1
                  } else {
                    dataMap[row.id] = 1
                  }
                }
              }
            })
          } else if (ctype === 'paragraph') {
            let oParText = oPar.GetText()
            list.forEach(row => {
              let count = oParText.split(`{{${row.fieldFlag}}}`).length - 1
              if (dataMap[row.id]) {
                dataMap[row.id] = dataMap[row.id] + count
              } else {
                dataMap[row.id] = count
              }
            })
          }
        }
        let params = {
          type: 'onExternalFrameMessage',
          method: 'loadFieldFlagCount',
          data: dataMap
        }
        window.top.postMessage(JSON.stringify(params), location.origin)
      })
    },
    /**
     * data.sheetName: 要聚焦的sheet名称
     * data.cellName: 要聚焦的cell名称,如C1, D3等
     */
    focusCell (data) {
      window.Asc.scope.data = data
      window.Asc.plugin.callCommand(function () {
        const theData = Asc.scope.data
        const theSheet = Api.GetSheet(theData.sheetName || '')
        if (theSheet) {
          theSheet.SetActive()

          const theCell = theSheet.GetRange(theData.cellName || '')
          if (theCell) {
            theCell.Select()
          }
        }
      })
    },

    getSelectedText (data) {
      window.Asc.scope.data = data
      window.Asc.plugin.callCommand(function () {
        const theData = Asc.scope.data
        const oDoc = Api.GetDocument()
        const oRange = oDoc.GetRangeBySelect()
        if (oRange) {
          const oParas = oRange.GetAllParagraphs()
          // 只能选择一个段落,否则认为不成功
          if (oParas.length === 1) {

            const params = {
              type: 'onExternalFrameMessage',
              method: 'getSelectedText',
              data: {
                id: theData.id,
                text: oRange.GetText()
              }
            }
            window.top.postMessage(JSON.stringify(params), location.origin)
          }
        }
      })
    }
  }

  function receiveMessage (e) {
    let data = e.data ? JSON.parse(e.data) : {}
    if (data.type === 'onExternalPluginMessage') {
      switch (data.method) {
        case 'focus':
          EventMap.focusInDocument(data.data)
          break
        case 'focusTable':
          EventMap.focusTableInDoc(data.data)
          break
        case 'insert':
          EventMap.addMarker(data.data)
          break
        case 'addBookMarker':
          EventMap.addBookMarker(data.data)
          break
        case 'delBookMarker':
          EventMap.deleteBookMarker(data.data)
          break
        case 'delLoopApp':
          EventMap.deleteLoopApp(data.data)
          break
        case 'update':
          EventMap.replaceMarker(data.data)
          break
        case 'findAndInsertMarker':
          EventMap.findAndInsertMarker(data.data)
          break
        case 'addRange':
          EventMap.insertPosition(data.data)
          break
        case 'updateRange':
          EventMap.replaceRangePosition(data.data)
          break
        case 'delRange':
          EventMap.deletePosition(data.data)
          break
        case 'delRangeArray':
          EventMap.deletePositionArray(data.data)
          break
        case 'delQuoteGroup':
          EventMap.deletePositionMarker(data.data)
          break
        case 'remove':
          EventMap.delMarker([ data.data ])
          break
        case 'removeQuestion':
          EventMap.delMarkerGroup(data.data)
          break
        // excel
        case 'addCellName':
          EventMap.insertCellName(data.data)
          break
        case 'loadFieldFlagCount':
          EventMap.loadFileFlags(data.data)
          break
        // 聚焦到某个单元格
        case 'focusCell':
          EventMap.focusCell(data.data)
          break
        // 获取当前选中的单元格
        case 'getFocusedCell':
          EventMap.getFocusedCell()
          break
        // 获取当前选中的文字
        case 'getSelectedText':
          EventMap.getSelectedText(data.data)
          break
      }
    }
  }

  window.addEventListener('message', receiveMessage, false)
})(window, undefined)


================================================
FILE: docker/office/bisheng/bisheng.js
================================================
(function () {
    window.Asc.plugin.init = function (e) {}
    window.Asc.plugin.event_onClick = function () {}
    window.Asc.plugin.button = function (id) {}

    function onMessage(e) {
        var data = e.data ? JSON.parse(e.data) : {}
        if (data.action === 'insetMarker') {
            const flag = '{{' + data.data + '}}'
            window.Asc.plugin.executeMethod('PasteText', [flag])
        }
    }

    window.addEventListener('message', onMessage, false)
})()

================================================
FILE: docker/office/bisheng/config.json
================================================
{
  "name": "文档自动化",
  "guid": "asc.{D2A0F3BE-CC8D-4956-BCD9-6CBEA6E8960E}",
  "variations": [
    {
      "description": "插入label-配置",
      "url": "index.html",
      "icons": [
        "icon.png",
        "icon.png",
        "icon.png",
        "icon.png"
      ],
      "EditorsSupport": [
        "word",
        "cell",
        "slide"
      ],
      "isViewer": false,
      "isVisual": false,
      "isModal": true,
      "isInsideMode": false,
      "isSystem": false,
      "initOnSelectionChanged": true,
      "hideClose": true,
      "initDataType": "text",
      "isDisplayedInViewer": true,
      "isUpdateOleOnResize": true,
      "events": [
        "onClick",
        "onTargetPositionChanged"
      ]
    }
  ]
}

================================================
FILE: docker/office/bisheng/index.html
================================================
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <script src="../pluginBase.js"></script>
    <script src="./bisheng.js"></script>
</head>
<body>
</body>
</html>

================================================
FILE: docker/redis/redis.conf
================================================
# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

################################## INCLUDES ###################################

# Include one or more other config files here.  This is useful if you
# have a standard template that goes to all Redis servers but also need
# to customize a few per-server settings.  Include files can include
# other files, so use this wisely.
#
# Note that option "include" won't be rewritten by command "CONFIG REWRITE"
# from admin or Redis Sentinel. Since Redis always uses the last processed
# line as value of a configuration directive, you'd better put includes
# at the beginning of this file to avoid overwriting config change at runtime.
#
# If instead you are interested in using includes to override configuration
# options, it is better to use include as the last line.
#
# Included paths may contain wildcards. All files matching the wildcards will
# be included in alphabetical order.
# Note that if an include path contains a wildcards but no files match it when
# the server is started, the include statement will be ignored and no error will
# be emitted.  It is safe, therefore, to include wildcard files from empty
# directories.
#
# include /path/to/local.conf
# include /path/to/other.conf
# include /path/to/fragments/*.conf
#

################################## MODULES #####################################

# Load modules at startup. If the server is not able to load modules
# it will abort. It is possible to use multiple loadmodule directives.
#
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so

################################## NETWORK #####################################

# By default, if no "bind" configuration directive is specified, Redis listens
# for connections from all available network interfaces on the host machine.
# It is possible to listen to just one or multiple selected interfaces using
# the "bind" configuration directive, followed by one or more IP addresses.
# Each address can be prefixed by "-", which means that redis will not fail to
# start if the address is not available. Being not available only refers to
# addresses that does not correspond to any network interface. Addresses that
# are already in use will always fail, and unsupported protocols will always BE
# silently skipped.
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1     # listens on two specific IPv4 addresses
# bind 127.0.0.1 ::1              # listens on loopback IPv4 and IPv6
# bind * -::*                     # like the default, all available interfaces
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only on the
# IPv4 and IPv6 (if available) loopback interface addresses (this means Redis
# will only be able to accept client connections from the same host that it is
# running on).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# COMMENT OUT THE FOLLOWING LINE.
#
# You will also need to set a password unless you explicitly disable protected
# mode.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# bind 127.0.0.1 -::1

# By default, outgoing connections (from replica to master, from Sentinel to
# instances, cluster bus, etc.) are not bound to a specific local address. In
# most cases, this means the operating system will handle that based on routing
# and the interface through which the connection goes out.
#
# Using bind-source-addr it is possible to configure a specific address to bind
# to, which may also affect how the connection gets routed.
#
# Example:
#
# bind-source-addr 10.0.0.1

# Protected mode is a layer of security protection, in order to avoid that
# Redis instances left open on the internet are accessed and exploited.
#
# When protected mode is on and the default user has no password, the server
# only accepts local connections from the IPv4 address (127.0.0.1), IPv6 address
# (::1) or Unix domain sockets.
#
# By default protected mode is enabled. You should disable it only if
# you are sure you want clients from other hosts to connect to Redis
# even if no authentication is configured.
protected-mode no

# Redis uses default hardened security configuration directives to reduce the
# attack surface on innocent users. Therefore, several sensitive configuration
# directives are immutable, and some potentially-dangerous commands are blocked.
#
# Configuration directives that control files that Redis writes to (e.g., 'dir'
# and 'dbfilename') and that aren't usually modified during runtime
# are protected by making them immutable.
#
# Commands that can increase the attack surface of Redis and that aren't usually
# called by users are blocked by default.
#
# These can be exposed to either all connections or just local ones by setting
# each of the configs listed below to either of these values:
#
# no    - Block for any connection (remain immutable)
# yes   - Allow for any connection (no protection)
# local - Allow only for local connections. Ones originating from the
#         IPv4 address (127.0.0.1), IPv6 address (::1) or Unix domain sockets.
#
# enable-protected-configs no
# enable-debug-command no
# enable-module-command no

# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379

# TCP listen() backlog.
#
# In high requests-per-second environments you need a high backlog in order
# to avoid slow clients connection issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
tcp-backlog 511

# Unix socket.
#
# Specify the path for the Unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
# on a unix socket when not specified.
#
# unixsocket /run/redis.sock
# unixsocketperm 700

# Close the connection after a client is idle for N seconds (0 to disable)
timeout 0

# TCP keepalive.
#
# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence
# of communication. This is useful for two reasons:
#
# 1) Detect dead peers.
# 2) Force network equipment in the middle to consider the connection to be
#    alive.
#
# On Linux, the specified value (in seconds) is the period used to send ACKs.
# Note that to close the connection the double of the time is needed.
# On other kernels the period depends on the kernel configuration.
#
# A reasonable value for this option is 300 seconds, which is the new
# Redis default starting with Redis 3.2.1.
tcp-keepalive 300

# Apply OS-specific mechanism to mark the listening socket with the specified
# ID, to support advanced routing and filtering capabilities.
#
# On Linux, the ID represents a connection mark.
# On FreeBSD, the ID represents a socket cookie ID.
# On OpenBSD, the ID represents a route table ID.
#
# The default value is 0, which implies no marking is required.
# socket-mark-id 0

################################# TLS/SSL #####################################

# By default, TLS/SSL is disabled. To enable it, the "tls-port" configuration
# directive can be used to define TLS-listening ports. To enable TLS on the
# default port, use:
#
# port 0
# tls-port 6379

# Configure a X.509 certificate and private key to use for authenticating the
# server to connected clients, masters or cluster peers.  These files should be
# PEM formatted.
#
# tls-cert-file redis.crt
# tls-key-file redis.key
#
# If the key file is encrypted using a passphrase, it can be included here
# as well.
#
# tls-key-file-pass secret

# Normally Redis uses the same certificate for both server functions (accepting
# connections) and client functions (replicating from a master, establishing
# cluster bus connections, etc.).
#
# Sometimes certificates are issued with attributes that designate them as
# client-only or server-only certificates. In that case it may be desired to use
# different certificates for incoming (server) and outgoing (client)
# connections. To do that, use the following directives:
#
# tls-client-cert-file client.crt
# tls-client-key-file client.key
#
# If the key file is encrypted using a passphrase, it can be included here
# as well.
#
# tls-client-key-file-pass secret

# Configure a DH parameters file to enable Diffie-Hellman (DH) key exchange,
# required by older versions of OpenSSL (<3.0). Newer versions do not require
# this configuration and recommend against it.
#
# tls-dh-params-file redis.dh

# Configure a CA certificate(s) bundle or directory to authenticate TLS/SSL
# clients and peers.  Redis requires an explicit configuration of at least one
# of these, and will not implicitly use the system wide configuration.
#
# tls-ca-cert-file ca.crt
# tls-ca-cert-dir /etc/ssl/certs

# By default, clients (including replica servers) on a TLS port are required
# to authenticate using valid client side certificates.
#
# If "no" is specified, client certificates are not required and not accepted.
# If "optional" is specified, client certificates are accepted and must be
# valid if provided, but are not required.
#
# tls-auth-clients no
# tls-auth-clients optional

# By default, a Redis replica does not attempt to establish a TLS connection
# with its master.
#
# Use the following directive to enable TLS on replication links.
#
# tls-replication yes

# By default, the Redis Cluster bus uses a plain TCP connection. To enable
# TLS for the bus protocol, use the following directive:
#
# tls-cluster yes

# By default, only TLSv1.2 and TLSv1.3 are enabled and it is highly recommended
# that older formally deprecated versions are kept disabled to reduce the attack surface.
# You can explicitly specify TLS versions to support.
# Allowed values are case insensitive and include "TLSv1", "TLSv1.1", "TLSv1.2",
# "TLSv1.3" (OpenSSL >= 1.1.1) or any combination.
# To enable only TLSv1.2 and TLSv1.3, use:
#
# tls-protocols "TLSv1.2 TLSv1.3"

# Configure allowed ciphers.  See the ciphers(1ssl) manpage for more information
# about the syntax of this string.
#
# Note: this configuration applies only to <= TLSv1.2.
#
# tls-ciphers DEFAULT:!MEDIUM

# Configure allowed TLSv1.3 ciphersuites.  See the ciphers(1ssl) manpage for more
# information about the syntax of this string, and specifically for TLSv1.3
# ciphersuites.
#
# tls-ciphersuites TLS_CHACHA20_POLY1305_SHA256

# When choosing a cipher, use the server's preference instead of the client
# preference. By default, the server follows the client's preference.
#
# tls-prefer-server-ciphers yes

# By default, TLS session caching is enabled to allow faster and less expensive
# reconnections by clients that support it. Use the following directive to disable
# caching.
#
# tls-session-caching no

# Change the default number of TLS sessions cached. A zero value sets the cache
# to unlimited size. The default size is 20480.
#
# tls-session-cache-size 5000

# Change the default timeout of cached TLS sessions. The default timeout is 300
# seconds.
#
# tls-session-cache-timeout 60

################################# GENERAL #####################################

# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
# When Redis is supervised by upstart or systemd, this parameter has no impact.
daemonize no

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#                        requires "expect stop" in your upstart job config
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#                        on startup, and updating Redis status on a regular
#                        basis.
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous pings back to your supervisor.
#
# The default is "no". To run under upstart/systemd, you can simply uncomment
# the line below:
#
# supervised auto

# If a pid file is specified, Redis writes it where specified at startup
# and removes it at exit.
#
# When the server runs non daemonized, no pid file is created if none is
# specified in the configuration. When the server is daemonized, the pid file
# is used even if not specified, defaulting to "/var/run/redis.pid".
#
# Creating a pid file is best effort: if Redis is not able to create it
# nothing bad happens, the server will start and run normally.
#
# Note that on modern Linux systems "/run/redis.pid" is more conforming
# and should be used instead.
pidfile /var/run/redis_6379.pid

# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice

# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
logfile ""

# To enable logging to the system logger, just set 'syslog-enabled' to yes,
# and optionally update the other syslog parameters to suit your needs.
# syslog-enabled no

# Specify the syslog identity.
# syslog-ident redis

# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7.
# syslog-facility local0

# To disable the built in crash log, which will possibly produce cleaner core
# dumps when they are needed, uncomment the following:
#
# crash-log-enabled no

# To disable the fast memory check that's run as part of the crash log, which
# will possibly let redis terminate sooner, uncomment the following:
#
# crash-memcheck-enabled no

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

# By default Redis shows an ASCII art logo only when started to log to the
# standard output and if the standard output is a TTY and syslog logging is
# disabled. Basically this means that normally a logo is displayed only in
# interactive sessions.
#
# However it is possible to force the pre-4.0 behavior and always show a
# ASCII art logo in startup logs by setting the following option to yes.
always-show-logo no

# By default, Redis modifies the process title (as seen in 'top' and 'ps') to
# provide some runtime information. It is possible to disable this and leave
# the process name as executed by setting the following to no.
set-proc-title yes

# When changing the process title, Redis uses the following template to construct
# the modified title.
#
# Template variables are specified in curly brackets. The following variables are
# supported:
#
# {title}           Name of process as executed if parent, or type of child process.
# {listen-addr}     Bind address or '*' followed by TCP or TLS port listening on, or
#                   Unix socket if only that's available.
# {server-mode}     Special mode, i.e. "[sentinel]" or "[cluster]".
# {port}            TCP port listening on, or 0.
# {tls-port}        TLS port listening on, or 0.
# {unixsocket}      Unix domain socket listening on, or "".
# {config-file}     Name of configuration file used.
#
proc-title-template "{title} {listen-addr} {server-mode}"

################################ SNAPSHOTTING  ################################

# Save the DB to disk.
#
# save <seconds> <changes> [<seconds> <changes> ...]
#
# Redis will save the DB if the given number of seconds elapsed and it
# surpassed the given number of write operations against the DB.
#
# Snapshotting can be completely disabled with a single empty string argument
# as in following example:
#
# save ""
#
# Unless specified otherwise, by default Redis will save the DB:
#   * After 3600 seconds (an hour) if at least 1 change was performed
#   * After 300 seconds (5 minutes) if at least 100 changes were performed
#   * After 60 seconds if at least 10000 changes were performed
#
# You can set these explicitly by uncommenting the following line.
#
# save 3600 1 300 100 60 10000

# By default Redis will stop accepting writes if RDB snapshots are enabled
# (at least one save point) and the latest background save failed.
# This will make the user aware (in a hard way) that data is not persisting
# on disk properly, otherwise chances are that no one will notice and some
# disaster will happen.
#
# If the background saving process will start working again Redis will
# automatically allow writes again.
#
# However if you have setup your proper monitoring of the Redis server
# and persistence, you may want to disable this feature so that Redis will
# continue to work as usual even if there are problems with disk,
# permissions, and so forth.
stop-writes-on-bgsave-error yes

# Compress string objects using LZF when dump .rdb databases?
# By default compression is enabled as it's almost always a win.
# If you want to save some CPU in the saving child set it to 'no' but
# the dataset will likely be bigger if you have compressible values or keys.
rdbcompression yes

# Since version 5 of RDB a CRC64 checksum is placed at the end of the file.
# This makes the format more resistant to corruption but there is a performance
# hit to pay (around 10%) when saving and loading RDB files, so you can disable it
# for maximum performances.
#
# RDB files created with checksum disabled have a checksum of zero that will
# tell the loading code to skip the check.
rdbchecksum yes

# Enables or disables full sanitization checks for ziplist and listpack etc when
# loading an RDB or RESTORE payload. This reduces the chances of a assertion or
# crash later on while processing commands.
# Options:
#   no         - Never perform full sanitization
#   yes        - Always perform full sanitization
#   clients    - Perform full sanitization only for user connections.
#                Excludes: RDB files, RESTORE commands received from the master
#                connection, and client connections which have the
#                skip-sanitize-payload ACL flag.
# The default should be 'clients' but since it currently affects cluster
# resharding via MIGRATE, it is temporarily set to 'no' by default.
#
# sanitize-dump-payload no

# The filename where to dump the DB
dbfilename dump.rdb

# Remove RDB files used by replication in instances without persistence
# enabled. By default this option is disabled, however there are environments
# where for regulations or other security concerns, RDB files persisted on
# disk by masters in order to feed replicas, or stored on disk by replicas
# in order to load them for the initial synchronization, should be deleted
# ASAP. Note that this option ONLY WORKS in instances that have both AOF
# and RDB persistence disabled, otherwise is completely ignored.
#
# An alternative (and sometimes better) way to obtain the same effect is
# to use diskless replication on both master and replicas instances. However
# in the case of replicas, diskless is not always an option.
rdb-del-sync-files no

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir ./

################################# REPLICATION #################################

# Master-Replica replication. Use replicaof to make a Redis instance a copy of
# another Redis server. A few things to understand ASAP about Redis replication.
#
#   +------------------+      +---------------+
#   |      Master      | ---> |    Replica    |
#   | (receive writes) |      |  (exact copy) |
#   +------------------+      +---------------+
#
# 1) Redis replication is asynchronous, but you can configure a master to
#    stop accepting writes if it appears to be not connected with at least
#    a given number of replicas.
# 2) Redis replicas are able to perform a partial resynchronization with the
#    master if the replication link is lost for a relatively small amount of
#    time. You may want to configure the replication backlog size (see the next
#    sections of this file) with a sensible value depending on your needs.
# 3) Replication is automatic and does not need user intervention. After a
#    network partition replicas automatically try to reconnect to masters
#    and resynchronize with them.
#
# replicaof <masterip> <masterport>

# If the master is password protected (using the "requirepass" configuration
# directive below) it is possible to tell the replica to authenticate before
# starting the replication synchronization process, otherwise the master will
# refuse the replica request.
#
# masterauth <master-password>
#
# However this is not enough if you are using Redis ACLs (for Redis version
# 6 or greater), and the default user is not capable of running the PSYNC
# command and/or other commands needed for replication. In this case it's
# better to configure a special user to use with replication, and specify the
# masteruser configuration as such:
#
# masteruser <username>
#
# When masteruser is specified, the replica will authenticate against its
# master using the new AUTH form: AUTH <username> <password>.

# When a replica loses its connection with the master, or when the replication
# is still in progress, the replica can act in two different ways:
#
# 1) if replica-serve-stale-data is set to 'yes' (the default) the replica will
#    still reply to client requests, possibly with out of date data, or the
#    data set may just be empty if this is the first synchronization.
#
# 2) If replica-serve-stale-data is set to 'no' the replica will reply with error
#    "MASTERDOWN Link with MASTER is down and replica-serve-stale-data is set to 'no'"
#    to all data access commands, excluding commands such as:
#    INFO, REPLICAOF, AUTH, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE,
#    UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST,
#    HOST and LATENCY.
#
replica-serve-stale-data yes

# You can configure a replica instance to accept writes or not. Writing against
# a replica instance may be useful to store some ephemeral data (because data
# written on a replica will be easily deleted after resync with the master) but
# may also cause problems if clients are writing to it because of a
# misconfiguration.
#
# Since Redis 2.6 by default replicas are read-only.
#
# Note: read only replicas are not designed to be exposed to untrusted clients
# on the internet. It's just a protection layer against misuse of the instance.
# Still a read only replica exports by default all the administrative commands
# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve
# security of read only replicas using 'rename-command' to shadow all the
# administrative / dangerous commands.
replica-read-only yes

# Replication SYNC strategy: disk or socket.
#
# New replicas and reconnecting replicas that are not able to continue the
# replication process just receiving differences, need to do what is called a
# "full synchronization". An RDB file is transmitted from the master to the
# replicas.
#
# The transmission can happen in two different ways:
#
# 1) Disk-backed: The Redis master creates a new process that writes the RDB
#                 file on disk. Later the file is transferred by the parent
#                 process to the replicas incrementally.
# 2) Diskless: The Redis master creates a new process that directly writes the
#              RDB file to replica sockets, without touching the disk at all.
#
# With disk-backed replication, while the RDB file is generated, more replicas
# can be queued and served with the RDB file as soon as the current child
# producing the RDB file finishes its work. With diskless replication instead
# once the transfer starts, new replicas arriving will be queued and a new
# transfer will start when the current one terminates.
#
# When diskless replication is used, the master waits a configurable amount of
# time (in seconds) before starting the transfer in the hope that multiple
# replicas will arrive and the transfer can be parallelized.
#
# With slow disks and fast (large bandwidth) networks, diskless replication
# works better.
repl-diskless-sync yes

# When diskless replication is enabled, it is possible to configure the delay
# the server waits in order to spawn the child that transfers the RDB via socket
# to the replicas.
#
# This is important since once the transfer starts, it is not possible to serve
# new replicas arriving, that will be queued for the next RDB transfer, so the
# server waits a delay in order to let more replicas arrive.
#
# The delay is specified in seconds, and by default is 5 seconds. To disable
# it entirely just set it to 0 seconds and the transfer will start ASAP.
repl-diskless-sync-delay 5

# When diskless replication is enabled with a delay, it is possible to let
# the replication start before the maximum delay is reached if the maximum
# number of replicas expected have connected. Default of 0 means that the
# maximum is not defined and Redis will wait the full delay.
repl-diskless-sync-max-replicas 0

# -----------------------------------------------------------------------------
# WARNING: RDB diskless load is experimental. Since in this setup the replica
# does not immediately store an RDB on disk, it may cause data loss during
# failovers. RDB diskless load + Redis modules not handling I/O reads may also
# cause Redis to abort in case of I/O errors during the initial synchronization
# stage with the master. Use only if you know what you are doing.
# -----------------------------------------------------------------------------
#
# Replica can load the RDB it reads from the replication link directly from the
# socket, or store the RDB to a file and read that file after it was completely
# received from the master.
#
# In many cases the disk is slower than the network, and storing and loading
# the RDB file may increase replication time (and even increase the master's
# Copy on Write memory and replica buffers).
# However, parsing the RDB file directly from the socket may mean that we have
# to flush the contents of the current database before the full rdb was
# received. For this reason we have the following options:
#
# "disabled"    - Don't use diskless load (store the rdb file to the disk first)
# "on-empty-db" - Use diskless load only when it is completely safe.
# "swapdb"      - Keep current db contents in RAM while parsing the data directly
#                 from the socket. Replicas in this mode can keep serving current
#                 data set while replication is in progress, except for cases where
#                 they can't recognize master as having a data set from same
#                 replication history.
#                 Note that this requires sufficient memory, if you don't have it,
#                 you risk an OOM kill.
repl-diskless-load disabled

# Master send PINGs to its replicas in a predefined interval. It's possible to
# change this interval with the repl_ping_replica_period option. The default
# value is 10 seconds.
#
# repl-ping-replica-period 10

# The following option sets the replication timeout for:
#
# 1) Bulk transfer I/O during SYNC, from the point of view of replica.
# 2) Master timeout from the point of view of replicas (data, pings).
# 3) Replica timeout from the point of view of masters (REPLCONF ACK pings).
#
# It is important to make sure that this value is greater than the value
# specified for repl-ping-replica-period otherwise a timeout will be detected
# every time there is low traffic between the master and the replica. The default
# value is 60 seconds.
#
# repl-timeout 60

# Disable TCP_NODELAY on the replica socket after SYNC?
#
# If you select "yes" Redis will use a smaller number of TCP packets and
# less bandwidth to send data to replicas. But this can add a delay for
# the data to appear on the replica side, up to 40 milliseconds with
# Linux kernels using a default configuration.
#
# If you select "no" the delay for data to appear on the replica side will
# be reduced but more bandwidth will be used for replication.
#
# By default we optimize for low latency, but in very high traffic conditions
# or when the master and replicas are many hops away, turning this to "yes" may
# be a good idea.
repl-disable-tcp-nodelay no

# Set the replication backlog size. The backlog is a buffer that accumulates
# replica data when replicas are disconnected for some time, so that when a
# replica wants to reconnect again, often a full resync is not needed, but a
# partial resync is enough, just passing the portion of data the replica
# missed while disconnected.
#
# The bigger the replication backlog, the longer the replica can endure the
# disconnect and later be able to perform a partial resynchronization.
#
# The backlog is only allocated if there is at least one replica connected.
#
# repl-backlog-size 1mb

# After a master has no connected replicas for some time, the backlog will be
# freed. The following option configures the amount of seconds that need to
# elapse, starting from the time the last replica disconnected, for the backlog
# buffer to be freed.
#
# Note that replicas never free the backlog for timeout, since they may be
# promoted to masters later, and should be able to correctly "partially
# resynchronize" with other replicas: hence they should always accumulate backlog.
#
# A value of 0 means to never release the backlog.
#
# repl-backlog-ttl 3600

# The replica priority is an integer number published by Redis in the INFO
# output. It is used by Redis Sentinel in order to select a replica to promote
# into a master if the master is no longer working correctly.
#
# A replica with a low priority number is considered better for promotion, so
# for instance if there are three replicas with priority 10, 100, 25 Sentinel
# will pick the one with priority 10, that is the lowest.
#
# However a special priority of 0 marks the replica as not able to perform the
# role of master, so a replica with priority of 0 will never be selected by
# Redis Sentinel for promotion.
#
# By default the priority is 100.
replica-priority 100

# The propagation error behavior controls how Redis will behave when it is
# unable to handle a command being processed in the replication stream from a master
# or processed while reading from an AOF file. Errors that occur during propagation
# are unexpected, and can cause data inconsistency. However, there are edge cases
# in earlier versions of Redis where it was possible for the server to replicate or persist
# commands that would fail on future versions. For this reason the default behavior
# is to ignore such errors and continue processing commands.
#
# If an application wants to ensure there is no data divergence, this configuration
# should be set to 'panic' instead. The value can also be set to 'panic-on-replicas'
# to only panic when a replica encounters an error on the replication stream. One of
# these two panic values will become the default value in the future once there are
# sufficient safety mechanisms in place to prevent false positive crashes.
#
# propagation-error-behavior ignore

# Replica ignore disk write errors controls the behavior of a replica when it is
# unable to persist a write command received from its master to disk. By default,
# this configuration is set to 'no' and will crash the replica in this condition.
# It is not recommended to change this default, however in order to be compatible
# with older versions of Redis this config can be toggled to 'yes' which will just
# log a warning and execute the write command it got from the master.
#
# replica-ignore-disk-write-errors no

# -----------------------------------------------------------------------------
# By default, Redis Sentinel includes all replicas in its reports. A replica
# can be excluded from Redis Sentinel's announcements. An unannounced replica
# will be ignored by the 'sentinel replicas <master>' command and won't be
# exposed to Redis Sentinel's clients.
#
# This option does not change the behavior of replica-priority. Even with
# replica-announced set to 'no', the replica can be promoted to master. To
# prevent this behavior, set replica-priority to 0.
#
# replica-announced yes

# It is possible for a master to stop accepting writes if there are less than
# N replicas connected, having a lag less or equal than M seconds.
#
# The N replicas need to be in "online" state.
#
# The lag in seconds, that must be <= the specified value, is calculated from
# the last ping received from the replica, that is usually sent every second.
#
# This option does not GUARANTEE that N replicas will accept the write, but
# will limit the window of exposure for lost writes in case not enough replicas
# are available, to the specified number of seconds.
#
# For example to require at least 3 replicas with a lag <= 10 seconds use:
#
# min-replicas-to-write 3
# min-replicas-max-lag 10
#
# Setting one or the other to 0 disables the feature.
#
# By default min-replicas-to-write is set to 0 (feature disabled) and
# min-replicas-max-lag is set to 10.

# A Redis master is able to list the address and port of the attached
# replicas in different ways. For example the "INFO replication" section
# offers this information, which is used, among other tools, by
# Redis Sentinel in order to discover replica instances.
# Another place where this info is available is in the output of the
# "ROLE" command of a master.
#
# The listed IP address and port normally reported by a replica is
# obtained in the following way:
#
#   IP: The address is auto detected by checking the peer address
#   of the socket used by the replica to connect with the master.
#
#   Port: The port is communicated by the replica during the replication
#   handshake, and is normally the port that the replica is using to
#   listen for connections.
#
# However when port forwarding or Network Address Translation (NAT) is
# used, the replica may actually be reachable via different IP and port
# pairs. The following two options can be used by a replica in order to
# report to its master a specific set of IP and port, so that both INFO
# and ROLE will report those values.
#
# There is no need to use both the options if you need to override just
# the port or the IP address.
#
# replica-announce-ip 5.5.5.5
# replica-announce-port 1234

############################### KEYS TRACKING #################################

# Redis implements server assisted support for client side caching of values.
# This is implemented using an invalidation table that remembers, using
# a radix key indexed by key name, what clients have which keys. In turn
# this is used in order to send invalidation messages to clients. Please
# check this page to understand more about the feature:
#
#   https://redis.io/topics/client-side-caching
#
# When tracking is enabled for a client, all the read only queries are assumed
# to be cached: this will force Redis to store information in the invalidation
# table. When keys are modified, such information is flushed away, and
# invalidation messages are sent to the clients. However if the workload is
# heavily dominated by reads, Redis could use more and more memory in order
# to track the keys fetched by many clients.
#
# For this reason it is possible to configure a maximum fill value for the
# invalidation table. By default it is set to 1M of keys, and once this limit
# is reached, Redis will start to evict keys in the invalidation table
# even if they were not modified, just to reclaim memory: this will in turn
# force the clients to invalidate the cached values. Basically the table
# maximum size is a trade off between the memory you want to spend server
# side to track information about who cached what, and the ability of clients
# to retain cached objects in memory.
#
# If you set the value to 0, it means there are no limits, and Redis will
# retain as many keys as needed in the invalidation table.
# In the "stats" INFO section, you can find information about the number of
# keys in the invalidation table at every given moment.
#
# Note: when key tracking is used in broadcasting mode, no memory is used
# in the server side so this setting is useless.
#
# tracking-table-max-keys 1000000

################################## SECURITY ###################################

# Warning: since Redis is pretty fast, an outside user can try up to
# 1 million passwords per second against a modern box. This means that you
# should use very strong passwords, otherwise they will be very easy to break.
# Note that because the password is really a shared secret between the client
# and the server, and should not be memorized by any human, the password
# can be easily a long string from /dev/urandom or whatever, so by using a
# long and unguessable password no brute force attack will be possible.

# Redis ACL users are defined in the following format:
#
#   user <username> ... acl rules ...
#
# For example:
#
#   user worker +@list +@connection ~jobs:* on >ffa9203c493aa99
#
# The special username "default" is used for new connections. If this user
# has the "nopass" rule, then new connections will be immediately authenticated
# as the "default" user without the need of any password provided via the
# AUTH command. Otherwise if the "default" user is not flagged with "nopass"
# the connections will start in not authenticated state, and will require
# AUTH (or the HELLO command AUTH option) in order to be authenticated and
# start to work.
#
# The ACL rules that describe what a user can do are the following:
#
#  on           Enable the user: it is possible to authenticate as this user.
#  off          Disable the user: it's no longer possible to authenticate
#               with this user, however the already authenticated connections
#               will still work.
#  skip-sanitize-payload    RESTORE dump-payload sanitization is skipped.
#  sanitize-payload         RESTORE dump-payload is sanitized (default).
#  +<command>   Allow the execution of that command.
#               May be used with `|` for allowing subcommands (e.g "+config|get")
#  -<command>   Disallow the execution of that command.
#               May be used with `|` for blocking subcommands (e.g "-config|set")
#  +@<category> Allow the execution of all the commands in such category
#               with valid categories are like @admin, @set, @sortedset, ...
#               and so forth, see the full list in the server.c file where
#               the Redis command table is described and defined.
#               The special category @all means all the commands, but currently
#               present in the server, and that will be loaded in the future
#               via modules.
#  +<command>|first-arg  Allow a specific first argument of an otherwise
#                        disabled command. It is only supported on commands with
#                        no sub-commands, and is not allowed as negative form
#                        like -SELECT|1, only additive starting with "+". This
#                        feature is deprecated and may be removed in the future.
#  allcommands  Alias for +@all. Note that it implies the ability to execute
#               all the future commands loaded via the modules system.
#  nocommands   Alias for -@all.
#  ~<pattern>   Add a pattern of keys that can be mentioned as part of
#               commands. For instance ~* allows all the keys. The pattern
#               is a glob-style pattern like the one of KEYS.
#               It is possible to specify multiple patterns.
# %R~<pattern>  Add key read pattern that specifies which keys can be read
#               from.
# %W~<pattern>  Add key write pattern that specifies which keys can be
#               written to.
#  allkeys      Alias for ~*
#  resetkeys    Flush the list of allowed keys patterns.
#  &<pattern>   Add a glob-style pattern of Pub/Sub channels that can be
#               accessed by the user. It is possible to specify multiple channel
#               patterns.
#  allchannels  Alias for &*
#  resetchannels            Flush the list of allowed channel patterns.
#  ><password>  Add this password to the list of valid password for the user.
#               For example >mypass will add "mypass" to the list.
#               This directive clears the "nopass" flag (see later).
#  <<password>  Remove this password from the list of valid passwords.
#  nopass       All the set passwords of the user are removed, and the user
#               is flagged as requiring no password: it means that every
#               password will work against this user. If this directive is
#               used for the default user, every new connection will be
#               immediately authenticated with the default user without
#               any explicit AUTH command required. Note that the "resetpass"
#               directive will clear this condition.
#  resetpass    Flush the list of allowed passwords. Moreover removes the
#               "nopass" status. After "resetpass" the user has no associated
#               passwords and there is no way to authenticate without adding
#               some password (or setting it as "nopass" later).
#  reset        Performs the following actions: resetpass, resetkeys, off,
#               -@all. The user returns to the same state it has immediately
#               after its creation.
# (<options>)   Create a new selector with the options specified within the
#               parentheses and attach it to the user. Each option should be
#               space separated. The first character must be ( and the last
#               character must be ).
# clearselectors            Remove all of the currently attached selectors.
#                           Note this does not change the "root" user permissions,
#                           which are the permissions directly applied onto the
#                           user (outside the parentheses).
#
# ACL rules can be specified in any order: for instance you can start with
# passwords, then flags, or key patterns. However note that the additive
# and subtractive rules will CHANGE MEANING depending on the ordering.
# For instance see the following example:
#
#   user alice on +@all -DEBUG ~* >somepassword
#
# This will allow "alice" to use all the commands with the exception of the
# DEBUG command, since +@all added all the commands to the set of the commands
# alice can use, and later DEBUG was removed. However if we invert the order
# of two ACL rules the result will be different:
#
#   user alice on -DEBUG +@all ~* >somepassword
#
# Now DEBUG was removed when alice had yet no commands in the set of allowed
# commands, later all the commands are added, so the user will be able to
# execute everything.
#
# Basically ACL rules are processed left-to-right.
#
# The following is a list of command categories and their meanings:
# * keyspace - Writing or reading from keys, databases, or their metadata
#     in a type agnostic way. Includes DEL, RESTORE, DUMP, RENAME, EXISTS, DBSIZE,
#     KEYS, EXPIRE, TTL, FLUSHALL, etc. Commands that may modify the keyspace,
#     key or metadata will also have `write` category. Commands that only read
#     the keyspace, key or metadata will have the `read` category.
# * read - Reading from keys (values or metadata). Note that commands that don't
#     interact with keys, will not have either `read` or `write`.
# * write - Writing to keys (values or metadata)
# * admin - Administrative commands. Normal applications will never need to use
#     these. Includes REPLICAOF, CONFIG, DEBUG, SAVE, MONITOR, ACL, SHUTDOWN, etc.
# * dangerous - Potentially dangerous (each should be considered with care for
#     various reasons). This includes FLUSHALL, MIGRATE, RESTORE, SORT, KEYS,
#     CLIENT, DEBUG, INFO, CONFIG, SAVE, REPLICAOF, etc.
# * connection - Commands affecting the connection or other connections.
#     This includes AUTH, SELECT, COMMAND, CLIENT, ECHO, PING, etc.
# * blocking - Potentially blocking the connection until released by another
#     command.
# * fast - Fast O(1) commands. May loop on the number of arguments, but not the
#     number of elements in the key.
# * slow - All commands that are not Fast.
# * pubsub - PUBLISH / SUBSCRIBE related
# * transaction - WATCH / MULTI / EXEC related commands.
# * scripting - Scripting related.
# * set - Data type: sets related.
# * sortedset - Data type: zsets related.
# * list - Data type: lists related.
# * hash - Data type: hashes related.
# * string - Data type: strings related.
# * bitmap - Data type: bitmaps related.
# * hyperloglog - Data type: hyperloglog related.
# * geo - Data type: geo related.
# * stream - Data type: streams related.
#
# For more information about ACL configuration please refer to
# the Redis web site at https://redis.io/topics/acl

# ACL LOG
#
# The ACL Log tracks failed commands and authentication events associated
# with ACLs. The ACL Log is useful to troubleshoot failed commands blocked
# by ACLs. The ACL Log is stored in memory. You can reclaim memory with
# ACL LOG RESET. Define the maximum entry length of the ACL Log below.
acllog-max-len 128

# Using an external ACL file
#
# Instead of configuring users here in this file, it is possible to use
# a stand-alone file just listing users. The two methods cannot be mixed:
# if you configure users here and at the same time you activate the external
# ACL file, the server will refuse to start.
#
# The format of the external ACL user file is exactly the same as the
# format that is used inside redis.conf to describe users.
#
# aclfile /etc/redis/users.acl

# IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatibility
# layer on top of the new ACL system. The option effect will be just setting
# the password for the default user. Clients will still authenticate using
# AUTH <password> as usually, or more explicitly with AUTH default <password>
# if they follow the new protocol: both will work.
#
# The requirepass is not compatible with aclfile option and the ACL LOAD
# command, these will cause requirepass to be ignored.
#
# requirepass foobared

# New users are initialized with restrictive permissions by default, via the
# equivalent of this ACL rule 'off resetkeys -@all'. Starting with Redis 6.2, it
# is possible to manage access to Pub/Sub channels with ACL rules as well. The
# default Pub/Sub channels permission if new users is controlled by the
# acl-pubsub-default configuration directive, which accepts one of these values:
#
# allchannels: grants access to all Pub/Sub channels
# resetchannels: revokes access to all Pub/Sub channels
#
# From Redis 7.0, acl-pubsub-default defaults to 'resetchannels' permission.
#
# acl-pubsub-default resetchannels

# Command renaming (DEPRECATED).
#
# ------------------------------------------------------------------------
# WARNING: avoid using this option if possible. Instead use ACLs to remove
# commands from the default user, and put them only in some admin user you
# create for administrative purposes.
# ------------------------------------------------------------------------
#
# It is possible to change the name of dangerous commands in a shared
# environment. For instance the CONFIG command may be renamed into something
# hard to guess so that it will still be available for internal-use tools
# but not available for general clients.
#
# Example:
#
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
#
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
# rename-command CONFIG ""
#
# Please note that changing the name of commands that are logged into the
# AOF file or transmitted to replicas may cause problems.

################################### CLIENTS ####################################

# Set the max number of connected clients at the same time. By default
# this limit is set to 10000 clients, however if the Redis server is not
# able to configure the process file limit to allow for the specified limit
# the max number of allowed clients is set to the current file limit
# minus 32 (as Redis reserves a few file descriptors for internal uses).
#
# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
#
# IMPORTANT: When Redis Cluster is used, the max number of connections is also
# shared with the cluster bus: every node in the cluster will use two
# connections, one incoming and another outgoing. It is important to size the
# limit accordingly in case of very large clusters.
#
# maxclients 10000

############################## MEMORY MANAGEMENT ################################

# Set a memory usage limit to the specified amount of bytes.
# When the memory limit is reached Redis will try to remove keys
# according to the eviction policy selected (see maxmemory-policy).
#
# If Redis can't remove keys according to the policy, or if the policy is
# set to 'noeviction', Redis will start to reply with errors to commands
# that would use more memory, like SET, LPUSH, and so on, and will continue
# to reply to read-only commands like GET.
#
# This option is usually useful when using Redis as an LRU or LFU cache, or to
# set a hard memory limit for an instance (using the 'noeviction' policy).
#
# WARNING: If you have replicas attached to an instance with maxmemory on,
# the size of the output buffers needed to feed the replicas are subtracted
# from the used memory count, so that network problems / resyncs will
# not trigger a loop where keys are evicted, and in turn the output
# buffer of replicas is full with DELs of keys evicted triggering the deletion
# of more keys, and so forth until the database is completely emptied.
#
# In short... if you have replicas attached it is suggested that you set a lower
# limit for maxmemory so that there is some free RAM on the system for replica
# output buffers (but this is not needed if the policy is 'noeviction').
#
# maxmemory <bytes>

# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory
# is reached. You can select one from the following behaviors:
#
# volatile-lru -> Evict using approximated LRU, only keys with an expire set.
# allkeys-lru -> Evict any key using approximated LRU.
# volatile-lfu -> Evict using approximated LFU, only keys with an expire set.
# allkeys-lfu -> Evict any key using approximated LFU.
# volatile-random -> Remove a random key having an expire set.
# allkeys-random -> Remove a random key, any key.
# volatile-ttl -> Remove the key with the nearest expire time (minor TTL)
# noeviction -> Don't evict anything, just return an error on write operations.
#
# LRU means Least Recently Used
# LFU means Least Frequently Used
#
# Both LRU, LFU and volatile-ttl are implemented using approximated
# randomized algorithms.
#
# Note: with any of the above policies, when there are no suitable keys for
# eviction, Redis will return an error on write operations that require
# more memory. These are usually commands that create new keys, add data or
# modify existing keys. A few examples are: SET, INCR, HSET, LPUSH, SUNIONSTORE,
# SORT (due to the STORE argument), and EXEC (if the transaction includes any
# command that requires memory).
#
# The default is:
#
# maxmemory-policy noeviction

# LRU, LFU and minimal TTL algorithms are not precise algorithms but approximated
# algorithms (in order to save memory), so you can tune it for speed or
# accuracy. By default Redis will check five keys and pick the one that was
# used least recently, you can change the sample size using the following
# configuration directive.
#
# The default of 5 produces good enough results. 10 Approximates very closely
# true LRU but costs more CPU. 3 is faster but not very accurate.
#
# maxmemory-samples 5

# Eviction processing is designed to function well with the default setting.
# If there is an unusually large amount of write traffic, this value may need to
# be increased.  Decreasing this value may reduce latency at the risk of
# eviction processing effectiveness
#   0 = minimum latency, 10 = default, 100 = process without regard to latency
#
# maxmemory-eviction-tenacity 10

# Starting from Redis 5, by default a replica will ignore its maxmemory setting
# (unless it is promoted to master after a failover or manually). It means
# that the eviction of keys will be just handled by the master, sending the
# DEL commands to the replica as keys evict in the master side.
#
# This behavior ensures that masters and replicas stay consistent, and is usually
# what you want, however if your replica is writable, or you want the replica
# to have a different memory setting, and you are sure all the writes performed
# to the replica are idempotent, then you may change this default (but be sure
# to understand what you are doing).
#
# Note that since the replica by default does not evict, it may end using more
# memory than the one set via maxmemory (there are certain buffers that may
# be larger on the replica, or data structures may sometimes take more memory
# and so forth). So make sure you monitor your replicas and make sure they
# have enough memory to never hit a real out-of-memory condition before the
# master hits the configured maxmemory setting.
#
# replica-ignore-maxmemory yes

# Redis reclaims expired keys in two ways: upon access when those keys are
# found to be expired, and also in background, in what is called the
# "active expire key". The key space is slowly and interactively scanned
# looking for expired keys to reclaim, so that it is possible to free memory
# of keys that are expired and will never be accessed again in a short time.
#
# The default effort of the expire cycle will try to avoid having more than
# ten percent of expired keys still in memory, and will try to avoid consuming
# more than 25% of total memory and to add latency to the system. However
# it is possible to increase the expire "effort" that is normally set to
# "1", to a greater value, up to the value "10". At its maximum value the
# system will use more CPU, longer cycles (and technically may introduce
# more latency), and will tolerate less already expired keys still present
# in the system. It's a tradeoff between memory, CPU and latency.
#
# active-expire-effort 1

############################# LAZY FREEING ####################################

# Redis has two primitives to delete keys. One is called DEL and is a blocking
# deletion of the object. It means that the server stops processing new commands
# in order to reclaim all the memory associated with an object in a synchronous
# way. If the key deleted is associated with a small object, the time needed
# in order to execute the DEL command is very small and comparable to most other
# O(1) or O(log_N) commands in Redis. However if the key is associated with an
# aggregated value containing millions of elements, the server can block for
# a long time (even seconds) in order to complete the operation.
#
# For the above reasons Redis also offers non blocking deletion primitives
# such as UNLINK (non blocking DEL) and the ASYNC option of FLUSHALL and
# FLUSHDB commands, in order to reclaim memory in background. Those commands
# are executed in constant time. Another thread will incrementally free the
# object in the background as fast as possible.
#
# DEL, UNLINK and ASYNC option of FLUSHALL and FLUSHDB are user-controlled.
# It's up to the design of the application to understand when it is a good
# idea to use one or the other. However the Redis server sometimes has to
# delete keys or flush the whole database as a side effect of other operations.
# Specifically Redis deletes objects independently of a user call in the
# following scenarios:
#
# 1) On eviction, because of the maxmemory and maxmemory policy configurations,
#    in order to make room for new data, without going over the specified
#    memory limit.
# 2) Because of expire: when a key with an associated time to live (see the
#    EXPIRE command) must be deleted from memory.
# 3) Because of a side effect of a command that stores data on a key that may
#    already exist. For example the RENAME command may delete the old key
#    content when it is replaced with another one. Similarly SUNIONSTORE
#    or SORT with STORE option may delete existing keys. The SET command
#    itself removes any old content of the specified key in order to replace
#    it with the specified string.
# 4) During replication, when a replica performs a full resynchronization with
#    its master, the content of the whole database is removed in order to
#    load the RDB file just transferred.
#
# In all the above cases the default is to delete objects in a blocking way,
# like if DEL was called. However you can configure each case specifically
# in order to instead release memory in a non-blocking way like if UNLINK
# was called, using the following configuration directives.

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

# It is also possible, for the case when to replace the user code DEL calls
# with UNLINK calls is not easy, to modify the default behavior of the DEL
# command to act exactly like UNLINK, using the following configuration
# directive:

lazyfree-lazy-user-del no

# FLUSHDB, FLUSHALL, SCRIPT FLUSH and FUNCTION FLUSH support both asynchronous and synchronous
# deletion, which can be controlled by passing the [SYNC|ASYNC] flags into the
# commands. When neither flag is passed, this directive will be used to determine
# if the data should be deleted asynchronously.

lazyfree-lazy-user-flush no

################################ THREADED I/O #################################

# Redis is mostly single threaded, however there are certain threaded
# operations such as UNLINK, slow I/O accesses and other things that are
# performed on side threads.
#
# Now it is also possible to handle Redis clients socket reads and writes
# in different I/O threads. Since especially writing is so slow, normally
# Redis users use pipelining in order to speed up the Redis performances per
# core, and spawn multiple instances in order to scale more. Using I/O
# threads it is possible to easily speedup two times Redis without resorting
# to pipelining nor sharding of the instance.
#
# By default threading is disabled, we suggest enabling it only in machines
# that have at least 4 or more cores, leaving at least one spare core.
# Using more than 8 threads is unlikely to help much. We also recommend using
# threaded I/O only if you actually have performance problems, with Redis
# instances being able to use a quite big percentage of CPU time, otherwise
# there is no point in using this feature.
#
# So for instance if you have a four cores boxes, try to use 2 or 3 I/O
# threads, if you have a 8 cores, try to use 6 threads. In order to
# enable I/O threads use the following configuration directive:
#
# io-threads 4
#
# Setting io-threads to 1 will just use the main thread as usual.
# When I/O threads are enabled, we only use threads for writes, that is
# to thread the write(2) syscall and transfer the client buffers to the
# socket. However it is also possible to enable threading of reads and
# protocol parsing using the following configuration directive, by setting
# it to yes:
#
# io-threads-do-reads no
#
# Usually threading reads doesn't help much.
#
# NOTE 1: This configuration directive cannot be changed at runtime via
# CONFIG SET. Also, this feature currently does not work when SSL is
# enabled.
#
# NOTE 2: If you want to test the Redis speedup using redis-benchmark, make
# sure you also run the benchmark itself in threaded mode, using the
# --threads option to match the number of Redis threads, otherwise you'll not
# be able to notice the improvements.

############################ KERNEL OOM CONTROL ##############################

# On Linux, it is possible to hint the kernel OOM killer on what processes
# should be killed first when out of memory.
#
# Enabling this feature makes Redis actively control the oom_score_adj value
# for all its processes, depending on their role. The default scores will
# attempt to have background child processes killed before all others, and
# replicas killed before masters.
#
# Redis supports these options:
#
# no:       Don't make changes to oom-score-adj (default).
# yes:      Alias to "relative" see below.
# absolute: Values in oom-score-adj-values are written as is to the kernel.
# relative: Values are used relative to the initial value of oom_score_adj when
#           the server starts and are then clamped to a range of -1000 to 1000.
#           Because typically the initial value is 0, they will often match the
#           absolute values.
oom-score-adj no

# When oom-score-adj is used, this directive controls the specific values used
# for master, replica and background child processes. Values range -2000 to
# 2000 (higher means more likely to be killed).
#
# Unprivileged processes (not root, and without CAP_SYS_RESOURCE capabilities)
# can freely increase their value, but not decrease it below its initial
# settings. This means that setting oom-score-adj to "relative" and setting the
# oom-score-adj-values to positive values will always succeed.
oom-score-adj-values 0 200 800


#################### KERNEL transparent hugepage CONTROL ######################

# Usually the kernel Transparent Huge Pages control is set to "madvise" or
# or "never" by default (/sys/kernel/mm/transparent_hugepage/enabled), in which
# case this config has no effect. On systems in which it is set to "always",
# redis will attempt to disable it specifically for the redis process in order
# to avoid latency problems specifically with fork(2) and CoW.
# If for some reason you prefer to keep it enabled, you can set this config to
# "no" and the kernel global to "always".

disable-thp yes

############################## APPEND ONLY MODE ###############################

# By default Redis asynchronously dumps the dataset on disk. This mode is
# good enough in many applications, but an issue with the Redis process or
# a power outage may result into a few minutes of writes lost (depending on
# the configured save points).
#
# The Append Only File is an alternative persistence mode that provides
# much better durability. For instance using the default data fsync policy
# (see later in the config file) Redis can lose just one second of writes in a
# dramatic event like a server power outage, or a single write if something
# wrong with the Redis process itself happens, but the operating system is
# still running correctly.
#
# AOF and RDB persistence can be enabled at the same time without problems.
# If the AOF is enabled on startup Redis will load the AOF, that is the file
# with the better durability guarantees.
#
# Please check https://redis.io/topics/persistence for more information.

appendonly no

# The base name of the append only file.
#
# Redis 7 and newer use a set of append-only files to persist the dataset
# and changes applied to it. There are two basic types of files in use:
#
# - Base files, which are a snapshot representing the complete state of the
#   dataset at the time the file was created. Base files can be either in
#   the form of RDB (binary serialized) or AOF (textual commands).
# - Incremental files, which contain additional commands that were applied
#   to the dataset following the previous file.
#
# In addition, manifest files are used to track the files and the order in
# which they were created and should be applied.
#
# Append-only file names are created by Redis following a specific pattern.
# The file name's prefix is based on the 'appendfilename' configuration
# parameter, followed by additional information about the sequence and type.
#
# For example, if appendfilename is set to appendonly.aof, the following file
# names could be derived:
#
# - appendonly.aof.1.base.rdb as a base file.
# - appendonly.aof.1.incr.aof, appendonly.aof.2.incr.aof as incremental files.
# - appendonly.aof.manifest as a manifest file.

appendfilename "appendonly.aof"

# For convenience, Redis stores all persistent append-only files in a dedicated
# directory. The name of the directory is determined by the appenddirname
# configuration parameter.

appenddirname "appendonlydir"

# The fsync() call tells the Operating System to actually write data on disk
# instead of waiting for more data in the output buffer. Some OS will really flush
# data on disk, some other OS will just try to do it ASAP.
#
# Redis supports three different modes:
#
# no: don't fsync, just let the OS flush the data when it wants. Faster.
# always: fsync after every write to the append only log. Slow, Safest.
# everysec: fsync only one time every second. Compromise.
#
# The default is "everysec", as that's usually the right compromise between
# speed and data safety. It's up to you to understand if you can relax this to
# "no" that will let the operating system flush the output buffer when
# it wants, for better performances (but if you can live with the idea of
# some data loss consider the default persistence mode that's snapshotting),
# or on the contrary, use "always" that's very slow but a bit safer than
# everysec.
#
# More details please check the following article:
# http://antirez.com/post/redis-persistence-demystified.html
#
# If unsure, use "everysec".

# appendfsync always
appendfsync everysec
# appendfsync no

# When the AOF fsync policy is set to always or everysec, and a background
# saving process (a background save or AOF log background rewriting) is
# performing a lot of I/O against the disk, in some Linux configurations
# Redis may block too long on the fsync() call. Note that there is no fix for
# this currently, as even performing fsync in a different thread will block
# our synchronous write(2) call.
#
# In order to mitigate this problem it's possible to use the following option
# that will prevent fsync() from being called in the main process while a
# BGSAVE or BGREWRITEAOF is in progress.
#
# This means that while another child is saving, the durability of Redis is
# the same as "appendfsync no". In practical terms, this means that it is
# possible to lose up to 30 seconds of log in the worst scenario (with the
# default Linux settings).
#
# If you have latency problems turn this to "yes". Otherwise leave it as
# "no" that is the safest pick from the point of view of durability.

no-appendfsync-on-rewrite no

# Automatic rewrite of the append only file.
# Redis is able to automatically rewrite the log file implicitly calling
# BGREWRITEAOF when the AOF log size grows by the specified percentage.
#
# This is how it works: Redis remembers the size of the AOF file after the
# latest rewrite (if no rewrite has happened since the restart, the size of
# the AOF at startup is used).
#
# This base size is compared to the current size. If the current size is
# bigger than the specified percentage, the rewrite is triggered. Also
# you need to specify a minimal size for the AOF file to be rewritten, this
# is useful to avoid rewriting the AOF file even if the percentage increase
# is reached but it is still pretty small.
#
# Specify a percentage of zero in order to disable the automatic AOF
# rewrite feature.

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

# An AOF file may be found to be truncated at the end during the Redis
# startup process, when the AOF data gets loaded back into memory.
# This may happen when the system where Redis is running
# crashes, especially when an ext4 filesystem is mounted without the
# data=ordered option (however this can't happen when Redis itself
# crashes or aborts but the operating system still works correctly).
#
# Redis can either exit with an error when this happens, or load as much
# data as possible (the default now) and start if the AOF file is found
# to be truncated at the end. The following option controls this behavior.
#
# If aof-load-truncated is set to yes, a truncated AOF file is loaded and
# the Redis server starts emitting a log to inform the user of the event.
# Otherwise if the option is set to no, the server aborts with an error
# and refuses to start. When the option is set to no, the user requires
# to fix the AOF file using the "redis-check-aof" utility before to restart
# the server.
#
# Note that if the AOF file will be found to be corrupted in the middle
# the server will still exit with an error. This option only applies when
# Redis will try to read more data from the AOF file but not enough bytes
# will be found.
aof-load-truncated yes

# Redis can create append-only base files in either RDB or AOF formats. Using
# the RDB format is always faster and more efficient, and disabling it is only
# supported for backward compatibility purposes.
aof-use-rdb-preamble yes

# Redis supports recording timestamp annotations in the AOF to support restoring
# the data from a specific point-in-time. However, using this capability changes
# the AOF format in a way that may not be compatible with existing AOF parsers.
aof-timestamp-enabled no

################################ SHUTDOWN #####################################

# Maximum time to wait for replicas when shutting down, in seconds.
#
# During shut down, a grace period allows any lagging replicas to catch up with
# the latest replication offset before the master exists. This period can
# prevent data loss, especially for deployments without configured disk backups.
#
# The 'shutdown-timeout' value is the grace period's duration in seconds. It is
# only applicable when the instance has replicas. To disable the feature, set
# the value to 0.
#
# shutdown-timeout 10

# When Redis receives a SIGINT or SIGTERM, shutdown is initiated and by default
# an RDB snapshot is written to disk in a blocking operation if save points are configured.
# The options used on signaled shutdown can include the following values:
# default:  Saves RDB snapshot only if save points are configured.
#           Waits for lagging replicas to catch up.
# save:     Forces a DB saving operation even if no save points are configured.
# nosave:   Prevents DB saving operation even if one or more save points are configured.
# now:      Skips waiting for lagging replicas.
# force:    Ignores any errors that would normally prevent the server from exiting.
#
# Any combination of values is allowed as long as "save" and "nosave" are not set simultaneously.
# Example: "nosave force now"
#
# shutdown-on-sigint default
# shutdown-on-sigterm default

################ NON-DETERMINISTIC LONG BLOCKING COMMANDS #####################

# Maximum time in milliseconds for EVAL scripts, functions and in some cases
# modules' commands before Redis can start processing or rejecting other clients.
#
# If the maximum execution time is reached Redis will start to reply to most
# commands with a BUSY error.
#
# In this state Redis will only allow a handful of commands to be executed.
# For instance, SCRIPT KILL, FUNCTION KILL, SHUTDOWN NOSAVE and possibly some
# module specific 'allow-busy' commands.
#
# SCRIPT KILL and FUNCTION KILL will only be able to stop a script that did not
# yet call any write commands, so SHUTDOWN NOSAVE may be the only way to stop
# the server in the case a write command was already issued by the script when
# the user doesn't want to wait for the natural termination of the script.
#
# The default is 5 seconds. It is possible to set it to 0 or a negative value
# to disable this mechanism (uninterrupted execution). Note that in the past
# this config had a different name, which is now an alias, so both of these do
# the same:
# lua-time-limit 5000
# busy-reply-threshold 5000

################################ REDIS CLUSTER  ###############################

# Normal Redis instances can't be part of a Redis Cluster; only nodes that are
# started as cluster nodes can. In order to start a Redis instance as a
# cluster node enable the cluster support uncommenting the following:
#
# cluster-enabled yes

# Every cluster node has a cluster configuration file. This file is not
# intended to be edited by hand. It is created and updated by Redis nodes.
# Every Redis Cluster node requires a different cluster configuration file.
# Make sure that instances running in the same system do not have
# overlapping cluster configuration file names.
#
# cluster-config-file nodes-6379.conf

# Cluster node timeout is the amount of milliseconds a node must be unreachable
# for it to be considered in failure state.
# Most other internal time limits are a multiple of the node timeout.
#
# cluster-node-timeout 15000

# The cluster port is the port that the cluster bus will listen for inbound connections on. When set
# to the default value, 0, it will be bound to the command port + 10000. Setting this value requires
# you to specify the cluster bus port when executing cluster meet.
# cluster-port 0

# A replica of a failing master will avoid to start a failover if its data
# looks too old.
#
# There is no simple way for a replica to actually have an exact measure of
# its "data age", so the following two checks are performed:
#
# 1) If there are multiple replicas able to failover, they exchange messages
#    in order to try to give an advantage to the replica with the best
#    replication offset (more data from the master processed).
#    Replicas will try to get their rank by offset, and apply to the start
#    of the failover a delay proportional to their rank.
#
# 2) Every single replica computes the time of the last interaction with
#    its master. This can be the last ping or command received (if the master
#    is still in the "connected" state), or the time that elapsed since the
#    disconnection with the master (if the replication link is currently down).
#    If the last interaction is too old, the replica will not try to failover
#    at all.
#
# The point "2" can be tuned by user. Specifically a replica will not perform
# the failover if, since the last interaction with the master, the time
# elapsed is greater than:
#
#   (node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period
#
# So for example if node-timeout is 30 seconds, and the cluster-replica-validity-factor
# is 10, and assuming a default repl-ping-replica-period of 10 seconds, the
# replica will not try to failover if it was not able to talk with the master
# for longer than 310 seconds.
#
# A large cluster-replica-validity-factor may allow replicas with too old data to failover
# a master, while a too small value may prevent the cluster from being able to
# elect a replica at all.
#
# For maximum availability, it is possible to set the cluster-replica-validity-factor
# to a value of 0, which means, that replicas will always try to failover the
# master regardless of the last time they interacted with the master.
# (However they'll always try to apply a delay proportional to their
# offset rank).
#
# Zero is the only value able to guarantee that when all the partitions heal
# the cluster will always be able to continue.
#
# cluster-replica-validity-factor 10

# Cluster replicas are able to migrate to orphaned masters, that are masters
# that are left without working replicas. This improves the cluster ability
# to resist to failures as otherwise an orphaned master can't be failed over
# in case of failure if it has no working replicas.
#
# Replicas migrate to orphaned masters only if there are still at least a
# given number of other working replicas for their old master. This number
# is the "migration barrier". A migration barrier of 1 means that a replica
# will migrate only if there is at least 1 other working replica for its master
# and so forth. It usually reflects the number of replicas you want for every
# master in your cluster.
#
# Default is 1 (replicas migrate only if their masters remain with at least
# one replica). To disable migration just set it to a very large value or
# set cluster-allow-replica-migration to 'no'.
# A value of 0 can be set but is useful only for debugging and dangerous
# in production.
#
# cluster-migration-barrier 1

# Turning off this option allows to use less automatic cluster configuration.
# It both disables migration to orphaned masters and migration from masters
# that became empty.
#
# Default is 'yes' (allow automatic migrations).
#
# cluster-allow-replica-migration yes

# By default Redis Cluster nodes stop accepting queries if they detect there
# is at least a hash slot uncovered (no available node is serving it).
# This way if the cluster is partially down (for example a range of hash slots
# are no longer covered) all the cluster becomes, eventually, unavailable.
# It automatically returns available as soon as all the slots are covered again.
#
# However sometimes you want the subset of the cluster which is working,
# to continue to accept queries for the part of the key space that is still
# covered. In order to do so, just set the cluster-require-full-coverage
# option to no.
#
# cluster-require-full-coverage yes

# This option, when set to yes, prevents replicas from trying to failover its
# master during master failures. However the replica can still perform a
# manual failover, if forced to do so.
#
# This is useful in different scenarios, especially in the case of multiple
# data center operations, where we want one side to never be promoted if not
# in the case of a total DC failure.
#
# cluster-replica-no-failover no

# This option, when set to yes, allows nodes to serve read traffic while the
# cluster is in a down state, as long as it believes it owns the slots.
#
# This is useful for two cases.  The first case is for when an application
# doesn't require consistency of data during node failures or network partitions.
# One example of this is a cache, where as long as the node has the data it
# should be able to serve it.
#
# The second use case is for configurations that don't meet the recommended
# three shards but want to enable cluster mode and scale later. A
# master outage in a 1 or 2 shard configuration causes a read/write outage to the
# entire cluster without this option set, with it set there is only a write outage.
# Without a quorum of masters, slot ownership will not change automatically.
#
# cluster-allow-reads-when-down no

# This option, when set to yes, allows nodes to serve pubsub shard traffic while
# the cluster is in a down state, as long as it believes it owns the slots.
#
# This is useful if the application would like to use the pubsub feature even when
# the cluster global stable state is not OK. If the application wants to make sure only
# one shard is serving a given channel, this feature should be kept as yes.
#
# cluster-allow-pubsubshard-when-down yes

# Cluster link send buffer limit is the limit on the memory usage of an individual
# cluster bus link's send buffer in bytes. Cluster links would be freed if they exceed
# this limit. This is to primarily prevent send buffers from growing unbounded on links
# toward slow peers (E.g. PubSub messages being piled up).
# This limit is disabled by default. Enable this limit when 'mem_cluster_links' INFO field
# and/or 'send-buffer-allocated' entries in the 'CLUSTER LINKS` command output continuously increase.
# Minimum limit of 1gb is recommended so that cluster link buffer can fit in at least a single
# PubSub message by default. (client-query-buffer-limit default value is 1gb)
#
# cluster-link-sendbuf-limit 0

# Clusters can configure their announced hostname using this config. This is a common use case for
# applications that need to use TLS Server Name Indication (SNI) or dealing with DNS based
# routing. By default this value is only shown as additional metadata in the CLUSTER SLOTS
# command, but can be changed using 'cluster-preferred-endpoint-type' config. This value is
# communicated along the clusterbus to all nodes, setting it to an empty string will remove
# the hostname and also propagate the removal.
#
# cluster-announce-hostname ""

# Clusters can advertise how clients should connect to them using either their IP address,
# a user defined hostname, or by declaring they have no endpoint. Which endpoint is
# shown as the preferred endpoint is set by using the cluster-preferred-endpoint-type
# config with values 'ip', 'hostname', or 'unknown-endpoint'. This value controls how
# the endpoint returned for MOVED/ASKING requests as well as the first field of CLUSTER SLOTS.
# If the preferred endpoint type is set to hostname, but no announced hostname is set, a '?'
# will be returned instead.
#
# When a cluster advertises itself as having an unknown endpoint, it's indicating that
# the server doesn't know how clients can reach the cluster. This can happen in certain
# networking situations where there are multiple possible routes to the node, and the
# server doesn't know which one the client took. In this case, the server is expecting
# th
Download .txt
gitextract_1ecxe3lj/

├── .drone.yml
├── .gitattributes
├── .github/
│   └── workflows/
│       ├── base_ci.yml
│       ├── build_linux_only.yml
│       ├── ci.yml
│       ├── release.yml
│       └── test.yml
├── .gitignore
├── .gitmodules
├── .pre-commit-config.yaml
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── README_CN.md
├── README_JPN.md
├── SECURITY.md
├── docker/
│   ├── bisheng/
│   │   ├── config/
│   │   │   └── config.yaml
│   │   └── entrypoint.sh
│   ├── bisheng-ft/
│   │   └── config.yaml
│   ├── bisheng-uns/
│   │   └── config.yaml
│   ├── docker-compose-ft.yml
│   ├── docker-compose-office.yml
│   ├── docker-compose-uns.yml
│   ├── docker-compose.yml
│   ├── mysql/
│   │   └── conf/
│   │       └── my.cnf
│   ├── nginx/
│   │   ├── conf.d/
│   │   │   ├── default.conf
│   │   │   └── websocket.conf
│   │   └── nginx.conf
│   ├── office/
│   │   └── bisheng/
│   │       ├── all.js
│   │       ├── bisheng.js
│   │       ├── config.json
│   │       └── index.html
│   └── redis/
│       └── redis.conf
├── src/
│   ├── backend/
│   │   ├── Dockerfile
│   │   ├── README.md
│   │   ├── alembic.ini
│   │   ├── base.Dockerfile
│   │   ├── bisheng/
│   │   │   ├── .gitignore
│   │   │   ├── __init__.py
│   │   │   ├── api/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── router.py
│   │   │   │   ├── services/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── assistant.py
│   │   │   │   │   ├── assistant_agent.py
│   │   │   │   │   ├── assistant_base.py
│   │   │   │   │   ├── audit_log.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── chat_imp.py
│   │   │   │   │   ├── component.py
│   │   │   │   │   ├── dataset_service.py
│   │   │   │   │   ├── etl4lm_loader.py
│   │   │   │   │   ├── evaluation.py
│   │   │   │   │   ├── flow.py
│   │   │   │   │   ├── invite_code/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── code_validator.py
│   │   │   │   │   │   └── invite_code.py
│   │   │   │   │   ├── knowledge.py
│   │   │   │   │   ├── knowledge_imp.py
│   │   │   │   │   ├── libreoffice_converter.py
│   │   │   │   │   ├── md_from_docx.py
│   │   │   │   │   ├── md_from_excel.py
│   │   │   │   │   ├── md_from_html.py
│   │   │   │   │   ├── md_from_pdf.py
│   │   │   │   │   ├── md_from_pptx.py
│   │   │   │   │   ├── md_post_processing.py
│   │   │   │   │   ├── patch_130.py
│   │   │   │   │   ├── role_group_service.py
│   │   │   │   │   ├── tag.py
│   │   │   │   │   ├── tiktoken_file/
│   │   │   │   │   │   └── cl100k_base.tiktoken
│   │   │   │   │   ├── utils.py
│   │   │   │   │   ├── workflow.py
│   │   │   │   │   └── workstation/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── workstation.py
│   │   │   │   ├── utils.py
│   │   │   │   └── v1/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── assistant.py
│   │   │   │       ├── audit.py
│   │   │   │       ├── base.py
│   │   │   │       ├── callback.py
│   │   │   │       ├── chat.py
│   │   │   │       ├── component.py
│   │   │   │       ├── dataset.py
│   │   │   │       ├── endpoints.py
│   │   │   │       ├── evaluation.py
│   │   │   │       ├── flows.py
│   │   │   │       ├── invite_code.py
│   │   │   │       ├── mark_task.py
│   │   │   │       ├── report.py
│   │   │   │       ├── schema/
│   │   │   │       │   ├── base_schema.py
│   │   │   │       │   ├── chat_schema.py
│   │   │   │       │   ├── dataset_param.py
│   │   │   │       │   ├── knowledge.py
│   │   │   │       │   ├── mark_schema.py
│   │   │   │       │   └── workflow.py
│   │   │   │       ├── schemas.py
│   │   │   │       ├── skillcenter.py
│   │   │   │       ├── tag.py
│   │   │   │       ├── usergroup.py
│   │   │   │       ├── validate.py
│   │   │   │       ├── variable.py
│   │   │   │       ├── workflow.py
│   │   │   │       └── workstation.py
│   │   │   ├── chat/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── client.py
│   │   │   │   ├── clients/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── workflow_client.py
│   │   │   │   ├── config.py
│   │   │   │   ├── handlers.py
│   │   │   │   ├── manager.py
│   │   │   │   ├── types.py
│   │   │   │   └── utils.py
│   │   │   ├── chat_session/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── router.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       └── chat.py
│   │   │   ├── common/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── constants/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── enums/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── telemetry.py
│   │   │   │   │   └── vectorstore_metadata.py
│   │   │   │   ├── dependencies/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── core_deps.py
│   │   │   │   │   └── user_deps.py
│   │   │   │   ├── errcode/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── assistant.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── chat.py
│   │   │   │   │   ├── component.py
│   │   │   │   │   ├── dataset.py
│   │   │   │   │   ├── finetune.py
│   │   │   │   │   ├── flow.py
│   │   │   │   │   ├── http_error.py
│   │   │   │   │   ├── knowledge.py
│   │   │   │   │   ├── linsight.py
│   │   │   │   │   ├── llm.py
│   │   │   │   │   ├── model_deploy.py
│   │   │   │   │   ├── qa.py
│   │   │   │   │   ├── server.py
│   │   │   │   │   ├── tag.py
│   │   │   │   │   ├── telemetry.py
│   │   │   │   │   ├── tool.py
│   │   │   │   │   ├── user.py
│   │   │   │   │   └── workstation.py
│   │   │   │   ├── exceptions/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── auth.py
│   │   │   │   ├── init_data.py
│   │   │   │   ├── models/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── config.py
│   │   │   │   ├── repositories/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── implementations/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── base_repository_impl.py
│   │   │   │   │   │   └── config_repository_impl.py
│   │   │   │   │   └── interfaces/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── base_repository.py
│   │   │   │   │       └── config_repository.py
│   │   │   │   ├── schemas/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── api.py
│   │   │   │   │   ├── rag_schema.py
│   │   │   │   │   └── telemetry/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── base_telemetry_schema.py
│   │   │   │   │       └── event_data_schema.py
│   │   │   │   ├── services/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── config_service.py
│   │   │   │   │   └── telemetry/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── telemetry_service.py
│   │   │   │   └── utils/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── markdown_cmpnt/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── md_to_docx/
│   │   │   │       │   │   ├── __init__.py
│   │   │   │       │   │   ├── config/
│   │   │   │       │   │   │   └── default_style.py
│   │   │   │       │   │   ├── markdocx.py
│   │   │   │       │   │   ├── parser/
│   │   │   │       │   │   │   ├── __init__.py
│   │   │   │       │   │   │   ├── ext_md_syntax.py
│   │   │   │       │   │   │   └── md_parser.py
│   │   │   │       │   │   ├── provider/
│   │   │   │       │   │   │   ├── __init__.py
│   │   │   │       │   │   │   ├── docx_plus.py
│   │   │   │       │   │   │   ├── docx_processor.py
│   │   │   │       │   │   │   ├── simple_style.py
│   │   │   │       │   │   │   └── style_manager.py
│   │   │   │       │   │   └── utils/
│   │   │   │       │   │       ├── __init__.py
│   │   │   │       │   │       ├── style_enum.py
│   │   │   │       │   │       └── yaml_utils.py
│   │   │   │       │   └── md_to_pdf.py
│   │   │   │       └── util.py
│   │   │   ├── components/
│   │   │   │   ├── __init__.py
│   │   │   │   └── custom_components/
│   │   │   │       ├── CustomComponent.py
│   │   │   │       └── __init__.py
│   │   │   ├── core/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── ai/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── asr/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── aliyun_asr_client.py
│   │   │   │   │   │   ├── azure_openai_asr_client.py
│   │   │   │   │   │   └── openai_asr_client.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── embeddings/
│   │   │   │   │   │   └── __init__.py
│   │   │   │   │   ├── llm/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── chat_openai_compatible.py
│   │   │   │   │   │   ├── custom_chat_deepseek.py
│   │   │   │   │   │   └── custom_chat_tongyi.py
│   │   │   │   │   ├── rerank/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── common_rerank.py
│   │   │   │   │   │   ├── rrf_rerank.py
│   │   │   │   │   │   ├── xinference/
│   │   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   │   ├── _compat.py
│   │   │   │   │   │   │   ├── client/
│   │   │   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   │   │   ├── common.py
│   │   │   │   │   │   │   │   ├── handlers.py
│   │   │   │   │   │   │   │   └── restful/
│   │   │   │   │   │   │   │       ├── __init__.py
│   │   │   │   │   │   │   │       ├── async_restful_client.py
│   │   │   │   │   │   │   │       └── restful_client.py
│   │   │   │   │   │   │   ├── fields.py
│   │   │   │   │   │   │   └── types.py
│   │   │   │   │   │   └── xinference_rerank.py
│   │   │   │   │   ├── test/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── test.py
│   │   │   │   │   └── tts/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── aliyun_tts_client.py
│   │   │   │   │       ├── azure_openai_tts_client.py
│   │   │   │   │       └── openai_tts_client.py
│   │   │   │   ├── cache/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── flow.py
│   │   │   │   │   ├── manager.py
│   │   │   │   │   ├── redis_conn.py
│   │   │   │   │   ├── redis_manager.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── config/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── settings.py
│   │   │   │   ├── context/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── examples.py
│   │   │   │   │   └── manager.py
│   │   │   │   ├── database/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── alembic/
│   │   │   │   │   │   ├── README.md
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── env.py
│   │   │   │   │   │   ├── script.py.mako
│   │   │   │   │   │   └── versions/
│   │   │   │   │   │       └── v2_3_0_beta1_9ba42685e830.py
│   │   │   │   │   ├── connection.py
│   │   │   │   │   └── manager.py
│   │   │   │   ├── external/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── http_client/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── client.py
│   │   │   │   │       └── http_client_manager.py
│   │   │   │   ├── logger.py
│   │   │   │   ├── middleware/
│   │   │   │   │   └── __init__.py
│   │   │   │   ├── prompts/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── manager.py
│   │   │   │   │   ├── prompt_loader.py
│   │   │   │   │   └── yaml/
│   │   │   │   │       ├── gen_title.yaml
│   │   │   │   │       ├── qa.yaml
│   │   │   │   │       ├── sop.yaml
│   │   │   │   │       └── workstation.yaml
│   │   │   │   ├── search/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── elasticsearch/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── es_connection.py
│   │   │   │   │       └── manager.py
│   │   │   │   ├── storage/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── minio/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       ├── minio_manager.py
│   │   │   │   │       └── minio_storage.py
│   │   │   │   └── vectorstore/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── ensemble_retriever.py
│   │   │   │       └── multi_retriever.py
│   │   │   ├── custom/
│   │   │   │   ├── __init__.py
│   │   │   │   └── customs.py
│   │   │   ├── database/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── data/
│   │   │   │   │   ├── 0254d1808a5247d2a3ee0d0011819acb.docx
│   │   │   │   │   ├── component.json
│   │   │   │   │   ├── sft_model.json
│   │   │   │   │   ├── t_gpts_tools.json
│   │   │   │   │   ├── t_gpts_tools_type.json
│   │   │   │   │   └── template.json
│   │   │   │   └── models/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── assistant.py
│   │   │   │       ├── audit_log.py
│   │   │   │       ├── component.py
│   │   │   │       ├── dataset.py
│   │   │   │       ├── evaluation.py
│   │   │   │       ├── flow.py
│   │   │   │       ├── flow_version.py
│   │   │   │       ├── group.py
│   │   │   │       ├── group_resource.py
│   │   │   │       ├── invite_code.py
│   │   │   │       ├── mark_app_user.py
│   │   │   │       ├── mark_record.py
│   │   │   │       ├── mark_task.py
│   │   │   │       ├── message.py
│   │   │   │       ├── recall_chunk.py
│   │   │   │       ├── report.py
│   │   │   │       ├── role.py
│   │   │   │       ├── role_access.py
│   │   │   │       ├── session.py
│   │   │   │       ├── tag.py
│   │   │   │       ├── template.py
│   │   │   │       ├── user_group.py
│   │   │   │       ├── user_link.py
│   │   │   │       └── variable_value.py
│   │   │   ├── default_node.yaml
│   │   │   ├── field_typing/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── constants.py
│   │   │   │   └── range_spec.py
│   │   │   ├── finetune/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── finetune.py
│   │   │   │   │   └── server.py
│   │   │   │   ├── domain/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── models/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── finetune.py
│   │   │   │   │   │   ├── model_deploy.py
│   │   │   │   │   │   ├── preset_train.py
│   │   │   │   │   │   ├── server.py
│   │   │   │   │   │   └── sft_model.py
│   │   │   │   │   ├── services/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── finetune.py
│   │   │   │   │   │   └── finetune_file.py
│   │   │   │   │   └── sft_backend.py
│   │   │   │   ├── schemas.py
│   │   │   │   └── utils.py
│   │   │   ├── graph/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── edge/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── graph/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── constants.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── utils.py
│   │   │   │   └── vertex/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── base.py
│   │   │   │       ├── constants.py
│   │   │   │       └── types.py
│   │   │   ├── initdb_config.yaml
│   │   │   ├── interface/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── agents/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── custom.py
│   │   │   │   │   └── prebuilt.py
│   │   │   │   ├── autogenRole/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── base.py
│   │   │   │   ├── chains/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── custom.py
│   │   │   │   ├── custom/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── code_parser/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── code_parser.py
│   │   │   │   │   │   └── utils.py
│   │   │   │   │   ├── custom_component/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── component.py
│   │   │   │   │   │   └── custom_component.py
│   │   │   │   │   ├── directory_reader/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── directory_reader.py
│   │   │   │   │   │   └── utils.py
│   │   │   │   │   ├── schema.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── custom_lists.py
│   │   │   │   ├── document_loaders/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── embeddings/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── custom.py
│   │   │   │   ├── importing/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── initialize/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── llm.py
│   │   │   │   │   ├── loading.py
│   │   │   │   │   ├── utils.py
│   │   │   │   │   └── vector_store.py
│   │   │   │   ├── inputoutput/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── listing.py
│   │   │   │   ├── llms/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── memories/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── output_parsers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── prompts/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── custom.py
│   │   │   │   ├── retrievers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── run.py
│   │   │   │   ├── text_splitters/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── toolkits/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   └── custom.py
│   │   │   │   ├── tools/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── constants.py
│   │   │   │   │   ├── custom.py
│   │   │   │   │   └── util.py
│   │   │   │   ├── types.py
│   │   │   │   ├── utilities/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── utils.py
│   │   │   │   ├── vector_store/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── constants.py
│   │   │   │   │   └── custom.py
│   │   │   │   └── wrappers/
│   │   │   │       ├── __init__.py
│   │   │   │       └── base.py
│   │   │   ├── jcloud.yml
│   │   │   ├── knowledge/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── dependencies.py
│   │   │   │   │   ├── endpoints/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── knowledge.py
│   │   │   │   │   │   └── qa.py
│   │   │   │   │   └── router.py
│   │   │   │   ├── domain/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── knowledge_rag.py
│   │   │   │   │   ├── models/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── knowledge.py
│   │   │   │   │   │   └── knowledge_file.py
│   │   │   │   │   ├── repositories/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── implementations/
│   │   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   │   ├── knowledge_file_repository_impl.py
│   │   │   │   │   │   │   └── knowledge_repository_impl.py
│   │   │   │   │   │   └── interfaces/
│   │   │   │   │   │       ├── __init__.py
│   │   │   │   │   │       ├── knowledge_file_repository.py
│   │   │   │   │   │       └── knowledge_repository.py
│   │   │   │   │   ├── schemas/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── knowledge_file_schema.py
│   │   │   │   │   │   ├── knowledge_rag_schema.py
│   │   │   │   │   │   └── knowledge_schema.py
│   │   │   │   │   ├── services/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── knowledge_file_service.py
│   │   │   │   │   │   └── knowledge_service.py
│   │   │   │   │   └── utils.py
│   │   │   │   └── rag/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── elasticsearch_factory.py
│   │   │   │       └── milvus_factory.py
│   │   │   ├── linsight/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── endpoints/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── linsight.py
│   │   │   │   │   └── router.py
│   │   │   │   ├── domain/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── models/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── linsight_execute_task.py
│   │   │   │   │   │   ├── linsight_session_version.py
│   │   │   │   │   │   └── linsight_sop.py
│   │   │   │   │   ├── schemas/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── inspiration_schema.py
│   │   │   │   │   │   └── linsight_schema.py
│   │   │   │   │   ├── services/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── message_stream_handle.py
│   │   │   │   │   │   ├── sop_manage.py
│   │   │   │   │   │   ├── state_message_manager.py
│   │   │   │   │   │   └── workbench_impl.py
│   │   │   │   │   ├── task_exec.py
│   │   │   │   │   └── utils.py
│   │   │   │   └── worker.py
│   │   │   ├── llm/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── router.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── const.py
│   │   │   │       ├── llm/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── asr.py
│   │   │   │       │   ├── base.py
│   │   │   │       │   ├── embedding.py
│   │   │   │       │   ├── llm.py
│   │   │   │       │   ├── rerank.py
│   │   │   │       │   └── tts.py
│   │   │   │       ├── models/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   └── llm_server.py
│   │   │   │       ├── schemas.py
│   │   │   │       ├── services/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   └── llm.py
│   │   │   │       └── utils.py
│   │   │   ├── main.py
│   │   │   ├── mcp_manage/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── clients/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── sse.py
│   │   │   │   │   ├── stdio.py
│   │   │   │   │   └── streamable.py
│   │   │   │   ├── constant.py
│   │   │   │   ├── langchain/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── tool.py
│   │   │   │   └── manager.py
│   │   │   ├── open_endpoints/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── dependencies.py
│   │   │   │   │   ├── endpoints/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── assistant.py
│   │   │   │   │   │   ├── chat.py
│   │   │   │   │   │   ├── filelib.py
│   │   │   │   │   │   ├── flow.py
│   │   │   │   │   │   ├── knowledge.py
│   │   │   │   │   │   ├── llm.py
│   │   │   │   │   │   └── workflow.py
│   │   │   │   │   └── router.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── schemas/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── filelib.py
│   │   │   │       │   ├── knowledge.py
│   │   │   │       │   └── message.py
│   │   │   │       └── utils.py
│   │   │   ├── patches/
│   │   │   │   ├── __init__.py
│   │   │   │   └── langchain_openai.patch
│   │   │   ├── pptx2md/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── __main__.py
│   │   │   │   ├── entry.py
│   │   │   │   ├── image.py
│   │   │   │   ├── log.py
│   │   │   │   ├── multi_column.py
│   │   │   │   ├── outputter.py
│   │   │   │   ├── parser.py
│   │   │   │   ├── types.py
│   │   │   │   └── utils.py
│   │   │   ├── processing/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base.py
│   │   │   │   └── process.py
│   │   │   ├── run_celery.py
│   │   │   ├── run_celery_beat.py
│   │   │   ├── script/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base_telemetry_events_reindex.py
│   │   │   │   ├── convert_sys_embeddings.py
│   │   │   │   ├── knowledge.sh
│   │   │   │   ├── knowledge_data_convert.py
│   │   │   │   ├── knowledge_data_fix.py
│   │   │   │   ├── mid_table.sh
│   │   │   │   ├── sync_increment_table.py
│   │   │   │   └── telemetry_events_reindex.sh
│   │   │   ├── server.py
│   │   │   ├── services/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── auth/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── base.py
│   │   │   │   ├── cache/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   └── service.py
│   │   │   │   ├── chat/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── cache.py
│   │   │   │   │   ├── config.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── credentials/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   └── service.py
│   │   │   │   ├── deps.py
│   │   │   │   ├── factory.py
│   │   │   │   ├── manager.py
│   │   │   │   ├── plugins/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── langfuse_plugin.py
│   │   │   │   │   └── service.py
│   │   │   │   ├── schema.py
│   │   │   │   ├── session/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── settings/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── auth.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── constants.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── store/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── exceptions.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── schema.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   ├── task/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── backends/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── anyio.py
│   │   │   │   │   │   ├── base.py
│   │   │   │   │   │   └── celery.py
│   │   │   │   │   ├── factory.py
│   │   │   │   │   ├── service.py
│   │   │   │   │   └── utils.py
│   │   │   │   └── utils.py
│   │   │   ├── share_link/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── dependencies.py
│   │   │   │   │   ├── endpoints/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── share_link.py
│   │   │   │   │   ├── router.py
│   │   │   │   │   └── schemas/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── share_link_schema.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── models/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   └── share_link.py
│   │   │   │       ├── repositories/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── implementations/
│   │   │   │       │   │   ├── __init__.py
│   │   │   │       │   │   └── share_link_repository_impl.py
│   │   │   │       │   └── interfaces/
│   │   │   │       │       ├── __init__.py
│   │   │   │       │       └── share_link_repository.py
│   │   │   │       └── services/
│   │   │   │           ├── __init__.py
│   │   │   │           └── share_link_service.py
│   │   │   ├── sql.json
│   │   │   ├── telemetry/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       └── mid_table/
│   │   │   │           ├── __init__.py
│   │   │   │           ├── app_increment.py
│   │   │   │           ├── base.py
│   │   │   │           ├── knowledge_increment.py
│   │   │   │           ├── user_increment.py
│   │   │   │           └── user_interact.py
│   │   │   ├── template/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── field/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── frontend_node/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── agents.py
│   │   │   │   │   ├── autogenrole.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── chains.py
│   │   │   │   │   ├── constants.py
│   │   │   │   │   ├── custom_components.py
│   │   │   │   │   ├── documentloaders.py
│   │   │   │   │   ├── embeddings.py
│   │   │   │   │   ├── formatter/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── base.py
│   │   │   │   │   │   └── field_formatters.py
│   │   │   │   │   ├── input_output.py
│   │   │   │   │   ├── llms.py
│   │   │   │   │   ├── memories.py
│   │   │   │   │   ├── output_parsers.py
│   │   │   │   │   ├── prompts.py
│   │   │   │   │   ├── retrievers.py
│   │   │   │   │   ├── textsplitters.py
│   │   │   │   │   ├── tools.py
│   │   │   │   │   ├── utilities.py
│   │   │   │   │   ├── vectorstores.py
│   │   │   │   │   └── wrappers.py
│   │   │   │   └── template/
│   │   │   │       ├── __init__.py
│   │   │   │       └── base.py
│   │   │   ├── tool/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── tool.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── const.py
│   │   │   │       ├── langchain/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── knowledge.py
│   │   │   │       │   └── linsight_knowledge.py
│   │   │   │       ├── models/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   └── gpts_tools.py
│   │   │   │       ├── schemas.py
│   │   │   │       └── services/
│   │   │   │           ├── __init__.py
│   │   │   │           ├── executor.py
│   │   │   │           ├── openapi.py
│   │   │   │           └── tool.py
│   │   │   ├── user/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── role.py
│   │   │   │   │   └── user.py
│   │   │   │   └── domain/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── const.py
│   │   │   │       ├── models/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── user.py
│   │   │   │       │   └── user_role.py
│   │   │   │       ├── repositories/
│   │   │   │       │   ├── __init__.py
│   │   │   │       │   ├── implementations/
│   │   │   │       │   │   ├── __init__.py
│   │   │   │       │   │   └── user_repository_impl.py
│   │   │   │       │   └── interfaces/
│   │   │   │       │       ├── __init__.py
│   │   │   │       │       └── user_repository.py
│   │   │   │       └── services/
│   │   │   │           ├── __init__.py
│   │   │   │           ├── auth.py
│   │   │   │           ├── captcha.py
│   │   │   │           └── user.py
│   │   │   ├── utils/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── consisten_hash.py
│   │   │   │   ├── constants.py
│   │   │   │   ├── docx_temp.py
│   │   │   │   ├── exceptions.py
│   │   │   │   ├── http_middleware.py
│   │   │   │   ├── lazy_load.py
│   │   │   │   ├── linked_list.py
│   │   │   │   ├── mask_data.py
│   │   │   │   ├── payload.py
│   │   │   │   ├── threadpool.py
│   │   │   │   ├── util.py
│   │   │   │   └── validate.py
│   │   │   ├── worker/
│   │   │   │   ├── README.md
│   │   │   │   ├── __init__.py
│   │   │   │   ├── config.py
│   │   │   │   ├── knowledge/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── file_worker.py
│   │   │   │   │   ├── qa.py
│   │   │   │   │   └── rebuild_knowledge_worker.py
│   │   │   │   ├── main.py
│   │   │   │   ├── telemetry/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── mid_table.py
│   │   │   │   ├── test/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── test.py
│   │   │   │   ├── utils/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── stateful_worker.py
│   │   │   │   └── workflow/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── redis_callback.py
│   │   │   │       └── tasks.py
│   │   │   └── workflow/
│   │   │       ├── __init__.py
│   │   │       ├── callback/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── base_callback.py
│   │   │       │   ├── event.py
│   │   │       │   └── llm_callback.py
│   │   │       ├── common/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── condition.py
│   │   │       │   ├── const.py
│   │   │       │   ├── knowledge.py
│   │   │       │   ├── node.py
│   │   │       │   └── workflow.py
│   │   │       ├── edges/
│   │   │       │   ├── __init__.py
│   │   │       │   └── edges.py
│   │   │       ├── graph/
│   │   │       │   ├── __init__.py
│   │   │       │   ├── graph_engine.py
│   │   │       │   ├── graph_state.py
│   │   │       │   └── workflow.py
│   │   │       └── nodes/
│   │   │           ├── __init__.py
│   │   │           ├── agent/
│   │   │           │   ├── __init__.py
│   │   │           │   └── agent.py
│   │   │           ├── base.py
│   │   │           ├── code/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── code.py
│   │   │           │   └── code_parse.py
│   │   │           ├── condition/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── condition.py
│   │   │           │   └── conidition_case.py
│   │   │           ├── end/
│   │   │           │   ├── __init__.py
│   │   │           │   └── end.py
│   │   │           ├── input/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── const.py
│   │   │           │   └── input.py
│   │   │           ├── knowledge_retriever/
│   │   │           │   ├── __init__.py
│   │   │           │   └── knowledge_retriever.py
│   │   │           ├── llm/
│   │   │           │   ├── __init__.py
│   │   │           │   └── llm.py
│   │   │           ├── node_manage.py
│   │   │           ├── output/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── output.py
│   │   │           │   └── output_fake.py
│   │   │           ├── prompt_template.py
│   │   │           ├── qa_retriever/
│   │   │           │   ├── __init__.py
│   │   │           │   └── qa_retriever.py
│   │   │           ├── rag/
│   │   │           │   ├── __init__.py
│   │   │           │   └── rag.py
│   │   │           ├── report/
│   │   │           │   ├── __init__.py
│   │   │           │   ├── docx_replace.py
│   │   │           │   ├── report.py
│   │   │           │   └── text_classification.py
│   │   │           ├── start/
│   │   │           │   ├── __init__.py
│   │   │           │   └── start.py
│   │   │           └── tool/
│   │   │               ├── __init__.py
│   │   │               └── tool.py
│   │   ├── bisheng_langchain/
│   │   │   ├── __init__.py
│   │   │   ├── agents/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── chatglm_functions_agent/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── output_parser.py
│   │   │   │   │   └── prompt.py
│   │   │   │   └── llm_functions_agent/
│   │   │   │       ├── __init__.py
│   │   │   │       └── base.py
│   │   │   ├── autogen_role/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── assistant.py
│   │   │   │   ├── custom.py
│   │   │   │   ├── groupchat_manager.py
│   │   │   │   └── user.py
│   │   │   ├── chains/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── autogen/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── auto_gen.py
│   │   │   │   ├── combine_documents/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── stuff.py
│   │   │   │   ├── conversational_retrieval/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── base.py
│   │   │   │   ├── loader_output.py
│   │   │   │   ├── qa_generation/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── base.py
│   │   │   │   │   ├── base_v2.py
│   │   │   │   │   ├── prompt.py
│   │   │   │   │   └── prompt_v2.py
│   │   │   │   ├── question_answering/
│   │   │   │   │   └── __init__.py
│   │   │   │   ├── retrieval/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── retrieval_chain.py
│   │   │   │   ├── router/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── multi_rule.py
│   │   │   │   │   └── rule_router.py
│   │   │   │   └── transform.py
│   │   │   ├── chat_models/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── host_llm.py
│   │   │   │   ├── interface/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── minimax.py
│   │   │   │   │   ├── openai.py
│   │   │   │   │   ├── types.py
│   │   │   │   │   ├── utils.py
│   │   │   │   │   ├── wenxin.py
│   │   │   │   │   ├── xunfei.py
│   │   │   │   │   └── zhipuai.py
│   │   │   │   ├── minimax.py
│   │   │   │   ├── proxy_llm.py
│   │   │   │   ├── qwen.py
│   │   │   │   ├── sensetime.py
│   │   │   │   ├── wenxin.py
│   │   │   │   ├── xunfeiai.py
│   │   │   │   └── zhipuai.py
│   │   │   ├── document_loaders/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── custom_kv.py
│   │   │   │   ├── elem_html.py
│   │   │   │   ├── elem_image.py
│   │   │   │   ├── elem_pdf.py
│   │   │   │   ├── elem_unstrcutured_loader.py
│   │   │   │   ├── parsers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── ellm_client.py
│   │   │   │   │   ├── image.py
│   │   │   │   │   ├── ocr_client.py
│   │   │   │   │   └── test_image.py
│   │   │   │   └── universal_kv.py
│   │   │   ├── embeddings/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── host_embedding.py
│   │   │   │   ├── huggingfacegte.py
│   │   │   │   ├── huggingfacemultilingual.py
│   │   │   │   ├── interface/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── types.py
│   │   │   │   │   └── wenxin.py
│   │   │   │   └── wenxin.py
│   │   │   ├── gpts/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── agent_types/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── llm_functions_agent.py
│   │   │   │   │   └── llm_react_agent.py
│   │   │   │   ├── assistant.py
│   │   │   │   ├── auto_optimization.py
│   │   │   │   ├── auto_tool_selected.py
│   │   │   │   ├── config/
│   │   │   │   │   ├── base_assistant.yaml
│   │   │   │   │   ├── base_scene.yaml
│   │   │   │   │   ├── knowledge_scene.yaml
│   │   │   │   │   ├── rag_scene.yaml
│   │   │   │   │   ├── test.yaml
│   │   │   │   │   └── tools.yaml
│   │   │   │   ├── load_tools.py
│   │   │   │   ├── message_types.py
│   │   │   │   ├── prompts/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── assistant_prompt_base.py
│   │   │   │   │   ├── assistant_prompt_cohere.py
│   │   │   │   │   ├── assistant_prompt_opt.py
│   │   │   │   │   ├── breif_description_prompt.py
│   │   │   │   │   ├── opening_dialog_prompt.py
│   │   │   │   │   ├── react_agent_prompt.py
│   │   │   │   │   └── select_tools_prompt.py
│   │   │   │   ├── tools/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── api_tools/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── base.py
│   │   │   │   │   │   ├── firecrawl.py
│   │   │   │   │   │   ├── flow.py
│   │   │   │   │   │   ├── jina.py
│   │   │   │   │   │   ├── macro_data.py
│   │   │   │   │   │   ├── openapi.py
│   │   │   │   │   │   ├── silicon_flow.py
│   │   │   │   │   │   ├── sina.py
│   │   │   │   │   │   └── tianyancha.py
│   │   │   │   │   ├── bing_search/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── self_arxiv.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   ├── calculator/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   ├── code_interpreter/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── base_executor.py
│   │   │   │   │   │   ├── e2b_executor.py
│   │   │   │   │   │   ├── local_executor.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   ├── dalle_image_generator/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   ├── get_current_time/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   ├── local_file/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── local_file.py
│   │   │   │   │   ├── message/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   ├── dingding.py
│   │   │   │   │   │   ├── email.py
│   │   │   │   │   │   ├── feishu.py
│   │   │   │   │   │   └── wechat.py
│   │   │   │   │   ├── sql_agent/
│   │   │   │   │   │   ├── __init__.py
│   │   │   │   │   │   └── tool.py
│   │   │   │   │   └── web_search/
│   │   │   │   │       ├── __init__.py
│   │   │   │   │       └── tool.py
│   │   │   │   └── utils.py
│   │   │   ├── input_output/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── input.py
│   │   │   │   └── output.py
│   │   │   ├── linsight/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── agent.py
│   │   │   │   ├── agent_test.py
│   │   │   │   ├── const.py
│   │   │   │   ├── event.py
│   │   │   │   ├── manage.py
│   │   │   │   ├── prompt.py
│   │   │   │   ├── react_prompt.py
│   │   │   │   ├── react_task.py
│   │   │   │   ├── resource/
│   │   │   │   │   └── model_tokenizer/
│   │   │   │   │       ├── config.json
│   │   │   │   │       ├── configuration.json
│   │   │   │   │       ├── generation_config.json
│   │   │   │   │       ├── merges.txt
│   │   │   │   │       ├── tokenizer.json
│   │   │   │   │       ├── tokenizer_config.json
│   │   │   │   │       └── vocab.json
│   │   │   │   ├── task.py
│   │   │   │   └── utils.py
│   │   │   ├── memory/
│   │   │   │   ├── __init__.py
│   │   │   │   └── redis.py
│   │   │   ├── rag/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── api/
│   │   │   │   │   ├── config.py
│   │   │   │   │   ├── dify_rag.py
│   │   │   │   │   ├── fastgpt_rag.py
│   │   │   │   │   └── openai_assistant_rag.py
│   │   │   │   ├── bisheng_rag_chain.py
│   │   │   │   ├── bisheng_rag_pipeline.py
│   │   │   │   ├── bisheng_rag_pipeline_v2.py
│   │   │   │   ├── bisheng_rag_tool.py
│   │   │   │   ├── config/
│   │   │   │   │   ├── baseline.yaml
│   │   │   │   │   ├── baseline_caibao.yaml
│   │   │   │   │   ├── baseline_caibao_knowledge_v2.yaml
│   │   │   │   │   ├── baseline_caibao_v2.yaml
│   │   │   │   │   ├── baseline_demo_v2.yaml
│   │   │   │   │   ├── baseline_s2b_mix.yaml
│   │   │   │   │   └── baseline_v2.yaml
│   │   │   │   ├── extract_info.py
│   │   │   │   ├── init_retrievers/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── baseline_vector_retriever.py
│   │   │   │   │   ├── keyword_retriever.py
│   │   │   │   │   ├── mix_retriever.py
│   │   │   │   │   └── smaller_chunks_retriever.py
│   │   │   │   ├── prompts/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── extract_key_prompt.py
│   │   │   │   │   ├── prompt.py
│   │   │   │   │   └── prompt_cohere.py
│   │   │   │   ├── qa_corpus/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   └── qa_generator.py
│   │   │   │   ├── rerank/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── rerank.py
│   │   │   │   │   └── rerank_benchmark.py
│   │   │   │   ├── run_qa_gen_web.py
│   │   │   │   ├── run_rag_evaluate_web.py
│   │   │   │   ├── scoring/
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── llama_index_score.py
│   │   │   │   │   └── ragas_score.py
│   │   │   │   ├── test/
│   │   │   │   │   ├── filter_qa.py
│   │   │   │   │   └── test_smaller_chunks.py
│   │   │   │   └── utils.py
│   │   │   ├── retrievers/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── ensemble.py
│   │   │   │   └── mix_es_vector.py
│   │   │   ├── sql/
│   │   │   │   ├── __init__.py
│   │   │   │   └── base.py
│   │   │   ├── text_splitter.py
│   │   │   ├── utils/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── azure_dalle_image_generator.py
│   │   │   │   ├── openapi.py
│   │   │   │   ├── requests.py
│   │   │   │   └── wrap_function.py
│   │   │   └── vectorstores/
│   │   │       ├── __init__.py
│   │   │       ├── elastic_keywords_search.py
│   │   │       ├── milvus.py
│   │   │       └── retriever.py
│   │   ├── entrypoint.sh
│   │   ├── patch_code.sh
│   │   ├── pyproject.toml
│   │   ├── test/
│   │   │   ├── __init__.py
│   │   │   ├── clean_milvus_es.py
│   │   │   ├── milvus_trans.py
│   │   │   ├── test.py
│   │   │   ├── test_api.py
│   │   │   ├── test_docx.py
│   │   │   ├── test_es.py
│   │   │   ├── test_filelib.py
│   │   │   ├── test_gpts.py
│   │   │   ├── test_llm.py
│   │   │   ├── test_node.py
│   │   │   ├── test_ws.py
│   │   │   └── workflow/
│   │   │       ├── __init__.py
│   │   │       └── nodes/
│   │   │           ├── __init__.py
│   │   │           ├── test_docx_replace.py
│   │   │           └── test_docx_string.py
│   │   └── test1.py
│   └── frontend/
│       ├── .gitignore
│       ├── Dockerfile
│       ├── client/
│       │   ├── babel.config.cjs
│       │   ├── check_updates.sh
│       │   ├── index.html
│       │   ├── jest.config.cjs
│       │   ├── local-packages/
│       │   │   └── vditor-3.11.1.tgz
│       │   ├── nginx.conf
│       │   ├── package.json
│       │   ├── postcss.config.cjs
│       │   ├── public/
│       │   │   ├── assets/
│       │   │   │   └── bisheng/
│       │   │   │       └── config.js
│       │   │   ├── robots.txt
│       │   │   └── vditor/
│       │   │       └── dist/
│       │   │           ├── css/
│       │   │           │   └── content-theme/
│       │   │           │       ├── ant-design.css
│       │   │           │       ├── dark.css
│       │   │           │       ├── light.css
│       │   │           │       └── wechat.css
│       │   │           ├── index.css
│       │   │           ├── index.d.ts
│       │   │           ├── index.js
│       │   │           ├── js/
│       │   │           │   ├── graphviz/
│       │   │           │   │   ├── full.render.js
│       │   │           │   │   └── viz.js
│       │   │           │   ├── highlight.js/
│       │   │           │   │   ├── LICENSE
│       │   │           │   │   └── third-languages.js
│       │   │           │   ├── i18n/
│       │   │           │   │   ├── de_DE.js
│       │   │           │   │   ├── en_US.js
│       │   │           │   │   ├── fr_FR.js
│       │   │           │   │   ├── ja_JP.js
│       │   │           │   │   ├── ko_KR.js
│       │   │           │   │   ├── pt_BR.js
│       │   │           │   │   ├── ru_RU.js
│       │   │           │   │   ├── sv_SE.js
│       │   │           │   │   ├── zh_CN.js
│       │   │           │   │   └── zh_TW.js
│       │   │           │   ├── icons/
│       │   │           │   │   ├── ant.js
│       │   │           │   │   └── material.js
│       │   │           │   ├── markmap/
│       │   │           │   │   └── prism.css
│       │   │           │   └── mathjax/
│       │   │           │       ├── LICENSE
│       │   │           │       ├── a11y/
│       │   │           │       │   ├── assistive-mml.js
│       │   │           │       │   ├── complexity.js
│       │   │           │       │   ├── explorer.js
│       │   │           │       │   └── semantic-enrich.js
│       │   │           │       ├── input/
│       │   │           │       │   ├── asciimath.js
│       │   │           │       │   ├── mml/
│       │   │           │       │   │   └── entities.js
│       │   │           │       │   ├── mml.js
│       │   │           │       │   ├── tex/
│       │   │           │       │   │   └── extensions/
│       │   │           │       │   │       ├── action.js
│       │   │           │       │   │       ├── all-packages.js
│       │   │           │       │   │       ├── ams.js
│       │   │           │       │   │       ├── amscd.js
│       │   │           │       │   │       ├── autoload.js
│       │   │           │       │   │       ├── bbox.js
│       │   │           │       │   │       ├── boldsymbol.js
│       │   │           │       │   │       ├── braket.js
│       │   │           │       │   │       ├── bussproofs.js
│       │   │           │       │   │       ├── cancel.js
│       │   │           │       │   │       ├── color.js
│       │   │           │       │   │       ├── colorV2.js
│       │   │           │       │   │       ├── configMacros.js
│       │   │           │       │   │       ├── enclose.js
│       │   │           │       │   │       ├── extpfeil.js
│       │   │           │       │   │       ├── html.js
│       │   │           │       │   │       ├── mhchem.js
│       │   │           │       │   │       ├── newcommand.js
│       │   │           │       │   │       ├── noerrors.js
│       │   │           │       │   │       ├── noundefined.js
│       │   │           │       │   │       ├── physics.js
│       │   │           │       │   │       ├── require.js
│       │   │           │       │   │       ├── tagFormat.js
│       │   │           │       │   │       ├── textmacros.js
│       │   │           │       │   │       ├── unicode.js
│       │   │           │       │   │       └── verb.js
│       │   │           │       │   ├── tex-base.js
│       │   │           │       │   ├── tex-full.js
│       │   │           │       │   └── tex.js
│       │   │           │       ├── sre/
│       │   │           │       │   ├── mathmaps/
│       │   │           │       │   │   ├── de.js
│       │   │           │       │   │   ├── en.js
│       │   │           │       │   │   ├── es.js
│       │   │           │       │   │   ├── fr.js
│       │   │           │       │   │   ├── mathmaps_ie.js
│       │   │           │       │   │   └── nemeth.js
│       │   │           │       │   ├── sre-node.js
│       │   │           │       │   └── sre_browser.js
│       │   │           │       └── tex-svg-full.js
│       │   │           ├── method.d.ts
│       │   │           ├── method.js
│       │   │           ├── ts/
│       │   │           │   ├── constants.d.ts
│       │   │           │   ├── devtools/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── export/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── hint/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── ir/
│       │   │           │   │   ├── expandMarker.d.ts
│       │   │           │   │   ├── highlightToolbarIR.d.ts
│       │   │           │   │   ├── index.d.ts
│       │   │           │   │   ├── input.d.ts
│       │   │           │   │   ├── process.d.ts
│       │   │           │   │   └── processKeydown.d.ts
│       │   │           │   ├── markdown/
│       │   │           │   │   ├── SMILESRender.d.ts
│       │   │           │   │   ├── abcRender.d.ts
│       │   │           │   │   ├── adapterRender.d.ts
│       │   │           │   │   ├── anchorRender.d.ts
│       │   │           │   │   ├── chartRender.d.ts
│       │   │           │   │   ├── codeRender.d.ts
│       │   │           │   │   ├── flowchartRender.d.ts
│       │   │           │   │   ├── getHTML.d.ts
│       │   │           │   │   ├── getMarkdown.d.ts
│       │   │           │   │   ├── graphvizRender.d.ts
│       │   │           │   │   ├── highlightRender.d.ts
│       │   │           │   │   ├── lazyLoadImageRender.d.ts
│       │   │           │   │   ├── markmapRender.d.ts
│       │   │           │   │   ├── mathRender.d.ts
│       │   │           │   │   ├── mediaRender.d.ts
│       │   │           │   │   ├── mermaidRender.d.ts
│       │   │           │   │   ├── mindmapRender.d.ts
│       │   │           │   │   ├── outlineRender.d.ts
│       │   │           │   │   ├── plantumlRender.d.ts
│       │   │           │   │   ├── previewRender.d.ts
│       │   │           │   │   ├── setLute.d.ts
│       │   │           │   │   └── speechRender.d.ts
│       │   │           │   ├── outline/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── preview/
│       │   │           │   │   ├── image.d.ts
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── resize/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── sv/
│       │   │           │   │   ├── combineFootnote.d.ts
│       │   │           │   │   ├── index.d.ts
│       │   │           │   │   ├── inputEvent.d.ts
│       │   │           │   │   ├── process.d.ts
│       │   │           │   │   └── processKeydown.d.ts
│       │   │           │   ├── tip/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── toolbar/
│       │   │           │   │   ├── Both.d.ts
│       │   │           │   │   ├── Br.d.ts
│       │   │           │   │   ├── CodeTheme.d.ts
│       │   │           │   │   ├── ContentTheme.d.ts
│       │   │           │   │   ├── Counter.d.ts
│       │   │           │   │   ├── Custom.d.ts
│       │   │           │   │   ├── Devtools.d.ts
│       │   │           │   │   ├── Divider.d.ts
│       │   │           │   │   ├── EditMode.d.ts
│       │   │           │   │   ├── Emoji.d.ts
│       │   │           │   │   ├── Export.d.ts
│       │   │           │   │   ├── Fullscreen.d.ts
│       │   │           │   │   ├── Headings.d.ts
│       │   │           │   │   ├── Help.d.ts
│       │   │           │   │   ├── Indent.d.ts
│       │   │           │   │   ├── Info.d.ts
│       │   │           │   │   ├── InsertAfter.d.ts
│       │   │           │   │   ├── InsertBefore.d.ts
│       │   │           │   │   ├── MenuItem.d.ts
│       │   │           │   │   ├── Outdent.d.ts
│       │   │           │   │   ├── Outline.d.ts
│       │   │           │   │   ├── Preview.d.ts
│       │   │           │   │   ├── Record.d.ts
│       │   │           │   │   ├── Redo.d.ts
│       │   │           │   │   ├── Undo.d.ts
│       │   │           │   │   ├── Upload.d.ts
│       │   │           │   │   ├── index.d.ts
│       │   │           │   │   └── setToolbar.d.ts
│       │   │           │   ├── ui/
│       │   │           │   │   ├── initUI.d.ts
│       │   │           │   │   ├── setCodeTheme.d.ts
│       │   │           │   │   ├── setContentTheme.d.ts
│       │   │           │   │   ├── setPreviewMode.d.ts
│       │   │           │   │   └── setTheme.d.ts
│       │   │           │   ├── undo/
│       │   │           │   │   └── index.d.ts
│       │   │           │   ├── upload/
│       │   │           │   │   ├── getElement.d.ts
│       │   │           │   │   ├── index.d.ts
│       │   │           │   │   └── setHeaders.d.ts
│       │   │           │   ├── util/
│       │   │           │   │   ├── Options.d.ts
│       │   │           │   │   ├── RecordMedia.d.ts
│       │   │           │   │   ├── addScript.d.ts
│       │   │           │   │   ├── addStyle.d.ts
│       │   │           │   │   ├── code160to32.d.ts
│       │   │           │   │   ├── compatibility.d.ts
│       │   │           │   │   ├── editorCommonEvent.d.ts
│       │   │           │   │   ├── fixBrowserBehavior.d.ts
│       │   │           │   │   ├── function.d.ts
│       │   │           │   │   ├── getSelectText.d.ts
│       │   │           │   │   ├── hasClosest.d.ts
│       │   │           │   │   ├── hasClosestByHeadings.d.ts
│       │   │           │   │   ├── highlightToolbar.d.ts
│       │   │           │   │   ├── hotKey.d.ts
│       │   │           │   │   ├── log.d.ts
│       │   │           │   │   ├── merge.d.ts
│       │   │           │   │   ├── processCode.d.ts
│       │   │           │   │   ├── selection.d.ts
│       │   │           │   │   └── toc.d.ts
│       │   │           │   └── wysiwyg/
│       │   │           │       ├── afterRenderEvent.d.ts
│       │   │           │       ├── highlightToolbarWYSIWYG.d.ts
│       │   │           │       ├── index.d.ts
│       │   │           │       ├── inlineTag.d.ts
│       │   │           │       ├── input.d.ts
│       │   │           │       ├── placeholder.d.ts
│       │   │           │       ├── processKeydown.d.ts
│       │   │           │       ├── renderDomByMd.d.ts
│       │   │           │       ├── setHeading.d.ts
│       │   │           │       ├── showCode.d.ts
│       │   │           │       └── toolbarEvent.d.ts
│       │   │           └── types/
│       │   │               └── index.d.ts
│       │   ├── readme.md
│       │   ├── src/
│       │   │   ├── @types/
│       │   │   │   ├── chat.ts
│       │   │   │   ├── i18next.d.ts
│       │   │   │   ├── index.ts
│       │   │   │   └── model.ts
│       │   │   ├── App.jsx
│       │   │   ├── Providers/
│       │   │   │   ├── AddedChatContext.tsx
│       │   │   │   ├── AgentsContext.tsx
│       │   │   │   ├── AgentsMapContext.tsx
│       │   │   │   ├── AnnouncerContext.tsx
│       │   │   │   ├── ArtifactContext.tsx
│       │   │   │   ├── AssistantsContext.tsx
│       │   │   │   ├── AssistantsMapContext.tsx
│       │   │   │   ├── BookmarkContext.tsx
│       │   │   │   ├── ChatContext.tsx
│       │   │   │   ├── ChatFormContext.tsx
│       │   │   │   ├── CodeBlockContext.tsx
│       │   │   │   ├── CustomFormContext.tsx
│       │   │   │   ├── DashboardContext.tsx
│       │   │   │   ├── EditorContext.tsx
│       │   │   │   ├── FileMapContext.tsx
│       │   │   │   ├── MessageContext.tsx
│       │   │   │   ├── SearchContext.tsx
│       │   │   │   ├── SetConvoContext.tsx
│       │   │   │   ├── ShareContext.tsx
│       │   │   │   ├── ToastContext.tsx
│       │   │   │   ├── ToolCallsMapContext.tsx
│       │   │   │   └── index.ts
│       │   │   ├── a11y/
│       │   │   │   ├── Announcer.tsx
│       │   │   │   ├── LiveAnnouncer.tsx
│       │   │   │   ├── LiveMessage.tsx
│       │   │   │   ├── LiveMessenger.tsx
│       │   │   │   ├── MessageBlock.tsx
│       │   │   │   └── index.ts
│       │   │   ├── api/
│       │   │   │   ├── apps.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── linsight.ts
│       │   │   │   └── request.ts
│       │   │   ├── common/
│       │   │   │   ├── a11y.ts
│       │   │   │   ├── agents-types.ts
│       │   │   │   ├── artifacts.ts
│       │   │   │   ├── assistants-types.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── menus.ts
│       │   │   │   ├── tools.ts
│       │   │   │   └── types.ts
│       │   │   ├── components/
│       │   │   │   ├── Artifacts/
│       │   │   │   │   ├── Artifact.tsx
│       │   │   │   │   ├── ArtifactButton.tsx
│       │   │   │   │   ├── ArtifactCodeEditor.tsx
│       │   │   │   │   ├── ArtifactPreview.tsx
│       │   │   │   │   ├── ArtifactTabs.tsx
│       │   │   │   │   ├── Artifacts.tsx
│       │   │   │   │   ├── Code.tsx
│       │   │   │   │   ├── DownloadArtifact.tsx
│       │   │   │   │   ├── Mermaid.tsx
│       │   │   │   │   ├── Thinking.tsx
│       │   │   │   │   ├── remarkCitationPlugin.tsx
│       │   │   │   │   └── useDebounceCodeBlock.ts
│       │   │   │   ├── Audio/
│       │   │   │   │   ├── TTS.tsx
│       │   │   │   │   └── Voices.tsx
│       │   │   │   ├── Auth/
│       │   │   │   │   ├── ApiErrorWatcher.tsx
│       │   │   │   │   ├── AuthLayout.tsx
│       │   │   │   │   ├── BlinkAnimation.tsx
│       │   │   │   │   ├── ErrorMessage.tsx
│       │   │   │   │   ├── Footer.tsx
│       │   │   │   │   ├── Login.tsx
│       │   │   │   │   ├── LoginForm.tsx
│       │   │   │   │   ├── Registration.tsx
│       │   │   │   │   ├── RequestPasswordReset.tsx
│       │   │   │   │   ├── ResetPassword.tsx
│       │   │   │   │   ├── SocialButton.tsx
│       │   │   │   │   ├── SocialLoginRender.tsx
│       │   │   │   │   ├── TwoFactorScreen.tsx
│       │   │   │   │   ├── VerifyEmail.tsx
│       │   │   │   │   ├── __tests__/
│       │   │   │   │   │   ├── Login.spec.tsx
│       │   │   │   │   │   ├── LoginForm.spec.tsx
│       │   │   │   │   │   └── Registration.spec.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Avator/
│       │   │   │   │   └── index.tsx
│       │   │   │   ├── Banners/
│       │   │   │   │   ├── Banner.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Bookmarks/
│       │   │   │   │   ├── BookmarkEditDialog.tsx
│       │   │   │   │   ├── BookmarkForm.tsx
│       │   │   │   │   ├── BookmarkItem.tsx
│       │   │   │   │   ├── BookmarkItems.tsx
│       │   │   │   │   ├── DeleteBookmarkButton.tsx
│       │   │   │   │   ├── EditBookmarkButton.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Chat/
│       │   │   │   │   ├── AddMultiConvo.tsx
│       │   │   │   │   ├── ChatView.tsx
│       │   │   │   │   ├── ConvoStarter.tsx
│       │   │   │   │   ├── ExportAndShareMenu.tsx
│       │   │   │   │   ├── Footer.tsx
│       │   │   │   │   ├── Header.tsx
│       │   │   │   │   ├── HeaderTitle.tsx
│       │   │   │   │   ├── Input/
│       │   │   │   │   │   ├── ActiveSetting.tsx
│       │   │   │   │   │   ├── AddedConvo.tsx
│       │   │   │   │   │   ├── AudioRecorder.tsx
│       │   │   │   │   │   ├── ChatForm.tsx
│       │   │   │   │   │   ├── ChatFormTools.tsx
│       │   │   │   │   │   ├── ChatKnowledge.tsx
│       │   │   │   │   │   ├── CircleRender.tsx
│       │   │   │   │   │   ├── CollapseChat.tsx
│       │   │   │   │   │   ├── Files/
│       │   │   │   │   │   │   ├── AttachFile.tsx
│       │   │   │   │   │   │   ├── AttachFileMenu.tsx
│       │   │   │   │   │   │   ├── DragDropModal.tsx
│       │   │   │   │   │   │   ├── DragDropOverlay.tsx
│       │   │   │   │   │   │   ├── DragDropWrapper.tsx
│       │   │   │   │   │   │   ├── FileContainer.tsx
│       │   │   │   │   │   │   ├── FileFormWrapper.tsx
│       │   │   │   │   │   │   ├── FilePreview.tsx
│       │   │   │   │   │   │   ├── FileRow.tsx
│       │   │   │   │   │   │   ├── FileUpload.tsx
│       │   │   │   │   │   │   ├── FilesView.tsx
│       │   │   │   │   │   │   ├── Image.tsx
│       │   │   │   │   │   │   ├── ImagePreview.tsx
│       │   │   │   │   │   │   ├── MyKnowledgeView.tsx
│       │   │   │   │   │   │   ├── ProgressCircle.tsx
│       │   │   │   │   │   │   ├── RemoveFile.tsx
│       │   │   │   │   │   │   ├── SourceIcon.tsx
│       │   │   │   │   │   │   └── Table/
│       │   │   │   │   │   │       ├── AttachFileButton.tsx
│       │   │   │   │   │   │       ├── Columns.tsx
│       │   │   │   │   │   │       ├── DataTable.tsx
│       │   │   │   │   │   │       ├── DataTableKnowledge.tsx
│       │   │   │   │   │   │       ├── KnowledgeColumns.tsx
│       │   │   │   │   │   │       ├── SortFilterHeader.tsx
│       │   │   │   │   │   │       ├── TemplateTable.tsx
│       │   │   │   │   │   │       ├── fakeData.ts
│       │   │   │   │   │   │       └── index.ts
│       │   │   │   │   │   ├── HeaderOptions.tsx
│       │   │   │   │   │   ├── Mention.tsx
│       │   │   │   │   │   ├── MentionItem.tsx
│       │   │   │   │   │   ├── OptionsPopover.tsx
│       │   │   │   │   │   ├── PopoverButtons.tsx
│       │   │   │   │   │   ├── PromptsCommand.tsx
│       │   │   │   │   │   ├── SameSopSpan.tsx
│       │   │   │   │   │   ├── SendButton.tsx
│       │   │   │   │   │   ├── StopButton.tsx
│       │   │   │   │   │   ├── StreamAudio.tsx
│       │   │   │   │   │   ├── TemporaryChat.tsx
│       │   │   │   │   │   └── TextareaHeader.tsx
│       │   │   │   │   ├── InviteCode.tsx
│       │   │   │   │   ├── Landing.tsx
│       │   │   │   │   ├── Menus/
│       │   │   │   │   │   ├── BookmarkMenu.tsx
│       │   │   │   │   │   ├── Bookmarks/
│       │   │   │   │   │   │   └── BookmarkMenuItems.tsx
│       │   │   │   │   │   ├── Endpoints/
│       │   │   │   │   │   │   ├── Icons.tsx
│       │   │   │   │   │   │   ├── MenuItem.tsx
│       │   │   │   │   │   │   ├── MenuItems.tsx
│       │   │   │   │   │   │   └── UnknownIcon.tsx
│       │   │   │   │   │   ├── EndpointsMenu.tsx
│       │   │   │   │   │   ├── HeaderNewChat.tsx
│       │   │   │   │   │   ├── Models/
│       │   │   │   │   │   │   ├── MenuButton.tsx
│       │   │   │   │   │   │   ├── ModelSpec.tsx
│       │   │   │   │   │   │   ├── ModelSpecs.tsx
│       │   │   │   │   │   │   ├── ModelSpecsMenu.tsx
│       │   │   │   │   │   │   ├── SpecIcon.tsx
│       │   │   │   │   │   │   └── fakeData.ts
│       │   │   │   │   │   ├── Presets/
│       │   │   │   │   │   │   ├── EditPresetDialog.tsx
│       │   │   │   │   │   │   ├── PresetItems.tsx
│       │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   ├── PresetsMenu.tsx
│       │   │   │   │   │   ├── UI/
│       │   │   │   │   │   │   ├── MenuItem.tsx
│       │   │   │   │   │   │   ├── MenuSeparator.tsx
│       │   │   │   │   │   │   ├── TitleButton.tsx
│       │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   └── index.ts
│       │   │   │   │   ├── Messages/
│       │   │   │   │   │   ├── Content/
│       │   │   │   │   │   │   ├── ActionIcon.tsx
│       │   │   │   │   │   │   ├── CancelledIcon.tsx
│       │   │   │   │   │   │   ├── CodeAnalyze.tsx
│       │   │   │   │   │   │   ├── Container.tsx
│       │   │   │   │   │   │   ├── ContentParts.tsx
│       │   │   │   │   │   │   ├── DialogImage.tsx
│       │   │   │   │   │   │   ├── Echarts.tsx
│       │   │   │   │   │   │   ├── EditMessage.tsx
│       │   │   │   │   │   │   ├── Files.tsx
│       │   │   │   │   │   │   ├── FinishedIcon.tsx
│       │   │   │   │   │   │   ├── Image.tsx
│       │   │   │   │   │   │   ├── ImageGen.tsx
│       │   │   │   │   │   │   ├── InProgressCall.tsx
│       │   │   │   │   │   │   ├── Markdown.tsx
│       │   │   │   │   │   │   ├── MarkdownLite.tsx
│       │   │   │   │   │   │   ├── Mermaid.tsx
│       │   │   │   │   │   │   ├── MessageContent.tsx
│       │   │   │   │   │   │   ├── Part.tsx
│       │   │   │   │   │   │   ├── Parts/
│       │   │   │   │   │   │   │   ├── Attachment.tsx
│       │   │   │   │   │   │   │   ├── CodeProgress.tsx
│       │   │   │   │   │   │   │   ├── EditTextPart.tsx
│       │   │   │   │   │   │   │   ├── ExecuteCode.tsx
│       │   │   │   │   │   │   │   ├── LogContent.tsx
│       │   │   │   │   │   │   │   ├── LogLink.tsx
│       │   │   │   │   │   │   │   ├── Reasoning.tsx
│       │   │   │   │   │   │   │   └── Text.tsx
│       │   │   │   │   │   │   ├── ProgressCircle.tsx
│       │   │   │   │   │   │   ├── ProgressText.tsx
│       │   │   │   │   │   │   ├── RetrievalCall.tsx
│       │   │   │   │   │   │   ├── RetrievalIcon.tsx
│       │   │   │   │   │   │   ├── SearchContent.tsx
│       │   │   │   │   │   │   ├── SearchWebUrls.tsx
│       │   │   │   │   │   │   ├── ToolCall.tsx
│       │   │   │   │   │   │   ├── ToolPopover.tsx
│       │   │   │   │   │   │   └── WrenchIcon.tsx
│       │   │   │   │   │   ├── HoverButtons.tsx
│       │   │   │   │   │   ├── Message.tsx
│       │   │   │   │   │   ├── MessageAudio.tsx
│       │   │   │   │   │   ├── MessageIcon.tsx
│       │   │   │   │   │   ├── MessageParts.tsx
│       │   │   │   │   │   ├── MessagesView.tsx
│       │   │   │   │   │   ├── MinimalHoverButtons.tsx
│       │   │   │   │   │   ├── MinimalMessages.tsx
│       │   │   │   │   │   ├── MultiMessage.tsx
│       │   │   │   │   │   ├── SearchButtons.tsx
│       │   │   │   │   │   ├── SearchMessage.tsx
│       │   │   │   │   │   ├── SiblingSwitch.tsx
│       │   │   │   │   │   ├── SubRow.tsx
│       │   │   │   │   │   └── ui/
│       │   │   │   │   │       ├── MessageRender.tsx
│       │   │   │   │   │       └── PlaceholderRow.tsx
│       │   │   │   │   ├── Presentation.tsx
│       │   │   │   │   ├── PromptCard.tsx
│       │   │   │   │   ├── Prompts.tsx
│       │   │   │   │   └── SegmentSelector.tsx
│       │   │   │   ├── Conversations/
│       │   │   │   │   ├── Conversations.tsx
│       │   │   │   │   ├── Convo.tsx
│       │   │   │   │   ├── ConvoOptions/
│       │   │   │   │   │   ├── ConvoOptions.tsx
│       │   │   │   │   │   ├── DeleteButton.tsx
│       │   │   │   │   │   ├── ShareButton.tsx
│       │   │   │   │   │   ├── SharedLinkButton.tsx
│       │   │   │   │   │   └── index.ts
│       │   │   │   │   ├── Fork.tsx
│       │   │   │   │   ├── HoverToggle.tsx
│       │   │   │   │   ├── Pages.tsx
│       │   │   │   │   ├── ToggleContext.ts
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Endpoints/
│       │   │   │   │   ├── AlternativeSettings.tsx
│       │   │   │   │   ├── ConvoIcon.tsx
│       │   │   │   │   ├── ConvoIconURL.tsx
│       │   │   │   │   ├── EndpointIcon.tsx
│       │   │   │   │   ├── EndpointSettings.tsx
│       │   │   │   │   ├── Icon.tsx
│       │   │   │   │   ├── MessageEndpointIcon.tsx
│       │   │   │   │   ├── MinimalIcon.tsx
│       │   │   │   │   ├── SaveAsPresetDialog.tsx
│       │   │   │   │   ├── Settings/
│       │   │   │   │   │   ├── Advanced.tsx
│       │   │   │   │   │   ├── AgentSettings.tsx
│       │   │   │   │   │   ├── Anthropic.tsx
│       │   │   │   │   │   ├── Assistants.tsx
│       │   │   │   │   │   ├── Bedrock.tsx
│       │   │   │   │   │   ├── Examples.tsx
│       │   │   │   │   │   ├── Google.tsx
│       │   │   │   │   │   ├── MultiView/
│       │   │   │   │   │   │   ├── GoogleSettings.tsx
│       │   │   │   │   │   │   ├── PluginSettings.tsx
│       │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   ├── OpenAI.tsx
│       │   │   │   │   │   ├── OptionHover.tsx
│       │   │   │   │   │   ├── Plugins.tsx
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   └── settings.ts
│       │   │   │   │   ├── URLIcon.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Files/
│       │   │   │   │   ├── ActionButton.tsx
│       │   │   │   │   ├── DeleteIconButton.tsx
│       │   │   │   │   ├── FileDashboardView.tsx
│       │   │   │   │   ├── FileList/
│       │   │   │   │   │   ├── DataTableFile.tsx
│       │   │   │   │   │   ├── DataTableFilePreview.tsx
│       │   │   │   │   │   ├── EmptyFilePreview.tsx
│       │   │   │   │   │   ├── FileList.tsx
│       │   │   │   │   │   ├── FileListItem.tsx
│       │   │   │   │   │   ├── FileListItem2.tsx
│       │   │   │   │   │   ├── FilePreview.tsx
│       │   │   │   │   │   ├── FileSidePanel.tsx
│       │   │   │   │   │   ├── FileTableColumns.tsx
│       │   │   │   │   │   ├── UploadFileButton.tsx
│       │   │   │   │   │   └── UploadFileModal.tsx
│       │   │   │   │   ├── FilesListView.tsx
│       │   │   │   │   ├── FilesSectionSelector.tsx
│       │   │   │   │   ├── VectorStore/
│       │   │   │   │   │   ├── EmptyVectorStorePreview.tsx
│       │   │   │   │   │   ├── VectorStoreButton.tsx
│       │   │   │   │   │   ├── VectorStoreFilter.tsx
│       │   │   │   │   │   ├── VectorStoreList.tsx
│       │   │   │   │   │   ├── VectorStoreListItem.tsx
│       │   │   │   │   │   ├── VectorStorePreview.tsx
│       │   │   │   │   │   └── VectorStoreSidePanel.tsx
│       │   │   │   │   └── VectorStoreView.tsx
│       │   │   │   ├── Input/
│       │   │   │   │   ├── Generations/
│       │   │   │   │   │   ├── Button.tsx
│       │   │   │   │   │   ├── Continue.tsx
│       │   │   │   │   │   ├── Regenerate.tsx
│       │   │   │   │   │   ├── Stop.tsx
│       │   │   │   │   │   └── __tests__/
│       │   │   │   │   │       ├── Button.spec.tsx
│       │   │   │   │   │       ├── Continue.spec.tsx
│       │   │   │   │   │       ├── Regenerate.spec.tsx
│       │   │   │   │   │       └── Stop.spec.tsx
│       │   │   │   │   ├── ModelSelect/
│       │   │   │   │   │   ├── Anthropic.tsx
│       │   │   │   │   │   ├── ChatGPT.tsx
│       │   │   │   │   │   ├── Google.tsx
│       │   │   │   │   │   ├── ModelSelect.tsx
│       │   │   │   │   │   ├── OpenAI.tsx
│       │   │   │   │   │   ├── PluginsByIndex.tsx
│       │   │   │   │   │   ├── TemporaryChat.tsx
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   └── options.ts
│       │   │   │   │   └── SetKeyDialog/
│       │   │   │   │       ├── CustomEndpoint.tsx
│       │   │   │   │       ├── GoogleConfig.tsx
│       │   │   │   │       ├── HelpText.tsx
│       │   │   │   │       ├── InputWithLabel.tsx
│       │   │   │   │       ├── OpenAIConfig.tsx
│       │   │   │   │       ├── OtherConfig.tsx
│       │   │   │   │       ├── SetKeyDialog.tsx
│       │   │   │   │       └── index.ts
│       │   │   │   ├── Messages/
│       │   │   │   │   ├── Content/
│       │   │   │   │   │   ├── CodeBlock.tsx
│       │   │   │   │   │   ├── Container.tsx
│       │   │   │   │   │   ├── Error.tsx
│       │   │   │   │   │   ├── Plugin.tsx
│       │   │   │   │   │   ├── ResultSwitcher.tsx
│       │   │   │   │   │   ├── RunCode.tsx
│       │   │   │   │   │   ├── SubRow.tsx
│       │   │   │   │   │   └── index.ts
│       │   │   │   │   ├── ContentRender.tsx
│       │   │   │   │   ├── MessageContent.tsx
│       │   │   │   │   └── ScrollToBottom.tsx
│       │   │   │   ├── Nav/
│       │   │   │   │   ├── AccountSettings.tsx
│       │   │   │   │   ├── Bookmarks/
│       │   │   │   │   │   ├── BookmarkNav.tsx
│       │   │   │   │   │   └── BookmarkNavItems.tsx
│       │   │   │   │   ├── ExportConversation/
│       │   │   │   │   │   ├── ExportModal.tsx
│       │   │   │   │   │   └── index.ts
│       │   │   │   │   ├── MobileNav.tsx
│       │   │   │   │   ├── Nav.spec.tsx
│       │   │   │   │   ├── Nav.tsx
│       │   │   │   │   ├── NavLink.tsx
│       │   │   │   │   ├── NavToggle.tsx
│       │   │   │   │   ├── NewChat.tsx
│       │   │   │   │   ├── SearchBar.tsx
│       │   │   │   │   ├── Settings.tsx
│       │   │   │   │   ├── SettingsTabs/
│       │   │   │   │   │   ├── Account/
│       │   │   │   │   │   │   ├── Account.tsx
│       │   │   │   │   │   │   ├── Avatar.tsx
│       │   │   │   │   │   │   ├── BackupCodesItem.tsx
│       │   │   │   │   │   │   ├── DeleteAccount.tsx
│       │   │   │   │   │   │   ├── DisableTwoFactorToggle.tsx
│       │   │   │   │   │   │   ├── DisplayUsernameMessages.tsx
│       │   │   │   │   │   │   ├── TwoFactorAuthentication.tsx
│       │   │   │   │   │   │   └── TwoFactorPhases/
│       │   │   │   │   │   │       ├── BackupPhase.tsx
│       │   │   │   │   │   │       ├── DisablePhase.tsx
│       │   │   │   │   │   │       ├── QRPhase.tsx
│       │   │   │   │   │   │       ├── SetupPhase.tsx
│       │   │   │   │   │   │       ├── VerifyPhase.tsx
│       │   │   │   │   │   │       └── index.ts
│       │   │   │   │   │   ├── Beta/
│       │   │   │   │   │   │   ├── Beta.tsx
│       │   │   │   │   │   │   └── CodeArtifacts.tsx
│       │   │   │   │   │   ├── Chat/
│       │   │   │   │   │   │   ├── Chat.tsx
│       │   │   │   │   │   │   ├── ChatDirection.tsx
│       │   │   │   │   │   │   ├── EnterToSend.tsx
│       │   │   │   │   │   │   ├── FontSizeSelector.tsx
│       │   │   │   │   │   │   ├── ForkSettings.tsx
│       │   │   │   │   │   │   ├── LaTeXParsing.tsx
│       │   │   │   │   │   │   ├── MaximizeChatSpace.tsx
│       │   │   │   │   │   │   ├── ModularChat.tsx
│       │   │   │   │   │   │   ├── SaveDraft.tsx
│       │   │   │   │   │   │   ├── ScrollButton.tsx
│       │   │   │   │   │   │   ├── ShowCodeSwitch.tsx
│       │   │   │   │   │   │   └── ShowThinking.tsx
│       │   │   │   │   │   ├── Commands/
│       │   │   │   │   │   │   ├── AtCommandSwitch.tsx
│       │   │   │   │   │   │   ├── Commands.tsx
│       │   │   │   │   │   │   ├── PlusCommandSwitch.tsx
│       │   │   │   │   │   │   └── SlashCommandSwitch.tsx
│       │   │   │   │   │   ├── DangerButton.tsx
│       │   │   │   │   │   ├── Data/
│       │   │   │   │   │   │   ├── ClearChats.tsx
│       │   │   │   │   │   │   ├── Data.tsx
│       │   │   │   │   │   │   ├── DeleteCache.tsx
│       │   │   │   │   │   │   ├── ImportConversations.tsx
│       │   │   │   │   │   │   ├── RevokeAllKeys.tsx
│       │   │   │   │   │   │   ├── RevokeKeysButton.tsx
│       │   │   │   │   │   │   └── SharedLinks.tsx
│       │   │   │   │   │   ├── General/
│       │   │   │   │   │   │   ├── ArchivedChats.tsx
│       │   │   │   │   │   │   ├── ArchivedChatsTable.tsx
│       │   │   │   │   │   │   ├── AutoScrollSwitch.spec.tsx
│       │   │   │   │   │   │   ├── AutoScrollSwitch.tsx
│       │   │   │   │   │   │   ├── General.tsx
│       │   │   │   │   │   │   ├── HideSidePanelSwitch.tsx
│       │   │   │   │   │   │   ├── LangSelector.spec.tsx
│       │   │   │   │   │   │   ├── ThemeSelector.spec.tsx
│       │   │   │   │   │   │   └── UserMsgMarkdownSwitch.tsx
│       │   │   │   │   │   ├── HoverCardSettings.tsx
│       │   │   │   │   │   ├── Speech/
│       │   │   │   │   │   │   ├── ConversationModeSwitch.spec.tsx
│       │   │   │   │   │   │   ├── ConversationModeSwitch.tsx
│       │   │   │   │   │   │   ├── STT/
│       │   │   │   │   │   │   │   ├── AutoSendTextSelector.tsx
│       │   │   │   │   │   │   │   ├── AutoTranscribeAudioSwitch.tsx
│       │   │   │   │   │   │   │   ├── DecibelSelector.tsx
│       │   │   │   │   │   │   │   ├── EngineSTTDropdown.tsx
│       │   │   │   │   │   │   │   ├── LanguageSTTDropdown.tsx
│       │   │   │   │   │   │   │   ├── SpeechToTextSwitch.tsx
│       │   │   │   │   │   │   │   ├── __tests__/
│       │   │   │   │   │   │   │   │   ├── AutoTranscribeAudioSwitch.spec.tsx
│       │   │   │   │   │   │   │   │   └── SpeechToTextSwitch.spec.tsx
│       │   │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   │   ├── Speech.tsx
│       │   │   │   │   │   │   └── TTS/
│       │   │   │   │   │   │       ├── AutomaticPlaybackSwitch.tsx
│       │   │   │   │   │   │       ├── CacheTTSSwitch.tsx
│       │   │   │   │   │   │       ├── CloudBrowserVoicesSwitch.tsx
│       │   │   │   │   │   │       ├── EngineTTSDropdown.tsx
│       │   │   │   │   │   │       ├── PlaybackRate.tsx
│       │   │   │   │   │   │       ├── TextToSpeechSwitch.tsx
│       │   │   │   │   │   │       ├── VoiceDropdown.tsx
│       │   │   │   │   │   │       ├── __tests__/
│       │   │   │   │   │   │       │   ├── AutomaticPlaybackSwitch.spec.tsx
│       │   │   │   │   │   │       │   ├── CacheTTSSwitch.spec.tsx
│       │   │   │   │   │   │       │   ├── CloudBrowserVoicesSwitch.spec.tsx
│       │   │   │   │   │   │       │   └── TextToSpeechSwitch.spec.tsx
│       │   │   │   │   │   │       └── index.ts
│       │   │   │   │   │   └── index.ts
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Plugins/
│       │   │   │   │   ├── Store/
│       │   │   │   │   │   ├── PluginAuthForm.tsx
│       │   │   │   │   │   ├── PluginPagination.tsx
│       │   │   │   │   │   ├── PluginStoreDialog.tsx
│       │   │   │   │   │   ├── PluginStoreItem.tsx
│       │   │   │   │   │   ├── PluginStoreLinkButton.tsx
│       │   │   │   │   │   ├── PluginTooltip.tsx
│       │   │   │   │   │   ├── __tests__/
│       │   │   │   │   │   │   ├── PluginAuthForm.spec.tsx
│       │   │   │   │   │   │   ├── PluginPagination.spec.tsx
│       │   │   │   │   │   │   ├── PluginStoreDialog.spec.tsx
│       │   │   │   │   │   │   └── PluginStoreItem.spec.tsx
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   └── styles.module.css
│       │   │   │   │   └── index.ts
│       │   │   │   ├── PreviewFile/
│       │   │   │   │   ├── DocxFileViewer.tsx
│       │   │   │   │   ├── FileView.tsx
│       │   │   │   │   ├── TxtFileViewer.tsx
│       │   │   │   │   └── index.tsx
│       │   │   │   ├── Prompts/
│       │   │   │   │   ├── AdminSettings.tsx
│       │   │   │   │   ├── AdvancedSwitch.tsx
│       │   │   │   │   ├── BackToChat.tsx
│       │   │   │   │   ├── Command.tsx
│       │   │   │   │   ├── DeleteVersion.tsx
│       │   │   │   │   ├── Description.tsx
│       │   │   │   │   ├── EmptyPromptPreview.tsx
│       │   │   │   │   ├── Groups/
│       │   │   │   │   │   ├── AlwaysMakeProd.tsx
│       │   │   │   │   │   ├── AutoSendPrompt.tsx
│       │   │   │   │   │   ├── CategoryIcon.tsx
│       │   │   │   │   │   ├── CategorySelector.tsx
│       │   │   │   │   │   ├── ChatGroupItem.tsx
│       │   │   │   │   │   ├── CreatePromptForm.tsx
│       │   │   │   │   │   ├── DashGroupItem.tsx
│       │   │   │   │   │   ├── FilterPrompts.tsx
│       │   │   │   │   │   ├── GroupSidePanel.tsx
│       │   │   │   │   │   ├── List.tsx
│       │   │   │   │   │   ├── ListCard.tsx
│       │   │   │   │   │   ├── NoPromptGroup.tsx
│       │   │   │   │   │   ├── PanelNavigation.tsx
│       │   │   │   │   │   ├── VariableDialog.tsx
│       │   │   │   │   │   └── VariableForm.tsx
│       │   │   │   │   ├── ManagePrompts.tsx
│       │   │   │   │   ├── Markdown.tsx
│       │   │   │   │   ├── PreviewLabels.tsx
│       │   │   │   │   ├── PreviewPrompt.tsx
│       │   │   │   │   ├── PromptDetails.tsx
│       │   │   │   │   ├── PromptEditor.tsx
│       │   │   │   │   ├── PromptForm.tsx
│       │   │   │   │   ├── PromptName.tsx
│       │   │   │   │   ├── PromptVariables.tsx
│       │   │   │   │   ├── PromptVersions.tsx
│       │   │   │   │   ├── PromptsAccordion.tsx
│       │   │   │   │   ├── PromptsView.tsx
│       │   │   │   │   ├── SharePrompt.tsx
│       │   │   │   │   ├── SkeletonForm.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Share/
│       │   │   │   │   ├── Message.tsx
│       │   │   │   │   ├── MessageIcon.tsx
│       │   │   │   │   ├── MessagesView.tsx
│       │   │   │   │   ├── MultiMessage.tsx
│       │   │   │   │   ├── ShareChat.tsx
│       │   │   │   │   └── ShareView.tsx
│       │   │   │   ├── SidePanel/
│       │   │   │   │   ├── AgentSwitcher.tsx
│       │   │   │   │   ├── Agents/
│       │   │   │   │   │   ├── ActionsInput.tsx
│       │   │   │   │   │   ├── ActionsPanel.tsx
│       │   │   │   │   │   ├── ActionsTable/
│       │   │   │   │   │   │   ├── Columns.tsx
│       │   │   │   │   │   │   ├── Table.tsx
│       │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   ├── AdminSettings.tsx
│       │   │   │   │   │   ├── AgentAvatar.tsx
│       │   │   │   │   │   ├── AgentConfig.tsx
│       │   │   │   │   │   ├── AgentPanel.tsx
│       │   │   │   │   │   ├── AgentPanelSkeleton.tsx
│       │   │   │   │   │   ├── AgentPanelSwitch.tsx
│       │   │   │   │   │   ├── AgentSelect.tsx
│       │   │   │   │   │   ├── AgentTool.tsx
│       │   │   │   │   │   ├── Artifacts.tsx
│       │   │   │   │   │   ├── Code/
│       │   │   │   │   │   │   ├── Action.tsx
│       │   │   │   │   │   │   ├── ApiKeyDialog.tsx
│       │   │   │   │   │   │   ├── Files.tsx
│       │   │   │   │   │   │   └── Form.tsx
│       │   │   │   │   │   ├── DeleteButton.tsx
│       │   │   │   │   │   ├── DuplicateAgent.tsx
│       │   │   │   │   │   ├── FileSearch.tsx
│       │   │   │   │   │   ├── FileSearchCheckbox.tsx
│       │   │   │   │   │   ├── ImageVision.tsx
│       │   │   │   │   │   ├── Images.tsx
│       │   │   │   │   │   ├── ModelPanel.tsx
│       │   │   │   │   │   ├── Retrieval.tsx
│       │   │   │   │   │   ├── Sequential/
│       │   │   │   │   │   │   ├── HideSequential.tsx
│       │   │   │   │   │   │   └── SequentialAgents.tsx
│       │   │   │   │   │   └── ShareAgent.tsx
│       │   │   │   │   ├── AssistantSwitcher.tsx
│       │   │   │   │   ├── Bookmarks/
│       │   │   │   │   │   ├── BookmarkPanel.tsx
│       │   │   │   │   │   ├── BookmarkTable.tsx
│       │   │   │   │   │   └── BookmarkTableRow.tsx
│       │   │   │   │   ├── Builder/
│       │   │   │   │   │   ├── Action.tsx
│       │   │   │   │   │   ├── ActionCallback.tsx
│       │   │   │   │   │   ├── ActionsAuth.tsx
│       │   │   │   │   │   ├── ActionsInput.tsx
│       │   │   │   │   │   ├── ActionsPanel.tsx
│       │   │   │   │   │   ├── ActionsTable/
│       │   │   │   │   │   │   ├── Columns.tsx
│       │   │   │   │   │   │   ├── Table.tsx
│       │   │   │   │   │   │   └── index.ts
│       │   │   │   │   │   ├── AppendDateCheckbox.tsx
│       │   │   │   │   │   ├── AssistantAvatar.tsx
│       │   │   │   │   │   ├── AssistantConversationStarters.tsx
│       │   │   │   │   │   ├── AssistantPanel.tsx
│       │   │   │   │   │   ├── AssistantSelect.tsx
│       │   │   │   │   │   ├── AssistantTool.tsx
│       │   │   │   │   │   ├── CapabilitiesForm.tsx
│       │   │   │   │   │   ├── Code.tsx
│       │   │   │   │   │   ├── CodeFiles.tsx
│       │   │   │   │   │   ├── ContextButton.tsx
│       │   │   │   │   │   ├── ImageVision.tsx
│       │   │   │   │   │   ├── Images.tsx
│       │   │   │   │   │   ├── Knowledge.tsx
│       │   │   │   │   │   ├── PanelSwitch.tsx
│       │   │   │   │   │   └── Retrieval.tsx
│       │   │   │   │   ├── Files/
│       │   │   │   │   │   ├── Panel.tsx
│       │   │   │   │   │   ├── PanelColumns.tsx
│       │   │   │   │   │   ├── PanelFileCell.tsx
│       │   │   │   │   │   └── PanelTable.tsx
│       │   │   │   │   ├── ModelSwitcher.tsx
│       │   │   │   │   ├── Nav.tsx
│       │   │   │   │   ├── Parameters/
│       │   │   │   │   │   ├── DynamicCheckbox.tsx
│       │   │   │   │   │   ├── DynamicCombobox.tsx
│       │   │   │   │   │   ├── DynamicDropdown.tsx
│       │   │   │   │   │   ├── DynamicInput.tsx
│       │   │   │   │   │   ├── DynamicSlider.tsx
│       │   │   │   │   │   ├── DynamicSwitch.tsx
│       │   │   │   │   │   ├── DynamicTags.tsx
│       │   │   │   │   │   ├── DynamicTextarea.tsx
│       │   │   │   │   │   ├── OptionHover.tsx
│       │   │   │   │   │   ├── Panel.tsx
│       │   │   │   │   │   ├── components.tsx
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   └── settings.ts
│       │   │   │   │   ├── SidePanel.tsx
│       │   │   │   │   ├── SidePanelGroup.tsx
│       │   │   │   │   ├── Switcher.tsx
│       │   │   │   │   ├── data.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Sop/
│       │   │   │   │   ├── FilePreview.tsx
│       │   │   │   │   ├── FilePreviewDrawer.tsx
│       │   │   │   │   ├── Header.tsx
│       │   │   │   │   ├── SOPEditor.tsx
│       │   │   │   │   ├── SopMarkdown.tsx
│       │   │   │   │   ├── SopToolsDown.tsx
│       │   │   │   │   ├── TaskControls.tsx
│       │   │   │   │   ├── TaskFiles.tsx
│       │   │   │   │   ├── TaskFlow.tsx
│       │   │   │   │   ├── TaskFlowContent.tsx
│       │   │   │   │   ├── components/
│       │   │   │   │   │   ├── CopyButton.tsx
│       │   │   │   │   │   ├── DownloadResultFileBtn.tsx
│       │   │   │   │   │   ├── ErrorDisplay.tsx
│       │   │   │   │   │   ├── SearchKnowledgeSheet.tsx
│       │   │   │   │   │   ├── SopLoading.tsx
│       │   │   │   │   │   ├── SvgImage.tsx
│       │   │   │   │   │   ├── UserInput.tsx
│       │   │   │   │   │   └── WebSearchSheet.tsx
│       │   │   │   │   └── index.tsx
│       │   │   │   ├── Tools/
│       │   │   │   │   ├── ToolItem.tsx
│       │   │   │   │   ├── ToolSelectDialog.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   ├── Voice/
│       │   │   │   │   ├── SpeechToText.tsx
│       │   │   │   │   ├── TextToSpeechButton.tsx
│       │   │   │   │   └── textToSpeechStore.tsx
│       │   │   │   ├── WebView.tsx
│       │   │   │   ├── index.ts
│       │   │   │   ├── svg/
│       │   │   │   │   ├── AnthropicIcon.tsx
│       │   │   │   │   ├── AnthropicMinimalIcon.tsx
│       │   │   │   │   ├── AppleIcon.tsx
│       │   │   │   │   ├── ArchiveIcon.tsx
│       │   │   │   │   ├── AssistantIcon.tsx
│       │   │   │   │   ├── AttachmentIcon.tsx
│       │   │   │   │   ├── AzureMinimalIcon.tsx
│       │   │   │   │   ├── BedrockIcon.tsx
│       │   │   │   │   ├── BirthdayIcon.tsx
│       │   │   │   │   ├── Blocks.tsx
│       │   │   │   │   ├── CautionIcon.tsx
│       │   │   │   │   ├── ChatGPTMinimalIcon.tsx
│       │   │   │   │   ├── ChatIcon.tsx
│       │   │   │   │   ├── CheckMark.tsx
│       │   │   │   │   ├── CircleHelpIcon.tsx
│       │   │   │   │   ├── Clipboard.tsx
│       │   │   │   │   ├── CodeyIcon.tsx
│       │   │   │   │   ├── ContinueIcon.tsx
│       │   │   │   │   ├── ConvoIcon.tsx
│       │   │   │   │   ├── CrossIcon.tsx
│       │   │   │   │   ├── CustomMinimalIcon.tsx
│       │   │   │   │   ├── DarkModeIcon.tsx
│       │   │   │   │   ├── DataIcon.tsx
│       │   │   │   │   ├── DiscordIcon.tsx
│       │   │   │   │   ├── DislikeIcon.tsx
│       │   │   │   │   ├── DotsIcon.tsx
│       │   │   │   │   ├── DownIcon.tsx
│       │   │   │   │   ├── EditIcon.tsx
│       │   │   │   │   ├── ExperimentIcon.tsx
│       │   │   │   │   ├── FacebookIcon.tsx
│       │   │   │   │   ├── Files/
│       │   │   │   │   │   ├── CodePaths.tsx
│       │   │   │   │   │   ├── FileIcon.tsx
│       │   │   │   │   │   ├── FilePaths.tsx
│       │   │   │   │   │   ├── SheetPaths.tsx
│       │   │   │   │   │   └── TextPaths.tsx
│       │   │   │   │   ├── GPTIcon.tsx
│       │   │   │   │   ├── GearIcon.tsx
│       │   │   │   │   ├── GeminiIcon.tsx
│       │   │   │   │   ├── GithubIcon.tsx
│       │   │   │   │   ├── GoogleIcon.tsx
│       │   │   │   │   ├── GoogleIconChat.tsx
│       │   │   │   │   ├── GoogleMinimalIcon.tsx
│       │   │   │   │   ├── LightModeIcon.tsx
│       │   │   │   │   ├── LightningIcon.tsx
│       │   │   │   │   ├── LikeIcon.tsx
│       │   │   │   │   ├── LinkIcon.tsx
│       │   │   │   │   ├── ListeningIcon.tsx
│       │   │   │   │   ├── LockIcon.tsx
│       │   │   │   │   ├── LogOutIcon.tsx
│       │   │   │   │   ├── MessagesSquared.tsx
│       │   │   │   │   ├── MinimalPlugin.tsx
│       │   │   │   │   ├── NewChatIcon.tsx
│       │   │   │   │   ├── OpenAIMinimalIcon.tsx
│       │   │   │   │   ├── OpenIDIcon.tsx
│       │   │   │   │   ├── PaLMIcon.tsx
│       │   │   │   │   ├── PaLMinimalIcon.tsx
│       │   │   │   │   ├── Panel.tsx
│       │   │   │   │   ├── PinIcon.tsx
│       │   │   │   │   ├── Plugin.tsx
│       │   │   │   │   ├── RegenerateIcon.tsx
│       │   │   │   │   ├── RenameIcon.tsx
│       │   │   │   │   ├── SaveIcon.tsx
│       │   │   │   │   ├── SendIcon.tsx
│       │   │   │   │   ├── SendMessageIcon.tsx
│       │   │   │   │   ├── Sparkles.tsx
│       │   │   │   │   ├── SpeechIcon.tsx
│       │   │   │   │   ├── Spinner.tsx
│       │   │   │   │   ├── StopGeneratingIcon.tsx
│       │   │   │   │   ├── SunIcon.tsx
│       │   │   │   │   ├── SwitchIcon.tsx
│       │   │   │   │   ├── TrashIcon.tsx
│       │   │   │   │   ├── UserIcon.tsx
│       │   │   │   │   ├── VolumeIcon.tsx
│       │   │   │   │   ├── VolumeMuteIcon.tsx
│       │   │   │   │   └── index.ts
│       │   │   │   └── ui/
│       │   │   │       ├── Accordion.tsx
│       │   │   │       ├── AlertDialog.tsx
│       │   │   │       ├── AnimatedSearchInput.tsx
│       │   │   │       ├── Badge.tsx
│       │   │   │       ├── Breadcrumb.tsx
│       │   │   │       ├── Button.tsx
│       │   │   │       ├── Card.tsx
│       │   │   │       ├── Checkbox.tsx
│       │   │   │       ├── Collapsible.tsx
│       │   │   │       ├── Combobox.tsx
│       │   │   │       ├── ControlCombobox.tsx
│       │   │   │       ├── DataTable.tsx
│       │   │   │       ├── DataTableColumnHeader.tsx
│       │   │   │       ├── DelayedRender.tsx
│       │   │   │       ├── Dialog.tsx
│       │   │   │       ├── DialogTemplate.spec.tsx
│       │   │   │       ├── DialogTemplate.tsx
│       │   │   │       ├── Dropdown.tsx
│       │   │   │       ├── DropdownMenu.tsx
│       │   │   │       ├── DropdownNoState.tsx
│       │   │   │       ├── DropdownPopup.tsx
│       │   │   │       ├── FileUpload.tsx
│       │   │   │       ├── HoverCard.tsx
│       │   │   │       ├── Input.tsx
│       │   │   │       ├── InputCombobox.tsx
│       │   │   │       ├── InputNumber.tsx
│       │   │   │       ├── InputOTP.tsx
│       │   │   │       ├── InputWithDropDown.tsx
│       │   │   │       ├── Label.tsx
│       │   │   │       ├── ModelParameters.tsx
│       │   │   │       ├── MultiSearch.tsx
│       │   │   │       ├── MultiSelect.tsx
│       │   │   │       ├── MultiSelectDropDown.tsx
│       │   │   │       ├── MultiSelectPop.tsx
│       │   │   │       ├── OGDialogTemplate.tsx
│       │   │   │       ├── OriginalDialog.tsx
│       │   │   │       ├── Pagination.tsx
│       │   │   │       ├── Popover.tsx
│       │   │   │       ├── Progress.tsx
│       │   │   │       ├── Prompt.tsx
│       │   │   │       ├── QuestionMark.tsx
│       │   │   │       ├── Resizable.tsx
│       │   │   │       ├── Select.tsx
│       │   │   │       ├── SelectDropDown.tsx
│       │   │   │       ├── SelectDropDownPop.tsx
│       │   │   │       ├── Separator.tsx
│       │   │   │       ├── Sheet.tsx
│       │   │   │       ├── Skeleton.tsx
│       │   │   │       ├── Slider.tsx
│       │   │   │       ├── Steps.tsx
│       │   │   │       ├── Switch.tsx
│       │   │   │       ├── Table.tsx
│       │   │   │       ├── Tabs.tsx
│       │   │   │       ├── Tag.tsx
│       │   │   │       ├── TermsAndConditionsModal.tsx
│       │   │   │       ├── Textarea.tsx
│       │   │   │       ├── TextareaAutosize.tsx
│       │   │   │       ├── ThemeSelector.tsx
│       │   │   │       ├── Toast.tsx
│       │   │   │       ├── Tooltip.tsx
│       │   │   │       ├── Tooltip2.tsx
│       │   │   │       ├── icon/
│       │   │   │       │   ├── Apps.tsx
│       │   │   │       │   ├── File/
│       │   │   │       │   │   ├── FileIcon.tsx
│       │   │   │       │   │   └── index.tsx
│       │   │   │       │   ├── Loading/
│       │   │   │       │   │   └── index.tsx
│       │   │   │       │   ├── Message/
│       │   │   │       │   │   └── index.tsx
│       │   │   │       │   ├── Star/
│       │   │   │       │   │   └── index.tsx
│       │   │   │       │   └── Voice/
│       │   │   │       │       └── index.tsx
│       │   │   │       └── index.ts
│       │   │   ├── data-provider/
│       │   │   │   ├── Agents/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── mutations.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── Auth/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── mutations.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── Endpoints/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── Files/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── mutations.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── Messages/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── mutations.ts
│       │   │   │   ├── Misc/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── Tools/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── mutations.ts
│       │   │   │   │   └── queries.ts
│       │   │   │   ├── connection.ts
│       │   │   │   ├── data-provider/
│       │   │   │   │   ├── .gitignore
│       │   │   │   │   ├── babel.config.js
│       │   │   │   │   ├── check_updates.sh
│       │   │   │   │   ├── jest.config.js
│       │   │   │   │   ├── package.json
│       │   │   │   │   ├── react-query/
│       │   │   │   │   │   └── package.json
│       │   │   │   │   ├── rollup.config.js
│       │   │   │   │   ├── server-rollup.config.js
│       │   │   │   │   ├── specs/
│       │   │   │   │   │   ├── actions.spec.ts
│       │   │   │   │   │   ├── azure.spec.ts
│       │   │   │   │   │   ├── filetypes.spec.ts
│       │   │   │   │   │   ├── generate.spec.ts
│       │   │   │   │   │   ├── mcp.spec.ts
│       │   │   │   │   │   ├── openapiSpecs.ts
│       │   │   │   │   │   └── utils.spec.ts
│       │   │   │   │   ├── src/
│       │   │   │   │   │   ├── actions.ts
│       │   │   │   │   │   ├── api-endpoints.ts
│       │   │   │   │   │   ├── artifacts.ts
│       │   │   │   │   │   ├── azure.ts
│       │   │   │   │   │   ├── bedrock.ts
│       │   │   │   │   │   ├── config.ts
│       │   │   │   │   │   ├── createPayload.ts
│       │   │   │   │   │   ├── data-service.ts
│       │   │   │   │   │   ├── file-config.ts
│       │   │   │   │   │   ├── generate.ts
│       │   │   │   │   │   ├── headers-helpers.ts
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   ├── keys.ts
│       │   │   │   │   │   ├── mcp.ts
│       │   │   │   │   │   ├── models.ts
│       │   │   │   │   │   ├── parsers.ts
│       │   │   │   │   │   ├── react-query/
│       │   │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   │   └── react-query-service.ts
│       │   │   │   │   │   ├── request.ts
│       │   │   │   │   │   ├── roles.ts
│       │   │   │   │   │   ├── schemas.ts
│       │   │   │   │   │   ├── types/
│       │   │   │   │   │   │   ├── agents.ts
│       │   │   │   │   │   │   ├── assistants.ts
│       │   │   │   │   │   │   ├── files.ts
│       │   │   │   │   │   │   ├── mutations.ts
│       │   │   │   │   │   │   ├── queries.ts
│       │   │   │   │   │   │   └── runs.ts
│       │   │   │   │   │   ├── types.ts
│       │   │   │   │   │   ├── utils.ts
│       │   │   │   │   │   ├── zod.spec.ts
│       │   │   │   │   │   └── zod.ts
│       │   │   │   │   ├── tsconfig.json
│       │   │   │   │   └── tsconfig.spec.json
│       │   │   │   ├── index.ts
│       │   │   │   ├── mutations.ts
│       │   │   │   ├── prompts.ts
│       │   │   │   ├── queries.ts
│       │   │   │   ├── roles.ts
│       │   │   │   └── tags.ts
│       │   │   ├── hooks/
│       │   │   │   ├── Agents/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAgentsMap.ts
│       │   │   │   │   └── useSelectAgent.ts
│       │   │   │   ├── ApiErrorBoundaryContext.tsx
│       │   │   │   ├── Artifacts/
│       │   │   │   │   ├── useArtifactProps.ts
│       │   │   │   │   ├── useArtifacts.ts
│       │   │   │   │   └── useAutoScroll.ts
│       │   │   │   ├── Assistants/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAssistantListMap.ts
│       │   │   │   │   ├── useAssistantsMap.ts
│       │   │   │   │   └── useSelectAssistant.ts
│       │   │   │   ├── Audio/
│       │   │   │   │   ├── MediaSourceAppender.ts
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAudioRef.ts
│       │   │   │   │   ├── useCustomAudioRef.ts
│       │   │   │   │   ├── usePauseGlobalAudio.ts
│       │   │   │   │   ├── useTTSBrowser.ts
│       │   │   │   │   ├── useTTSEdge.ts
│       │   │   │   │   └── useTTSExternal.ts
│       │   │   │   ├── AuthContext.tsx
│       │   │   │   ├── Chat/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAddedHelpers.ts
│       │   │   │   │   ├── useAddedResponse.ts
│       │   │   │   │   ├── useChatFunctions.ts
│       │   │   │   │   └── useChatHelpers.ts
│       │   │   │   ├── Config/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAppStartup.ts
│       │   │   │   │   ├── useClearStates.ts
│       │   │   │   │   └── useConfigOverride.ts
│       │   │   │   ├── Conversations/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useArchiveHandler.ts
│       │   │   │   │   ├── useBookmarkSuccess.ts
│       │   │   │   │   ├── useDebouncedInput.ts
│       │   │   │   │   ├── useDefaultConvo.ts
│       │   │   │   │   ├── useExportConversation.ts
│       │   │   │   │   ├── useGenerateConvo.ts
│       │   │   │   │   ├── useGetSender.ts
│       │   │   │   │   ├── useNavigateToConvo.tsx
│       │   │   │   │   ├── useParameterEffects.ts
│       │   │   │   │   ├── usePresetIndexOptions.ts
│       │   │   │   │   ├── usePresets.ts
│       │   │   │   │   ├── useSearch.ts
│       │   │   │   │   ├── useSetIndexOptions.ts
│       │   │   │   │   └── useUpdateTagsInConvo.ts
│       │   │   │   ├── Files/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useDelayedUploadToast.ts
│       │   │   │   │   ├── useDeleteFilesFromTable.tsx
│       │   │   │   │   ├── useDragHelpers.ts
│       │   │   │   │   ├── useFileDeletion.ts
│       │   │   │   │   ├── useFileHandling.ts
│       │   │   │   │   ├── useFileMap.ts
│       │   │   │   │   ├── useSetFilesToDelete.ts
│       │   │   │   │   └── useUpdateFiles.ts
│       │   │   │   ├── Generic/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── useLazyEffect.ts
│       │   │   │   ├── Input/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAutoSave.ts
│       │   │   │   │   ├── useCombobox.ts
│       │   │   │   │   ├── useDebounce.ts
│       │   │   │   │   ├── useGetAudioSettings.ts
│       │   │   │   │   ├── useHandleKeyUp.ts
│       │   │   │   │   ├── useMentions.ts
│       │   │   │   │   ├── useMultipleKeys.ts
│       │   │   │   │   ├── useQueryParams.ts
│       │   │   │   │   ├── useRequiresKey.ts
│       │   │   │   │   ├── useSelectMention.ts
│       │   │   │   │   ├── useSpeechToText.ts
│       │   │   │   │   ├── useSpeechToTextBrowser.ts
│       │   │   │   │   ├── useSpeechToTextExternal.ts
│       │   │   │   │   ├── useTextToSpeech.ts
│       │   │   │   │   ├── useTextToSpeechBrowser.ts
│       │   │   │   │   ├── useTextToSpeechEdge.ts
│       │   │   │   │   ├── useTextToSpeechExternal.ts
│       │   │   │   │   ├── useTextarea.ts
│       │   │   │   │   └── useUserKey.ts
│       │   │   │   ├── Messages/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAvatar.ts
│       │   │   │   │   ├── useBuildMessageTree.ts
│       │   │   │   │   ├── useCopyToClipboard.ts
│       │   │   │   │   ├── useMessageActions.tsx
│       │   │   │   │   ├── useMessageHelpers.tsx
│       │   │   │   │   ├── useMessageProcess.tsx
│       │   │   │   │   ├── useMessageScrolling.ts
│       │   │   │   │   ├── useProgress.ts
│       │   │   │   │   └── useSubmitMessage.ts
│       │   │   │   ├── Nav/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useNavHelpers.ts
│       │   │   │   │   ├── useNavScrolling.ts
│       │   │   │   │   └── useSideNavLinks.ts
│       │   │   │   ├── Plugins/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAuthCodeTool.ts
│       │   │   │   │   ├── useCodeApiKeyForm.ts
│       │   │   │   │   ├── usePluginDialogHelpers.ts
│       │   │   │   │   ├── usePluginInstall.ts
│       │   │   │   │   └── useToolCallsMap.ts
│       │   │   │   ├── Prompts/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useCategories.tsx
│       │   │   │   │   └── usePromptGroupsNav.ts
│       │   │   │   ├── Roles/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   └── useHasAccess.ts
│       │   │   │   ├── SSE/
│       │   │   │   │   ├── index.ts
│       │   │   │   │   ├── useAttachmentHandler.ts
│       │   │   │   │   ├── useContentHandler.ts
│       │   │   │   │   ├── useEventHandlers.ts
│       │   │   │   │   ├── useSSE.ts
│       │   │   │   │   └── useStepHandler.ts
│       │   │   │   ├── ScreenshotContext.tsx
│       │   │   │   ├── ThemeContext.tsx
│       │   │   │   ├── Websocket/
│       │   │   │   │   ├── index.tsx
│       │   │   │   │   └── mock.js
│       │   │   │   ├── index.ts
│       │   │   │   ├── useAutoScroll.ts
│       │   │   │   ├── useDelayedRender.tsx
│       │   │   │   ├── useDocumentTitle.ts
│       │   │   │   ├── useGenerationsByLatest.ts
│       │   │   │   ├── useLinsightManager.tsx
│       │   │   │   ├── useLocalStorage.tsx
│       │   │   │   ├── useLocalize.ts
│       │   │   │   ├── useMediaQuery.tsx
│       │   │   │   ├── useNewConvo.ts
│       │   │   │   ├── useOnClickOutside.ts
│       │   │   │   ├── useScrollToRef.ts
│       │   │   │   ├── useTimeout.tsx
│       │   │   │   └── useToast.ts
│       │   │   ├── locales/
│       │   │   │   ├── Translation.spec.ts
│       │   │   │   ├── ar/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── de/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── en/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── es/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── et/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── fi/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── fr/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── he/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── i18n.ts
│       │   │   │   ├── id/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── it/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── ja/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── ka/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── ko/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── nl/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── pl/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── pt-BR/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── pt-PT/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── ru/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── sv/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── tr/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── vi/
│       │   │   │   │   └── translation.json
│       │   │   │   ├── zh-Hans/
│       │   │   │   │   └── translation.json
│       │   │   │   └── zh-Hant/
│       │   │   │       └── translation.json
│       │   │   ├── main.jsx
│       │   │   ├── markdown.css
│       │   │   ├── mobile.css
│       │   │   ├── pages/
│       │   │   │   ├── Page404.tsx
│       │   │   │   ├── appChat/
│       │   │   │   │   ├── ChatInput.tsx
│       │   │   │   │   ├── ChatMessages.tsx
│       │   │   │   │   ├── ChatView.tsx
│       │   │   │   │   ├── README.md
│       │   │   │   │   ├── appUtils/
│       │   │   │   │   │   ├── index.ts
│       │   │   │   │   │   └── skillMethod.ts
│       │   │   │   │   ├── components/
│       │   │   │   │   │   ├── ChatFile.tsx
│       │   │   │   │   │   ├── GuideWord.tsx
│       │   │   │   │   │   ├── InputComponent.tsx
│       │   │   │   │   │   ├── InputFileComponent.tsx
│       │   │   │   │   │   ├── InputFiles.tsx
│       │   │   │   │   │   ├── InputForm.tsx
│       │   │   │   │   │   ├── InputFormSkill.tsx
│       │   │   │   │   │   ├── MessageBs.tsx
│       │   │   │   │   │   ├── MessageBsChoose.tsx
│       │   │   │   │   │   ├── MessageButtons.tsx
│       │   │   │   │   │   ├── MessageFeedbackForm.tsx
│       │   │   │   │   │   ├── MessageFile.tsx
│       │   │   │   │   │   ├── MessageNodeRun.tsx
│       │   │   │   │   │   ├── MessageRemark.tsx
│       │   │   │   │   │   ├── MessageRunlog.tsx
│       │   │   │   │   │   ├── MessageSource.tsx
│       │   │   │   │   │   ├── MessageSystem.tsx
│       │   │   │   │   │   ├── MessageUser.tsx
│       │   │   │   │   │   └── ResouceModal.tsx
│       │   │   │   │   ├── index.tsx
│       │   │   │   │   ├── store/
│       │   │   │   │   │   └── atoms.ts
│       │   │   │   │   ├── useAreaText.ts
│       │   │   │   │   ├── useChatHelpers.ts
│       │   │   │   │   ├── useFileDropAndPaste.ts
│       │   │   │   │   ├── useMessages.ts
│       │   │   │   │   └── useWebsocket.ts
│       │   │   │   ├── apps/
│       │   │   │   │   ├── components/
│       │   │   │   │   │   ├── AgentCard.tsx
│       │   │   │   │   │   ├── AgentGrid.tsx
│       │   │   │   │   │   ├── AgentNavigation.tsx
│       │   │   │   │   │   ├── MarkLabel.tsx
│       │   │   │   │   │   └── SearchOverlay.tsx
│       │   │   │   │   └── index.tsx
│       │   │   │   └── share.tsx
│       │   │   ├── routes/
│       │   │   │   ├── ChatRoute.tsx
│       │   │   │   ├── Dashboard.tsx
│       │   │   │   ├── Layouts/
│       │   │   │   │   ├── DashBreadcrumb.tsx
│       │   │   │   │   ├── Dashboard.tsx
│       │   │   │   │   ├── Login.tsx
│       │   │   │   │   └── Startup.tsx
│       │   │   │   ├── Root.tsx
│       │   │   │   ├── RouteErrorBoundary.tsx
│       │   │   │   ├── Search.tsx
│       │   │   │   ├── ShareRoute.tsx
│       │   │   │   ├── index.tsx
│       │   │   │   └── useAuthRedirect.ts
│       │   │   ├── store/
│       │   │   │   ├── artifacts.ts
│       │   │   │   ├── endpoints.ts
│       │   │   │   ├── families.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── language.ts
│       │   │   │   ├── linsight.ts
│       │   │   │   ├── misc.ts
│       │   │   │   ├── modeltype.ts
│       │   │   │   ├── preset.ts
│       │   │   │   ├── prompts.ts
│       │   │   │   ├── search.ts
│       │   │   │   ├── settings.ts
│       │   │   │   ├── submission.ts
│       │   │   │   ├── temporary.ts
│       │   │   │   ├── text.ts
│       │   │   │   ├── toast.ts
│       │   │   │   ├── user.ts
│       │   │   │   └── utils.ts
│       │   │   ├── style.css
│       │   │   ├── utils/
│       │   │   │   ├── artifacts.spec.ts
│       │   │   │   ├── artifacts.ts
│       │   │   │   ├── buildDefaultConvo.ts
│       │   │   │   ├── buildTree.ts
│       │   │   │   ├── cleanupPreset.ts
│       │   │   │   ├── cn.ts
│       │   │   │   ├── collection.ts
│       │   │   │   ├── conversationTags.spec.ts
│       │   │   │   ├── conversationTags.ts
│       │   │   │   ├── convos.fakeData.ts
│       │   │   │   ├── convos.spec.ts
│       │   │   │   ├── convos.ts
│       │   │   │   ├── endpoints.spec.ts
│       │   │   │   ├── endpoints.ts
│       │   │   │   ├── files.ts
│       │   │   │   ├── forms.tsx
│       │   │   │   ├── getDefaultEndpoint.ts
│       │   │   │   ├── getLoginError.ts
│       │   │   │   ├── index.ts
│       │   │   │   ├── json.ts
│       │   │   │   ├── languages.ts
│       │   │   │   ├── latex.spec.ts
│       │   │   │   ├── latex.ts
│       │   │   │   ├── localStorage.ts
│       │   │   │   ├── logger.ts
│       │   │   │   ├── map.ts
│       │   │   │   ├── mermaid.ts
│       │   │   │   ├── messages.ts
│       │   │   │   ├── presets.ts
│       │   │   │   ├── promptGroups.ts
│       │   │   │   ├── prompts.ts
│       │   │   │   ├── resetConvo.ts
│       │   │   │   ├── textarea.ts
│       │   │   │   └── theme.ts
│       │   │   ├── vditor.css
│       │   │   └── vite-env.d.ts
│       │   ├── tailwind.config.cjs
│       │   ├── test/
│       │   │   ├── layout-test-utils.tsx
│       │   │   ├── localStorage.mock
│       │   │   ├── matchMedia.mock
│       │   │   ├── resizeObserver.mock
│       │   │   └── setupTests.js
│       │   ├── tsconfig.json
│       │   └── vite.config.ts
│       ├── nginx.conf
│       └── platform/
│           ├── Dockerfile
│           ├── README.md
│           ├── dev.Dockerfile
│           ├── index.html
│           ├── local-packages/
│           │   └── vditor-3.11.1.tgz
│           ├── nginx.conf
│           ├── package.json
│           ├── postcss.config.js
│           ├── prettier.config.js
│           ├── public/
│           │   ├── assets/
│           │   │   └── bisheng/
│           │   │       └── config.js
│           │   ├── cmaps/
│           │   │   ├── Adobe-GB1-UCS2.bcmap
│           │   │   ├── GB-EUC-H.bcmap
│           │   │   └── UniGB-UCS2-H.bcmap
│           │   ├── dataset.csv
│           │   ├── dataset.json
│           │   ├── empty.docx
│           │   ├── iframe.js
│           │   ├── iframe.source.js
│           │   ├── locales/
│           │   │   ├── dev/
│           │   │   │   ├── bs.json
│           │   │   │   ├── flow.json
│           │   │   │   ├── knowledge.json
│           │   │   │   └── model.json
│           │   │   ├── en-US/
│           │   │   │   ├── bs.json
│           │   │   │   ├── dashboard.json
│           │   │   │   ├── flow.json
│           │   │   │   ├── knowledge.json
│           │   │   │   ├── model.json
│           │   │   │   └── tool.json
│           │   │   ├── ja/
│           │   │   │   ├── bs.json
│           │   │   │   ├── dashboard.json
│           │   │   │   ├── flow.json
│           │   │   │   ├── knowledge.json
│           │   │   │   ├── model.json
│           │   │   │   └── tool.json
│           │   │   └── zh-Hans/
│           │   │       ├── bs.json
│           │   │       ├── dashboard.json
│           │   │       ├── flow.json
│           │   │       ├── knowledge.json
│           │   │       ├── model.json
│           │   │       └── tool.json
│           │   ├── models/
│           │   │   └── data.json
│           │   ├── sopexample.xlsx
│           │   ├── template.csv
│           │   └── vditor/
│           │       └── dist/
│           │           ├── css/
│           │           │   └── content-theme/
│           │           │       ├── ant-design.css
│           │           │       ├── dark.css
│           │           │       ├── light.css
│           │           │       └── wechat.css
│           │           ├── index.css
│           │           ├── index.d.ts
│           │           ├── index.js
│           │           ├── js/
│           │           │   ├── graphviz/
│           │           │   │   ├── full.render.js
│           │           │   │   └── viz.js
│           │           │   ├── highlight.js/
│           │           │   │   ├── highlight.pack.js
│           │           │   │   └── styles/
│           │           │   │       ├── abap.css
│           │           │   │       ├── algol.css
│           │           │   │       ├── algol_nu.css
│           │           │   │       ├── ant-design.css
│           │           │   │       ├── arduino.css
│           │           │   │       ├── autumn.css
│           │           │   │       ├── borland.css
│           │           │   │       ├── bw.css
│           │           │   │       ├── colorful.css
│           │           │   │       ├── dracula.css
│           │           │   │       ├── emacs.css
│           │           │   │       ├── friendly.css
│           │           │   │       ├── fruity.css
│           │           │   │       ├── github.css
│           │           │   │       ├── igor.css
│           │           │   │       ├── lovelace.css
│           │           │   │       ├── manni.css
│           │           │   │       ├── monokai.css
│           │           │   │       ├── monokailight.css
│           │           │   │       ├── murphy.css
│           │           │   │       ├── native.css
│           │           │   │       ├── paraiso-dark.css
│           │           │   │       ├── paraiso-light.css
│           │           │   │       ├── pastie.css
│           │           │   │       ├── perldoc.css
│           │           │   │       ├── pygments.css
│           │           │   │       ├── rainbow_dash.css
│           │           │   │       ├── rrt.css
│           │           │   │       ├── solarized-dark.css
│           │           │   │       ├── solarized-dark256.css
│           │           │   │       ├── solarized-light.css
│           │           │   │       ├── swapoff.css
│           │           │   │       ├── tango.css
│           │           │   │       ├── trac.css
│           │           │   │       ├── vim.css
│           │           │   │       ├── vs.css
│           │           │   │       └── xcode.css
│           │           │   ├── i18n/
│           │           │   │   ├── en_US.js
│           │           │   │   ├── fr_FR.js
│           │           │   │   ├── ja_JP.js
│           │           │   │   ├── ko_KR.js
│           │           │   │   ├── pt_BR.js
│           │           │   │   ├── ru_RU.js
│           │           │   │   ├── sv_SE.js
│           │           │   │   ├── zh_CN.js
│           │           │   │   └── zh_TW.js
│           │           │   ├── icons/
│           │           │   │   ├── ant.js
│           │           │   │   └── material.js
│           │           │   ├── markmap/
│           │           │   │   └── prism.css
│           │           │   └── mathjax/
│           │           │       ├── LICENSE
│           │           │       ├── a11y/
│           │           │       │   ├── assistive-mml.js
│           │           │       │   ├── complexity.js
│           │           │       │   ├── explorer.js
│           │           │       │   └── semantic-enrich.js
│           │           │       ├── input/
│           │           │       │   ├── asciimath.js
│           │           │       │   ├── mml/
│           │           │       │   │   └── entities.js
│           │           │       │   ├── mml.js
│           │           │       │   ├── tex/
│           │           │       │   │   └── extensions/
│           │           │       │   │       ├── action.js
│           │           │       │   │       ├── all-packages.js
│           │           │       │   │       ├── ams.js
│           │           │       │   │       ├── amscd.js
│           │           │       │   │       ├── autoload.js
│           │           │       │   │       ├── bbox.js
│           │           │       │   │       ├── boldsymbol.js
│           │           │       │   │       ├── braket.js
│           │           │       │   │       ├── bussproofs.js
│           │           │       │   │       ├── cancel.js
│           │           │       │   │       ├── color.js
│           │           │       │   │       ├── colorV2.js
│           │           │       │   │       ├── configMacros.js
│           │           │       │   │       ├── enclose.js
│           │           │       │   │       ├── extpfeil.js
│           │           │       │   │       ├── html.js
│           │           │       │   │       ├── mhchem.js
│           │           │       │   │       ├── newcommand.js
│           │           │       │   │       ├── noerrors.js
│           │           │       │   │       ├── noundefined.js
│           │           │       │   │       ├── physics.js
│           │           │       │   │       ├── require.js
│           │           │       │   │       ├── tagFormat.js
│           │           │       │   │       ├── textmacros.js
│           │           │       │   │       ├── unicode.js
│           │           │       │   │       └── verb.js
│           │           │       │   ├── tex-base.js
│           │           │       │   ├── tex-full.js
│           │           │       │   └── tex.js
│           │           │       ├── sre/
│           │           │       │   ├── mathmaps/
│           │           │       │   │   ├── de.js
│           │           │       │   │   ├── en.js
│           │           │       │   │   ├── es.js
│           │           │       │   │   ├── fr.js
│           │           │       │   │   ├── mathmaps_ie.js
│           │           │       │   │   └── nemeth.js
│           │           │       │   ├── sre-node.js
│           │           │       │   └── sre_browser.js
│           │           │       └── tex-svg-full.js
│           │           ├── method.d.ts
│           │           ├── method.js
│           │           ├── ts/
│           │           │   ├── constants.d.ts
│           │           │   ├── devtools/
│           │           │   │   └── index.d.ts
│           │           │   ├── export/
│           │           │   │   └── index.d.ts
│           │           │   ├── hint/
│           │           │   │   └── index.d.ts
│           │           │   ├── ir/
│           │           │   │   ├── expandMarker.d.ts
│           │           │   │   ├── highlightToolbarIR.d.ts
│           │           │   │   ├── index.d.ts
│           │           │   │   ├── input.d.ts
│           │           │   │   ├── process.d.ts
│           │           │   │   └── processKeydown.d.ts
│           │           │   ├── markdown/
│           │           │   │   ├── abcRender.d.ts
│           │           │   │   ├── adapterRender.d.ts
│           │           │   │   ├── anchorRender.d.ts
│           │           │   │   ├── chartRender.d.ts
│           │           │   │   ├── codeRender.d.ts
│           │           │   │   ├── flowchartRender.d.ts
│           │           │   │   ├── getHTML.d.ts
│           │           │   │   ├── getMarkdown.d.ts
│           │           │   │   ├── graphvizRender.d.ts
│           │           │   │   ├── highlightRender.d.ts
│           │           │   │   ├── lazyLoadImageRender.d.ts
│           │           │   │   ├── markmapRender.d.ts
│           │           │   │   ├── mathRender.d.ts
│           │           │   │   ├── mediaRender.d.ts
│           │           │   │   ├── mermaidRender.d.ts
│           │           │   │   ├── mindmapRender.d.ts
│           │           │   │   ├── outlineRender.d.ts
│           │           │   │   ├── plantumlRender.d.ts
│           │           │   │   ├── previewRender.d.ts
│           │           │   │   ├── setLute.d.ts
│           │           │   │   └── speechRender.d.ts
│           │           │   ├── outline/
│           │           │   │   └── index.d.ts
│           │           │   ├── preview/
│           │           │   │   ├── image.d.ts
│           │           │   │   └── index.d.ts
│           │           │   ├── resize/
│           │           │   │   └── index.d.ts
│           │           │   ├── sv/
│           │           │   │   ├── combineFootnote.d.ts
│           │           │   │   ├── index.d.ts
│           │           │   │   ├── inputEvent.d.ts
│           │           │   │   ├── process.d.ts
│           │           │   │   └── processKeydown.d.ts
│           │           │   ├── tip/
│           │           │   │   └── index.d.ts
│           │           │   ├── toolbar/
│           │           │   │   ├── Both.d.ts
│           │           │   │   ├── Br.d.ts
│           │           │   │   ├── CodeTheme.d.ts
│           │           │   │   ├── ContentTheme.d.ts
│           │           │   │   ├── Counter.d.ts
│           │           │   │   ├── Custom.d.ts
│           │           │   │   ├── Devtools.d.ts
│           │           │   │   ├── Divider.d.ts
│           │           │   │   ├── EditMode.d.ts
│           │           │   │   ├── Emoji.d.ts
│           │           │   │   ├── Export.d.ts
│           │           │   │   ├── Fullscreen.d.ts
│           │           │   │   ├── Headings.d.ts
│           │           │   │   ├── Help.d.ts
│           │           │   │   ├── Indent.d.ts
│           │           │   │   ├── Info.d.ts
│           │           │   │   ├── InsertAfter.d.ts
│           │           │   │   ├── InsertBefore.d.ts
│           │           │   │   ├── MenuItem.d.ts
│           │           │   │   ├── Outdent.d.ts
│           │           │   │   ├── Outline.d.ts
│           │           │   │   ├── Preview.d.ts
│           │           │   │   ├── Record.d.ts
│           │           │   │   ├── Redo.d.ts
│           │           │   │   ├── Undo.d.ts
│           │           │   │   ├── Upload.d.ts
│           │           │   │   ├── index.d.ts
│           │           │   │   └── setToolbar.d.ts
│           │           │   ├── ui/
│           │           │   │   ├── initUI.d.ts
│           │           │   │   ├── setCodeTheme.d.ts
│           │           │   │   ├── setContentTheme.d.ts
│           │           │   │   ├── setPreviewMode.d.ts
│           │           │   │   └── setTheme.d.ts
│           │           │   ├── undo/
│           │           │   │   └── index.d.ts
│           │           │   ├── upload/
│           │           │   │   ├── getElement.d.ts
│           │           │   │   ├── index.d.ts
│           │           │   │   └── setHeaders.d.ts
│           │           │   ├── util/
│           │           │   │   ├── Options.d.ts
│           │           │   │   ├── RecordMedia.d.ts
│           │           │   │   ├── addScript.d.ts
│           │           │   │   ├── addStyle.d.ts
│           │           │   │   ├── code160to32.d.ts
│           │           │   │   ├── compatibility.d.ts
│           │           │   │   ├── editorCommonEvent.d.ts
│           │           │   │   ├── fixBrowserBehavior.d.ts
│           │           │   │   ├── function.d.ts
│           │           │   │   ├── getSelectText.d.ts
│           │           │   │   ├── hasClosest.d.ts
│           │           │   │   ├── hasClosestByHeadings.d.ts
│           │           │   │   ├── highlightToolbar.d.ts
│           │           │   │   ├── hotKey.d.ts
│           │           │   │   ├── log.d.ts
│           │           │   │   ├── merge.d.ts
│           │           │   │   ├── processCode.d.ts
│           │           │   │   ├── selection.d.ts
│           │           │   │   └── toc.d.ts
│           │           │   └── wysiwyg/
│           │           │       ├── afterRenderEvent.d.ts
│           │           │       ├── highlightToolbarWYSIWYG.d.ts
│           │           │       ├── index.d.ts
│           │           │       ├── inlineTag.d.ts
│           │           │       ├── input.d.ts
│           │           │       ├── processKeydown.d.ts
│           │           │       ├── renderDomByMd.d.ts
│           │           │       ├── setHeading.d.ts
│           │           │       ├── showCode.d.ts
│           │           │       └── toolbarEvent.d.ts
│           │           └── types/
│           │               └── index.d.ts
│           ├── set_proxy.sh
│           ├── src/
│           │   ├── App.css
│           │   ├── App.tsx
│           │   ├── CustomNodes/
│           │   │   └── GenericNode/
│           │   │       ├── components/
│           │   │       │   └── parameterComponent/
│           │   │       │       ├── index.tsx
│           │   │       │       └── l2Index.tsx
│           │   │       └── index.tsx
│           │   ├── alerts/
│           │   │   ├── alertDropDown/
│           │   │   │   ├── components/
│           │   │   │   │   └── singleAlertComponent/
│           │   │   │   │       └── index.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── error/
│           │   │   │   └── index.tsx
│           │   │   ├── hooks/
│           │   │   │   └── useOnClickOutside/
│           │   │   │       └── index.ts
│           │   │   ├── notice/
│           │   │   │   └── index.tsx
│           │   │   └── success/
│           │   │       └── index.tsx
│           │   ├── assets/
│           │   │   └── AlibabaPuHuiTi-3-55-Regular.otf
│           │   ├── components/
│           │   │   ├── EditFlowSettingsComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── LinSight/
│           │   │   │   ├── DeleteConfirmModal.tsx
│           │   │   │   ├── LocalFileImportDialog.tsx
│           │   │   │   ├── SopActionsBar.tsx
│           │   │   │   ├── SopFormDrawer.tsx
│           │   │   │   ├── SopFromRecord.tsx
│           │   │   │   ├── SopMarkdown.tsx
│           │   │   │   ├── SopSearchBar.tsx
│           │   │   │   ├── SopTable.tsx
│           │   │   │   ├── SopToolsDown.tsx
│           │   │   │   ├── SvgImage.tsx
│           │   │   │   ├── ToolSelector.tsx
│           │   │   │   ├── ToolSelectorContainer.tsx
│           │   │   │   └── ValidationDialog.tsx
│           │   │   ├── Pro/
│           │   │   │   └── security/
│           │   │   │       ├── AssistantSetting.tsx
│           │   │   │       ├── FlowSetting.tsx
│           │   │   │       ├── FormSet.tsx
│           │   │   │       └── FormView.tsx
│           │   │   ├── RadialProgress/
│           │   │   │   └── index.tsx
│           │   │   ├── SanitizedHTMLWrapper/
│           │   │   │   └── index.tsx
│           │   │   ├── ShadTooltipComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── VariablesComponent/
│           │   │   │   ├── VarDialog.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── bs-comp/
│           │   │   │   ├── FileView.tsx
│           │   │   │   ├── apiComponent/
│           │   │   │   │   ├── ApiAccess.tsx
│           │   │   │   │   ├── ApiAccessFlow.tsx
│           │   │   │   │   ├── ApiAccessSkill.tsx
│           │   │   │   │   ├── ChatLink.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── cardComponent/
│           │   │   │   │   ├── LabelShow.tsx
│           │   │   │   │   ├── avatar.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── chatComponent/
│           │   │   │   │   ├── ChatInput.tsx
│           │   │   │   │   ├── FileBs.tsx
│           │   │   │   │   ├── GuideQuestions.tsx
│           │   │   │   │   ├── MessageBs.tsx
│           │   │   │   │   ├── MessageButtons.tsx
│           │   │   │   │   ├── MessagePanne.tsx
│           │   │   │   │   ├── MessageSystem.tsx
│           │   │   │   │   ├── MessageUser.tsx
│           │   │   │   │   ├── RunLog.tsx
│           │   │   │   │   ├── Separator.tsx
│           │   │   │   │   ├── SourceEntry.tsx
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   └── messageStore.ts
│           │   │   │   ├── filterTableDataComponent/
│           │   │   │   │   ├── FilterByApp.tsx
│           │   │   │   │   ├── FilterByDate.tsx
│           │   │   │   │   ├── FilterByUser.tsx
│           │   │   │   │   └── FilterByUsergroup.tsx
│           │   │   │   ├── knowledgeUploadComponent/
│           │   │   │   │   ├── DropZone.tsx
│           │   │   │   │   ├── ProgressItem.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── loadMore/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── selectComponent/
│           │   │   │   │   ├── LabelSelect.tsx
│           │   │   │   │   ├── Users.tsx
│           │   │   │   │   └── knowledge.tsx
│           │   │   │   ├── sheets/
│           │   │   │   │   ├── AppTempSheet.tsx
│           │   │   │   │   ├── SkillChatSheet.tsx
│           │   │   │   │   ├── SkillSheet.tsx
│           │   │   │   │   ├── TaggingSheet.tsx
│           │   │   │   │   └── ToolsSheet.tsx
│           │   │   │   └── tableComponent/
│           │   │   │       └── ColFilterUser.tsx
│           │   │   ├── bs-icons/
│           │   │   │   ├── DownIcon.tsx
│           │   │   │   ├── addTo/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── app/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── avatar/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── bookOpen/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── clear/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── dashboard/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── del/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── down/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── en/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── expand/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── file/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── filter/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── flag/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── flow/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── form/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── github/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── go/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── index.ts
│           │   │   │   ├── knowledge/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── label/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── loading/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── menu/
│           │   │   │   │   ├── application/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── dataset/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── evaluation/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── label/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── log/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── model/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── system/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   └── technology/
│           │   │   │   │       └── index.tsx
│           │   │   │   ├── moon/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── moveOne/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── newApplication/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── office/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── plus/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── plusBox/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── prompt/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── questionMark/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── quit/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── rbDrag/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── save/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── search/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── send/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── setting/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── tab/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── thumbs/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── tip/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── toast/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── tool/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── upload/
│           │   │   │   │   └── index.tsx
│           │   │   │   └── user/
│           │   │   │       └── index.tsx
│           │   │   ├── bs-ui/
│           │   │   │   ├── accordion/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── alert.tsx
│           │   │   │   ├── alertDialog/
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   └── useConfirm.tsx
│           │   │   │   ├── badge/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── button/
│           │   │   │   │   ├── actionButton.tsx
│           │   │   │   │   ├── group.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── calendar/
│           │   │   │   │   ├── datePicker.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── card/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── checkBox/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── command.tsx
│           │   │   │   ├── dialog/
│           │   │   │   │   ├── DialogForceUpdate.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── dropdownMenu/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── editLabel/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── input/
│           │   │   │   │   ├── avator.tsx
│           │   │   │   │   ├── editTitle.tsx
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   └── textInput.tsx
│           │   │   │   ├── label/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── multiSelect.tsx/
│           │   │   │   │   ├── Example.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── pagination/
│           │   │   │   │   ├── autoPagination.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── popover/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── progress.tsx
│           │   │   │   ├── radio/
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   └── radioCard.tsx
│           │   │   │   ├── radio-group.tsx
│           │   │   │   ├── select/
│           │   │   │   │   ├── cascader.tsx
│           │   │   │   │   ├── filter.tsx
│           │   │   │   │   ├── hover.tsx
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   ├── multi.tsx
│           │   │   │   │   └── select.tsx
│           │   │   │   ├── separator.tsx
│           │   │   │   ├── sheet/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── skeleton/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── slider/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── step/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── switch/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── table/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── tabs/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── toast/
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   ├── toast.tsx
│           │   │   │   │   └── use-toast.tsx
│           │   │   │   ├── toggle-group.tsx
│           │   │   │   ├── toggle.tsx
│           │   │   │   ├── tooltip/
│           │   │   │   │   ├── index.tsx
│           │   │   │   │   └── tip.tsx
│           │   │   │   ├── upload/
│           │   │   │   │   └── simple.tsx
│           │   │   │   ├── utils.tsx
│           │   │   │   └── voice/
│           │   │   │       └── index.tsx
│           │   │   ├── chatComponent/
│           │   │   │   ├── buildTrigger/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── chatTrigger/
│           │   │   │   │   └── index.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── codeAreaComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── dictComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── dropdownComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── floatComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── inputComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── inputFileComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── inputListComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── intComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── keypairListComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── promptComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── textAreaComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── toggleComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── toggleShadComponent/
│           │   │   │   └── index.tsx
│           │   │   ├── ui/
│           │   │   │   ├── accordion.tsx
│           │   │   │   ├── editLabel.tsx
│           │   │   │   ├── loading.tsx
│           │   │   │   └── select-custom.tsx
│           │   │   └── voiceFunction/
│           │   │       ├── audioPlayButton.tsx
│           │   │       ├── audioPlayerStore.tsx
│           │   │       └── speechToText.tsx
│           │   ├── constants.tsx
│           │   ├── contexts/
│           │   │   ├── SSEContext.tsx
│           │   │   ├── alertContext.tsx
│           │   │   ├── darkContext.tsx
│           │   │   ├── index.tsx
│           │   │   ├── locationContext.tsx
│           │   │   ├── popUpContext.tsx
│           │   │   ├── tabsContext.tsx
│           │   │   ├── typesContext.tsx
│           │   │   ├── undoRedoContext.tsx
│           │   │   └── userContext.tsx
│           │   ├── controllers/
│           │   │   ├── API/
│           │   │   │   ├── assistant.ts
│           │   │   │   ├── dashboard.ts
│           │   │   │   ├── evaluate.ts
│           │   │   │   ├── finetune.ts
│           │   │   │   ├── flow.ts
│           │   │   │   ├── index.ts
│           │   │   │   ├── label.ts
│           │   │   │   ├── linsight.ts
│           │   │   │   ├── log.ts
│           │   │   │   ├── pro.ts
│           │   │   │   ├── tools.ts
│           │   │   │   ├── user.ts
│           │   │   │   ├── workbench.ts
│           │   │   │   └── workflow.ts
│           │   │   ├── hooks/
│           │   │   │   ├── knowledge.ts
│           │   │   │   └── useSopManagement.ts
│           │   │   └── request.ts
│           │   ├── flow_constants.tsx
│           │   ├── i18n.js
│           │   ├── icons/
│           │   │   ├── AWS/
│           │   │   │   ├── AWS.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Airbyte/
│           │   │   │   ├── Airbyte.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Anthropic/
│           │   │   │   ├── Anthropic.jsx
│           │   │   │   ├── AnthropicBox.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── AstraDB/
│           │   │   │   ├── AstraDB.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── AzLogo/
│           │   │   │   ├── AzLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Azure/
│           │   │   │   ├── Azure.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Bing/
│           │   │   │   ├── Bing.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── BotMessageSquare/
│           │   │   │   ├── BotMessageSquare.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Cassandra/
│           │   │   │   ├── Cassandra.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── ChromaIcon/
│           │   │   │   ├── Chroma.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Cohere/
│           │   │   │   ├── Cohere.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Confluence/
│           │   │   │   ├── Confluence.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Couchbase/
│           │   │   │   ├── Couchbase.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── CrewAI/
│           │   │   │   ├── CrewAiIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── ElasticsearchStore/
│           │   │   │   ├── ElasticsearchLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Evernote/
│           │   │   │   ├── EvernoteIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── FacebookMessenger/
│           │   │   │   ├── FacebookMessengerLogo2020.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Firecrawl/
│           │   │   │   ├── FirecrawlLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── GitBook/
│           │   │   │   ├── GitbookSvgrepoCom.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Google/
│           │   │   │   ├── Google.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── GoogleGenerativeAI/
│           │   │   │   ├── GoogleGemini.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── GradientSparkles/
│           │   │   │   └── index.tsx
│           │   │   ├── Groq/
│           │   │   │   ├── GroqLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── HuggingFace/
│           │   │   │   ├── HfLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── IFixIt/
│           │   │   │   ├── IfixitSeeklogoCom.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── LangChain/
│           │   │   │   ├── LangChainIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Maritalk/
│           │   │   │   ├── MaritalkIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Meta/
│           │   │   │   ├── MetaIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Midjorney/
│           │   │   │   ├── MidjourneyEmblem.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── MongoDB/
│           │   │   │   ├── MongodbIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Notion/
│           │   │   │   ├── NotionLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Nvidia/
│           │   │   │   ├── index.tsx
│           │   │   │   └── nvidia.jsx
│           │   │   ├── Ollama/
│           │   │   │   ├── Ollama.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── OpenAi/
│           │   │   │   ├── OpenAi.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Pinecone/
│           │   │   │   ├── PineconeLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Postgres/
│           │   │   │   ├── Postgres.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── PowerPoint/
│           │   │   │   ├── PowerPoint.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Python/
│           │   │   │   ├── Python.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── QDrant/
│           │   │   │   ├── QDrant.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── QianFanChat/
│           │   │   │   ├── QianFanChat.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── ReadTheDocs/
│           │   │   │   ├── ReadthedocsioIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Redis/
│           │   │   │   ├── Redis.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Searx/
│           │   │   │   ├── SearxLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Serper/
│           │   │   │   ├── Serper.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Share/
│           │   │   │   ├── Share.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Share2/
│           │   │   │   ├── Share2.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Slack/
│           │   │   │   ├── SlackIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Streamlit/
│           │   │   │   ├── SvgStreamlit.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Upstash/
│           │   │   │   ├── UpstashIcon.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── VectaraIcon/
│           │   │   │   ├── Vectara.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── VertexAI/
│           │   │   │   ├── VertexAi.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Weaviate/
│           │   │   │   ├── Weaviate.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Wikipedia/
│           │   │   │   ├── Wikipedia.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Wolfram/
│           │   │   │   ├── Wolfram.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── Word/
│           │   │   │   ├── Word.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── freezeAll/
│           │   │   │   ├── freezeAll.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── hackerNews/
│           │   │   │   ├── YCombinatorLogo.jsx
│           │   │   │   └── index.tsx
│           │   │   ├── mistral/
│           │   │   │   ├── index.tsx
│           │   │   │   └── mistralIcon.jsx
│           │   │   └── supabase/
│           │   │       ├── SupabaseIcon.jsx
│           │   │       └── index.tsx
│           │   ├── index.tsx
│           │   ├── layout/
│           │   │   ├── HeaderMenu.tsx
│           │   │   └── MainLayout.tsx
│           │   ├── modals/
│           │   │   ├── EditNodeModal/
│           │   │   │   └── index.tsx
│           │   │   ├── L2ParamsModal/
│           │   │   │   └── index.tsx
│           │   │   ├── UploadModal/
│           │   │   │   └── upload.ts
│           │   │   ├── baseModal/
│           │   │   │   └── index.tsx
│           │   │   ├── codeAreaModal/
│           │   │   │   └── index.tsx
│           │   │   ├── dictAreaModal/
│           │   │   │   └── index.tsx
│           │   │   ├── exportModal/
│           │   │   │   └── index.tsx
│           │   │   ├── formModal/
│           │   │   │   ├── chatInput/
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── chatMessage/
│           │   │   │   │   ├── codeBlock/
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── fileComponent/
│           │   │   │   │   └── index.tsx
│           │   │   │   └── index.tsx
│           │   │   └── genericModal/
│           │   │       └── index.tsx
│           │   ├── pages/
│           │   │   ├── BuildPage/
│           │   │   │   ├── CreateApp.tsx
│           │   │   │   ├── appTemps.tsx
│           │   │   │   ├── apps.tsx
│           │   │   │   ├── assistant/
│           │   │   │   │   ├── CreateAssistant.tsx
│           │   │   │   │   └── editAssistant/
│           │   │   │   │       ├── AutoPromptDialog.tsx
│           │   │   │   │       ├── EditAssistantDialog.tsx
│           │   │   │   │       ├── Header.tsx
│           │   │   │   │       ├── ModelSelect.tsx
│           │   │   │   │       ├── Prompt.tsx
│           │   │   │   │       ├── Setting.tsx
│           │   │   │   │       ├── Temperature.tsx
│           │   │   │   │       ├── TestChat.tsx
│           │   │   │   │       └── index.tsx
│           │   │   │   ├── bench/
│           │   │   │   │   ├── DialogueWork.tsx
│           │   │   │   │   ├── FormInput.tsx
│           │   │   │   │   ├── IconUploadSection.tsx
│           │   │   │   │   ├── LingSiWork.tsx
│           │   │   │   │   ├── ModelManagement.tsx
│           │   │   │   │   ├── Preview.tsx
│           │   │   │   │   ├── ToggleSection.tsx
│           │   │   │   │   ├── WebSearchConfig.tsx
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── flow/
│           │   │   │   │   ├── Controls.tsx
│           │   │   │   │   ├── FlowChat/
│           │   │   │   │   │   ├── Chat.tsx
│           │   │   │   │   │   ├── ChatFileFile.tsx
│           │   │   │   │   │   ├── ChatFiles.tsx
│           │   │   │   │   │   ├── ChatInput.tsx
│           │   │   │   │   │   ├── ChatMessages.tsx
│           │   │   │   │   │   ├── ChatPane.tsx
│           │   │   │   │   │   ├── ChatTest.tsx
│           │   │   │   │   │   ├── DragDropOverlay.tsx
│           │   │   │   │   │   ├── GuideQuestions.tsx
│           │   │   │   │   │   ├── InputForm.tsx
│           │   │   │   │   │   ├── MessageBs.tsx
│           │   │   │   │   │   ├── MessageBsChoose.tsx
│           │   │   │   │   │   ├── MessageMarkDown.tsx
│           │   │   │   │   │   ├── MessageNodeRun.tsx
│           │   │   │   │   │   ├── MessageUser.tsx
│           │   │   │   │   │   ├── messageStore.ts
│           │   │   │   │   │   └── useFileDropAndPaste.ts
│           │   │   │   │   ├── FlowEdge.tsx
│           │   │   │   │   ├── FlowNode/
│           │   │   │   │   │   ├── EditText.tsx
│           │   │   │   │   │   ├── NodeLogo.tsx
│           │   │   │   │   │   ├── NodeTabs.tsx
│           │   │   │   │   │   ├── NodeToolbarComponent.tsx
│           │   │   │   │   │   ├── Parameter.tsx
│           │   │   │   │   │   ├── ParameterGroup.tsx
│           │   │   │   │   │   ├── ParameterSubGroup.tsx
│           │   │   │   │   │   ├── RunLog.tsx
│           │   │   │   │   │   ├── RunTest.tsx
│           │   │   │   │   │   ├── component/
│           │   │   │   │   │   │   ├── CodeInputItem.tsx
│           │   │   │   │   │   │   ├── CodeOutputItem.tsx
│           │   │   │   │   │   │   ├── CodePythonItem.tsx
│           │   │   │   │   │   │   ├── ConditionItem.tsx
│           │   │   │   │   │   │   ├── DragOptions.tsx
│           │   │   │   │   │   │   ├── FileTypeSelect.tsx
│           │   │   │   │   │   │   ├── GlobalVarItem.tsx
│           │   │   │   │   │   │   ├── GroupInputFile.tsx
│           │   │   │   │   │   │   ├── HistoryNumItem.tsx
│           │   │   │   │   │   │   ├── ImagePromptItem.tsx
│           │   │   │   │   │   │   ├── InputFormItem.tsx
│           │   │   │   │   │   │   ├── InputFormItemOld.tsx
│           │   │   │   │   │   │   ├── InputItem.tsx
│           │   │   │   │   │   │   ├── InputListItem.tsx
│           │   │   │   │   │   │   ├── KnowledgeQaSelectItem.tsx
│           │   │   │   │   │   │   ├── KnowledgeSelectItem.tsx
│           │   │   │   │   │   │   ├── MetadataFilter.tsx
│           │   │   │   │   │   │   ├── ModelItem.tsx
│           │   │   │   │   │   │   ├── NumberInput.tsx
│           │   │   │   │   │   │   ├── OutputItem.tsx
│           │   │   │   │   │   │   ├── ReportItem.tsx
│           │   │   │   │   │   │   ├── ReportWordEdit.tsx
│           │   │   │   │   │   │   ├── RetrievalWeightSlider.tsx
│           │   │   │   │   │   │   ├── SelectVar.tsx
│           │   │   │   │   │   │   ├── SliderItem.tsx
│           │   │   │   │   │   │   ├── SqlConfigItem.tsx
│           │   │   │   │   │   │   ├── SwitchItem.tsx
│           │   │   │   │   │   │   ├── TextAreaItem.tsx
│           │   │   │   │   │   │   ├── ToolItem.tsx
│           │   │   │   │   │   │   ├── VarInput.tsx
│           │   │   │   │   │   │   ├── VarItem.tsx
│           │   │   │   │   │   │   ├── VarSelectItem.tsx
│           │   │   │   │   │   │   ├── VarTextareaItem.tsx
│           │   │   │   │   │   │   └── VarTextareaUploadItem.tsx
│           │   │   │   │   │   ├── flowNodeStore.ts
│           │   │   │   │   │   └── index.tsx
│           │   │   │   │   ├── Header.tsx
│           │   │   │   │   ├── NoteNode.tsx
│           │   │   │   │   ├── Notification.tsx
│           │   │   │   │   ├── Panne.tsx
│           │   │   │   │   ├── Sidebar.tsx
│           │   │   │   │   ├── flowStore.ts
│           │   │   │   │   └── index.tsx
│           │   │   │   ├── hook.ts
│           │   │   │   ├── skills/
│           │   │   │   │   ├── CardSelectVersion.tsx
│           │   │   │   │   ├── CreateTemp.tsx
│           │   │   │   │   ├── FormSet.tsx
│           │   │   │   │   ├── editSkill/
│           │   │   │   │   │   ├── CollectionNameComponent/
│           │   │   │   │   │   │   ├── index.tsx
│           │   │   │   │   │   │   └── selectCollection.tsx
│           │   │   │   │   │   ├── ConnectionLineComponent/
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   ├── DisclosureComponent/
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   ├── Header.tsx
│           │   │   │   │   │   ├── PageComponent/
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   ├── SelectionMenuComponent/
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   ├── extraSidebarComponent/
│           │   │   │   │   │   │   ├── PersonalComponents.tsx
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   ├── index.tsx
│           │   │   │   │   │   ├── nodeToolbarComponent/
│           │   │   │   │   │   │   └── index.tsx
│           │   │   │   │   │   └── skillPage.tsx
│           │   │   │   │   └── l2Edit.tsx
│           │   │   │   └── tools/
│           │   │   │       ├── EditMcp.tsx
│           │   │   │       ├── EditTool.tsx
│           │   │   │       ├── ToolItem.tsx
│           │   │   │       ├── ToolSet.tsx
│           │   │   │       ├── builtInTool/
│           │   │   │       │   ├── BingSearch.tsx
│           │   │   │       │   ├── CodeExecutor.tsx
│           │   │   │       │   ├── CrawlerConfig.tsx
│           │   │   │       │   ├── Dalle3.tsx
│           │   │   │       │   ├── EmailConfig.tsx
│           │   │   │       │   ├── FeishuConfig.tsx
│           │   │   │       │   ├── FinancialData.tsx
│           │   │   │       │   ├── InputField.tsx
│           │   │   │       │   ├── JinaConfig.tsx
│           │   │   │       │   ├── SiliconFlowApiKey.tsx
│           │   │   │       │   ├── Tianyancha.tsx
│           │   │   │       │   └── WebSearchFrom.tsx
│           │   │   │       ├── index.tsx
│           │   │   │       └── webSearchStore.ts
│           │   │   ├── ChatAppPage/
│           │   │   │   ├── chatAssitantShare.tsx
│           │   │   │   ├── chatShare.tsx
│           │   │   │   ├── chatWebview.tsx
│           │   │   │   ├── components/
│           │   │   │   │   ├── ChatHome.tsx
│           │   │   │   │   ├── ChatPanne.tsx
│           │   │   │   │   ├── ChatReportForm.tsx
│           │   │   │   │   ├── FileViewPanne.tsx
│           │   │   │   │   ├── ForcePrompt.tsx
│           │   │   │   │   ├── MarkLabel.tsx
│           │   │   │   │   ├── ResouceModal.tsx
│           │   │   │   │   └── ThumbsMessage.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── Dashboard/
│           │   │   │   ├── colorSchemes.ts
│           │   │   │   ├── components/
│           │   │   │   │   ├── AdvancedDatePicker.tsx
│           │   │   │   │   ├── charts/
│           │   │   │   │   │   ├── BaseChart.tsx
│           │   │   │   │   │   ├── ChartContainer.tsx
│           │   │   │   │   │   ├── MetricCard.tsx
│           │   │   │   │   │   └── QueryFilter.tsx
│           │   │   │   │   ├── config/
│           │   │   │   │   │   ├── ChartSelector.tsx
│           │   │   │   │   │   ├── ComponentConfigDrawer.tsx
│           │   │   │   │   │   ├── DashboardConfigPanel.tsx
│           │   │   │   │   │   ├── DatasetSelector.tsx
│           │   │   │   │   │   ├── DimensionBlock.tsx
│           │   │   │   │   │   ├── FilterConditionDialog.tsx
│           │   │   │   │   │   ├── StyleConfigPanel.tsx
│           │   │   │   │   │   └── useChartState.tsx
│           │   │   │   │   ├── dashboard/
│           │   │   │   │   │   ├── DashboardDetail.tsx
│           │   │   │   │   │   ├── DashboardListItem.tsx
│           │   │   │   │   │   └── DashboardSidebar.tsx
│           │   │   │   │   └── editor/
│           │   │   │   │       ├── ComponentPicker.tsx
│           │   │   │   │       ├── ComponentWrapper.tsx
│           │   │   │   │       ├── EditorCanvas.tsx
│           │   │   │   │       ├── EditorHeader.tsx
│           │   │   │   │       ├── Home.tsx
│           │   │   │   │       └── index.css
│           │   │   │   ├── editor.tsx
│           │   │   │   ├── hook.ts
│           │   │   │   ├── index.tsx
│           │   │   │   ├── share.tsx
│           │   │   │   └── types/
│           │   │   │       ├── chartData.ts
│           │   │   │       └── dataConfig.ts
│           │   │   ├── DataSetPage/
│           │   │   │   ├── CreateDataSet.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── DiffFlowPage/
│           │   │   │   ├── components/
│           │   │   │   │   ├── Cell.tsx
│           │   │   │   │   ├── Component.tsx
│           │   │   │   │   ├── ComponentParameter.tsx
│           │   │   │   │   ├── RunForm.tsx
│           │   │   │   │   └── RunTest.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── EvaluationPage/
│           │   │   │   ├── EvaluationCreate.tsx
│           │   │   │   ├── PromptCom.tsx
│           │   │   │   ├── defaultPrompt.js
│           │   │   │   ├── index.tsx
│           │   │   │   └── types.ts
│           │   │   ├── KnowledgePage/
│           │   │   │   ├── AdjustFilesUpload.tsx
│           │   │   │   ├── KnowledgeFile.tsx
│           │   │   │   ├── KnowledgeQa.tsx
│           │   │   │   ├── components/
│           │   │   │   │   ├── DocxFileViewer.tsx
│           │   │   │   │   ├── DuplicateFileDialog.tsx
│           │   │   │   │   ├── EditKnowledgeDialog.tsx
│           │   │   │   │   ├── ExcelPreview.tsx
│           │   │   │   │   ├── FileSelector.tsx
│           │   │   │   │   ├── FileUploadParagraphs.tsx
│           │   │   │   │   ├── FileUploadSplitStrategy.tsx
│           │   │   │   │   ├── FileUploadStep1.tsx
│           │   │   │   │   ├── FileUploadStep2.tsx
│           │   │   │   │   ├── FileUploadStep4.tsx
│           │   │   │   │   ├── Files.tsx
│           │   │   │   │   ├── Guide.tsx
│           │   │   │   │   ├── Header.tsx
│           │   │   │   │   ├── ImportQa.tsx
│           │   │   │   │   ├── Markdown.tsx
│           │   │   │   │   ├── MetadataDialog.tsx
│           │   │   │   │   ├── MetadataManagementDialog.tsx
│           │   │   │   │   ├── ParagraphEdit.tsx
│           │   │   │   │   ├── Paragraphs.tsx
│           │   │   │   │   ├── PreviewFile.tsx
│           │   │   │   │   ├── PreviewParagraph.tsx
│           │   │   │   │   ├── PreviewResult.tsx
│           │   │   │   │   ├── RuleFile.tsx
│           │   │   │   │   ├── RuleTable.tsx
│           │   │   │   │   └── TxtFileViewer.tsx
│           │   │   │   ├── detail.tsx
│           │   │   │   ├── filesUpload.tsx
│           │   │   │   ├── index.tsx
│           │   │   │   ├── qas.tsx
│           │   │   │   └── useKnowledgeStore.ts
│           │   │   ├── LabelPage/
│           │   │   │   ├── AddSimilarQuestions.tsx
│           │   │   │   ├── SaveQaLibForm.tsx
│           │   │   │   ├── index.tsx
│           │   │   │   ├── taskAppChats.tsx
│           │   │   │   └── taskApps.tsx
│           │   │   ├── LogPage/
│           │   │   │   ├── index.tsx
│           │   │   │   ├── systemLog/
│           │   │   │   │   └── index.tsx
│           │   │   │   └── useAppLog/
│           │   │   │       ├── DailyMessageContent.tsx
│           │   │   │       ├── appChatDetail.tsx
│           │   │   │       ├── dailyChatDetail.tsx
│           │   │   │       └── index.tsx
│           │   │   ├── LoginPage/
│           │   │   │   ├── UserPwdModal.tsx
│           │   │   │   ├── login.tsx
│           │   │   │   ├── loginBridge.tsx
│           │   │   │   ├── resetPwd.tsx
│           │   │   │   └── utils.ts
│           │   │   ├── ModelPage/
│           │   │   │   ├── components/
│           │   │   │   │   ├── Combobox.tsx
│           │   │   │   │   ├── CreateTask.tsx
│           │   │   │   │   ├── CreateTaskList.tsx
│           │   │   │   │   ├── FinetuneDetail.tsx
│           │   │   │   │   ├── FinetuneHead.tsx
│           │   │   │   │   ├── FinetuneResult.tsx
│           │   │   │   │   ├── RTConfig.tsx
│           │   │   │   │   ├── UploadModal.tsx
│           │   │   │   │   └── sampleData.js
│           │   │   │   ├── cpuInfo.tsx
│           │   │   │   ├── doc.tsx
│           │   │   │   ├── finetune.tsx
│           │   │   │   └── manage/
│           │   │   │       ├── CustomForm.tsx
│           │   │   │       ├── ModelConfig.tsx
│           │   │   │       ├── SystemModelConfig.tsx
│           │   │   │       ├── index.tsx
│           │   │   │       ├── tabs/
│           │   │   │       │   ├── AssisModel.tsx
│           │   │   │       │   ├── EvaluationModel.tsx
│           │   │   │       │   ├── KnowledgeModel.tsx
│           │   │   │       │   ├── WorkbenchModel.tsx
│           │   │   │       │   └── WorkflowModel.tsx
│           │   │   │       └── useLink.ts
│           │   │   ├── Page403.tsx
│           │   │   ├── Page404.tsx
│           │   │   ├── Report/
│           │   │   │   ├── components/
│           │   │   │   │   ├── Label.tsx
│           │   │   │   │   └── Word.tsx
│           │   │   │   └── index.tsx
│           │   │   ├── SystemPage/
│           │   │   │   ├── components/
│           │   │   │   │   ├── Config.tsx
│           │   │   │   │   ├── CreateUser.tsx
│           │   │   │   │   ├── EditRole.tsx
│           │   │   │   │   ├── EditUserGroup.tsx
│           │   │   │   │   ├── Roles.tsx
│           │   │   │   │   ├── UserGroup.tsx
│           │   │   │   │   ├── UserRoleItem.tsx
│           │   │   │   │   ├── UserRoleModal.tsx
│           │   │   │   │   └── Users.tsx
│           │   │   │   ├── index.tsx
│           │   │   │   └── theme/
│           │   │   │       ├── Example.tsx
│           │   │   │       ├── HSLitem.tsx
│           │   │   │       └── index.tsx
│           │   │   └── resoucePage.tsx
│           │   ├── prettierrc.js
│           │   ├── reportWebVitals.ts
│           │   ├── routes/
│           │   │   ├── RouteErrorBoundary.tsx
│           │   │   └── index.tsx
│           │   ├── store/
│           │   │   ├── assistantStore.tsx
│           │   │   ├── dashboardStore.tsx
│           │   │   ├── diffFlowStore.tsx
│           │   │   └── editFlowStore.tsx
│           │   ├── style/
│           │   │   ├── applies.css
│           │   │   ├── classes.css
│           │   │   ├── index.css
│           │   │   ├── markdown.css
│           │   │   └── vditor.css
│           │   ├── types/
│           │   │   ├── alerts/
│           │   │   │   └── index.ts
│           │   │   ├── api/
│           │   │   │   ├── app.ts
│           │   │   │   ├── finetune.ts
│           │   │   │   ├── index.ts
│           │   │   │   └── user.ts
│           │   │   ├── app.ts
│           │   │   ├── assistant/
│           │   │   │   └── index.tsx
│           │   │   ├── chat/
│           │   │   │   └── index.ts
│           │   │   ├── components/
│           │   │   │   └── index.ts
│           │   │   ├── entities/
│           │   │   │   └── index.ts
│           │   │   ├── flow/
│           │   │   │   └── index.ts
│           │   │   ├── global.d.ts
│           │   │   ├── tabs/
│           │   │   │   └── index.ts
│           │   │   ├── templatesContext/
│           │   │   │   └── index.ts
│           │   │   ├── typesContext/
│           │   │   │   └── index.ts
│           │   │   └── utils/
│           │   │       └── reactflowUtils.ts
│           │   ├── util/
│           │   │   ├── advancedParamsTemplates.ts
│           │   │   ├── flowCompatible.ts
│           │   │   ├── flowUtils.ts
│           │   │   ├── hook.ts
│           │   │   ├── reactflowUtils.ts
│           │   │   └── utils.ts
│           │   ├── utils.ts
│           │   └── workspace/
│           │       ├── DownloadList.tsx
│           │       ├── FileDrawer.tsx
│           │       ├── FileIcon.tsx
│           │       ├── FilePreview.tsx
│           │       ├── FilePreviewDrawer.tsx
│           │       ├── README.md
│           │       ├── SearchKnowledgeSheet.tsx
│           │       ├── SopTasks.tsx
│           │       ├── WebSearchSheet.tsx
│           │       └── markdown/
│           │           ├── Echarts.tsx
│           │           └── Mermaid.tsx
│           ├── tailwind.config.js
│           ├── tsconfig.json
│           └── vite.config.mts
└── update.sh
Download .txt
Showing preview only (1,698K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (17806 symbols across 1949 files)

FILE: docker/office/bisheng/all.js
  method sendToParent (line 15) | sendToParent (method, data) {
  method focusInDocument (line 23) | focusInDocument (data) {
  method focusTableInDoc (line 47) | focusTableInDoc (data) {
  method addMarker (line 56) | addMarker (data) {
  method addBookMarker (line 60) | addBookMarker (data) {
  method deleteBookMarker (line 116) | deleteBookMarker (data) {
  method deleteLoopApp (line 127) | deleteLoopApp (list) {
  method replaceMarker (line 143) | replaceMarker (data) {
  method findAndInsertMarker (line 158) | findAndInsertMarker (data) {
  method insertPosition (line 166) | insertPosition (data) {
  method deletePosition (line 214) | deletePosition (data) {
  method deletePositionMarker (line 225) | deletePositionMarker (data) {
  method deletePositionArray (line 235) | deletePositionArray (data) {
  method replaceRangePosition (line 245) | replaceRangePosition (data) {
  method delMarker (line 255) | delMarker (data) {
  method delMarkerGroup (line 275) | delMarkerGroup (data) {
  method insertCellName (line 279) | insertCellName (field) {
  method getFocusedCell (line 308) | getFocusedCell () {
  method loadFileFlags (line 323) | loadFileFlags (data) {
  method focusCell (line 372) | focusCell (data) {
  method getSelectedText (line 388) | getSelectedText (data) {
  function receiveMessage (line 414) | function receiveMessage (e) {

FILE: docker/office/bisheng/bisheng.js
  function onMessage (line 6) | function onMessage(e) {

FILE: src/backend/bisheng/api/services/assistant.py
  class AssistantService (line 39) | class AssistantService(BaseService, AssistantUtils):
    method get_assistant (line 43) | def get_assistant(cls,
    method return_simple_assistant_info (line 98) | def return_simple_assistant_info(cls, one: Assistant) -> AssistantSimp...
    method get_assistant_info (line 109) | async def get_assistant_info(cls, assistant_id: str, login_user: UserP...
    method get_one_assistant (line 145) | async def get_one_assistant(cls, assistant_id: str) -> Optional[Assist...
    method create_assistant (line 151) | async def create_assistant(cls, request: Request, login_user: UserPayl...
    method create_assistant_hook (line 189) | def create_assistant_hook(cls, request: Request, assistant: Assistant,...
    method delete_assistant (line 214) | def delete_assistant(cls, request: Request, login_user: UserPayload, a...
    method delete_assistant_hook (line 231) | def delete_assistant_hook(cls, request: Request, login_user: UserPaylo...
    method auto_update_stream (line 246) | async def auto_update_stream(cls, assistant_id: str, prompt: str, logi...
    method update_assistant (line 283) | async def update_assistant(cls, request: Request, login_user: UserPayl...
    method update_assistant_hook (line 330) | def update_assistant_hook(cls, request: Request, login_user: UserPaylo...
    method update_status (line 342) | async def update_status(cls, request: Request, login_user: UserPayload...
    method update_prompt (line 371) | def update_prompt(cls, assistant_id: str, prompt: str, user_payload: U...
    method update_flow_list (line 387) | def update_flow_list(cls, assistant_id: str, flow_list: List[str],
    method update_tool_list (line 400) | def update_tool_list(cls, assistant_id: str, tool_list: List[int],
    method check_update_permission (line 413) | def check_update_permission(cls, assistant: Assistant, user_payload: U...
    method get_link_info (line 424) | def get_link_info(cls,
    method get_user_name (line 434) | def get_user_name(cls, user_id: int):
    method judge_name_repeat (line 447) | def judge_name_repeat(cls, name: str, user_id: int) -> bool:
    method get_auto_info (line 455) | async def get_auto_info(cls, assistant: Assistant, login_user: UserPay...
    method get_auto_tool_info (line 470) | def get_auto_tool_info(cls, assistant: Assistant, auto_agent: Assistan...
    method get_auto_flow_info (line 498) | def get_auto_flow_info(cls, assistant: Assistant, auto_agent: Assistan...

FILE: src/backend/bisheng/api/services/assistant_agent.py
  class AssistantAgent (line 34) | class AssistantAgent(AssistantUtils):
    method __init__ (line 53) | def __init__(self, assistant_info: Assistant, chat_id: str, invoke_use...
    method init_assistant (line 73) | async def init_assistant(self, callbacks: Callbacks = None):
    method init_llm (line 78) | async def init_llm(self):
    method init_auto_update_llm (line 108) | async def init_auto_update_llm(self):
    method init_tools (line 122) | async def init_tools(self, callbacks: Callbacks = None):
    method init_agent (line 192) | async def init_agent(self):
    method optimize_assistant_prompt (line 224) | async def optimize_assistant_prompt(self):
    method sync_optimize_assistant_prompt (line 238) | def sync_optimize_assistant_prompt(self):
    method generate_guide (line 241) | def generate_guide(self, prompt: str):
    method generate_description (line 245) | def generate_description(self, prompt: str):
    method choose_tools (line 249) | def choose_tools(self, tool_list: List[Dict[str, str]], prompt: str) -...
    method fake_callback (line 261) | async def fake_callback(self, callback: Callbacks):
    method record_chat_history (line 274) | async def record_chat_history(self, message: List[Any]):
    method trim_messages (line 294) | async def trim_messages(self, messages: List[Any]) -> List[Any]:
    method run (line 320) | async def run(self, query: str, chat_history: List = None, callback: C...
    method astream (line 346) | async def astream(self, query: str, chat_history: List = None, callbac...
    method react_run (line 407) | async def react_run(self, inputs: List, callback: Callbacks = None):

FILE: src/backend/bisheng/api/services/assistant_base.py
  class AssistantUtils (line 7) | class AssistantUtils:
    method cl100k_base (line 11) | def cl100k_base() -> TikTokenEncoding:

FILE: src/backend/bisheng/api/services/audit_log.py
  class AuditLogService (line 34) | class AuditLogService:
    method get_audit_log (line 37) | async def get_audit_log(cls, login_user: UserPayload, group_ids, opera...
    method get_all_operators (line 58) | def get_all_operators(cls, login_user: UserPayload) -> List[Dict]:
    method _chat_log (line 75) | def _chat_log(cls, user: UserPayload, ip_address: str, event_type: Eve...
    method _chat_log_async (line 94) | async def _chat_log_async(cls, user: UserPayload, ip_address: str, eve...
    method create_chat_assistant (line 116) | def create_chat_assistant(cls, user: UserPayload, ip_address: str, ass...
    method create_chat_flow (line 127) | def create_chat_flow(cls, user: UserPayload, ip_address: str, flow_id:...
    method create_chat_workflow (line 138) | def create_chat_workflow(cls, user: UserPayload, ip_address: str, flow...
    method delete_chat_flow (line 149) | async def delete_chat_flow(cls, user: UserPayload, ip_address: str, fl...
    method delete_chat_workflow (line 158) | async def delete_chat_workflow(cls, user: UserPayload, ip_address: str...
    method delete_chat_assistant (line 167) | async def delete_chat_assistant(cls, user: UserPayload, ip_address: st...
    method _build_log (line 176) | def _build_log(cls, user: UserPayload, ip_address: str, event_type: Ev...
    method _build_log_async (line 201) | async def _build_log_async(cls, user: UserPayload, ip_address: str, ev...
    method create_build_flow (line 226) | def create_build_flow(cls, user: UserPayload, ip_address: str, flow_id...
    method update_build_flow (line 241) | async def update_build_flow(cls, user: UserPayload, ip_address: str, f...
    method delete_build_flow (line 256) | def delete_build_flow(cls, user: UserPayload, ip_address: str, flow_in...
    method create_build_assistant (line 270) | def create_build_assistant(cls, user: UserPayload, ip_address: str, as...
    method update_build_assistant (line 280) | def update_build_assistant(cls, user: UserPayload, ip_address: str, as...
    method delete_build_assistant (line 291) | def delete_build_assistant(cls, user: UserPayload, ip_address: str, as...
    method create_chat_message (line 302) | async def create_chat_message(cls, user: UserPayload, ip_address: str,...
    method delete_chat_message (line 321) | async def delete_chat_message(cls, user: UserPayload, ip_address: str,...
    method _knowledge_log (line 336) | def _knowledge_log(cls, user: UserPayload, ip_address: str, event_type...
    method create_knowledge (line 360) | def create_knowledge(cls, user: UserPayload, ip_address: str, knowledg...
    method delete_knowledge (line 370) | def delete_knowledge(cls, user: UserPayload, ip_address: str, knowledg...
    method upload_knowledge_file (line 379) | def upload_knowledge_file(cls, user: UserPayload, ip_address: str, kno...
    method delete_knowledge_file (line 389) | def delete_knowledge_file(cls, user: UserPayload, ip_address: str, kno...
    method _system_log (line 399) | def _system_log(cls, user: UserPayload, ip_address: str, group_ids: Li...
    method update_user (line 417) | def update_user(cls, user: UserPayload, ip_address: str, user_id: int,...
    method forbid_user (line 427) | def forbid_user(cls, user: UserPayload, ip_address: str, user_info: Us...
    method recover_user (line 440) | def recover_user(cls, user: UserPayload, ip_address: str, user_info: U...
    method create_user_group (line 449) | def create_user_group(cls, user: UserPayload, ip_address: str, group_i...
    method update_user_group (line 455) | def update_user_group(cls, user: UserPayload, ip_address: str, group_i...
    method delete_user_group (line 462) | def delete_user_group(cls, user: UserPayload, ip_address: str, group_i...
    method create_role (line 469) | def create_role(cls, user: UserPayload, ip_address: str, role: Role):
    method update_role (line 476) | def update_role(cls, user: UserPayload, ip_address: str, role: Role):
    method delete_role (line 483) | def delete_role(cls, user: UserPayload, ip_address: str, role: Role):
    method create_tool (line 490) | def create_tool(cls, user: UserPayload, ip_address: str, group_ids: Li...
    method update_tool (line 497) | def update_tool(cls, user: UserPayload, ip_address: str, group_ids: Li...
    method delete_tool (line 504) | def delete_tool(cls, user: UserPayload, ip_address: str, group_ids: Li...
    method user_login (line 510) | def user_login(cls, user: UserPayload, ip_address: str):
    method _dashboard_log (line 519) | async def _dashboard_log(cls, user: UserPayload, ip_address: str, grou...
    method create_dashboard (line 536) | async def create_dashboard(cls, user: UserPayload, ip_address: str, da...
    method update_dashboard (line 542) | async def update_dashboard(cls, user: UserPayload, ip_address: str, da...
    method delete_dashboard (line 548) | async def delete_dashboard(cls, user: UserPayload, ip_address: str, da...
    method get_filter_flow_ids (line 554) | async def get_filter_flow_ids(cls, user: UserPayload, flow_ids: List[s...
    method get_session_list (line 600) | async def get_session_list(cls, user: UserPayload, flow_ids: List[str]...
    method get_session_messages (line 735) | async def get_session_messages(cls, user: UserPayload, flow_ids: List[...
    method export_session_messages (line 753) | async def export_session_messages(cls, user: UserPayload, flow_ids: Li...
    method get_chat_messages (line 804) | async def get_chat_messages(cls, chat_list: List[AppChatList]) -> List...

FILE: src/backend/bisheng/api/services/base.py
  class BaseService (line 6) | class BaseService:
    method get_logo_share_link (line 10) | def get_logo_share_link(cls, logo_path: str):
    method get_logo_share_link_async (line 36) | async def get_logo_share_link_async(cls, logo_path: str):

FILE: src/backend/bisheng/api/services/chat_imp.py
  class TimedQueue (line 22) | class TimedQueue:
    method __init__ (line 24) | def __init__(self):
    method put_nowait (line 28) | async def put_nowait(self, item):
    method get_nowait (line 32) | async def get_nowait(self):
    method empty (line 36) | def empty(self):
    method qsize (line 39) | def qsize(self):
  function clean_inactive_queues (line 43) | async def clean_inactive_queues(queue: defaultdict, timeout_threshold: t...
  function get_connection (line 62) | async def get_connection(uri, identifier):
  function release_connection (line 78) | async def release_connection(identifier, websocket):
  function comment_answer (line 85) | def comment_answer(message_id: int, comment: str):
  class ContentStreamResp (line 94) | class ContentStreamResp(BaseModel):
  class ChoiceStreamResp (line 99) | class ChoiceStreamResp(BaseModel):
    method __str__ (line 104) | def __str__(self) -> str:
  function event_stream (line 110) | async def event_stream(

FILE: src/backend/bisheng/api/services/component.py
  class ComponentService (line 9) | class ComponentService:
    method get_all_component (line 11) | def get_all_component(cls, user: UserPayload) -> UnifiedResponseModel[...
    method save_component (line 16) | def save_component(cls, component: Component) -> UnifiedResponseModel[...
    method update_component (line 24) | def update_component(cls, component: Component) -> UnifiedResponseMode...
    method delete_component (line 35) | def delete_component(cls, user_id: int, name: str) -> UnifiedResponseM...

FILE: src/backend/bisheng/api/services/dataset_service.py
  class DatasetService (line 13) | class DatasetService(BaseService):
    method build_dataset_list (line 16) | def build_dataset_list(cls,
    method create_dataset (line 43) | def create_dataset(cls, user_id: int, data: CreateDatasetParam):
    method delete_dataset (line 65) | def delete_dataset(cls, dataset_id: int):
    method get_one_by_object_name (line 78) | async def get_one_by_object_name(cls, object_name: str) -> Optional[Da...

FILE: src/backend/bisheng/api/services/etl4lm_loader.py
  function get_image_tag (line 24) | def get_image_tag(results, part):
  function get_image_parts (line 30) | def get_image_parts(partitions):
  function crop_image (line 50) | def crop_image(image_file, item, cropped_imag_base_dir):
  function extract_pdf_images (line 61) | def extract_pdf_images(file_name, page_dict, doc_id, knowledge_id):
  function pre_handle (line 97) | def pre_handle(partitions, file_name, knowledge_id):
  function merge_partitions (line 105) | def merge_partitions(file_name, partitions, knowledge_id=None):
  class Etl4lmLoader (line 157) | class Etl4lmLoader(BasePDFLoader):
    method __init__ (line 163) | def __init__(
    method load (line 197) | def load(self) -> List[Document]:
    method aload (line 268) | async def aload(self) -> List[Document]:

FILE: src/backend/bisheng/api/services/evaluation.py
  class EvaluationService (line 44) | class EvaluationService:
    method get_evaluation (line 48) | def get_evaluation(cls,
    method delete_evaluation (line 119) | def delete_evaluation(cls, evaluation_id: int, user_payload: UserPaylo...
    method get_user_name (line 128) | def get_user_name(cls, user_id: int):
    method upload_file (line 141) | def upload_file(cls, file: UploadFile):
    method upload_result_file (line 153) | def upload_result_file(cls, df: pd.DataFrame):
    method read_csv_file (line 170) | def read_csv_file(cls, file_path: str):
    method parse_csv (line 178) | def parse_csv(cls, file_data: io.BytesIO):
    method get_redis_key (line 190) | def get_redis_key(cls, evaluation_id: int):
    method get_input_keys (line 194) | async def get_input_keys(cls, flow_id: str, version_id: int):
  function execute_workflow_get_answer (line 241) | def execute_workflow_get_answer(workflow_info: FlowVersion, evaluation: ...
  function add_evaluation_task (line 303) | async def add_evaluation_task(evaluation_id: int):

FILE: src/backend/bisheng/api/services/flow.py
  class FlowService (line 38) | class FlowService(BaseService):
    method get_version_list_by_flow (line 41) | def get_version_list_by_flow(cls, user: UserPayload, flow_id: str) -> ...
    method get_version_info (line 54) | def get_version_info(cls, user: UserPayload, version_id: int) -> Unifi...
    method delete_version (line 62) | def delete_version(cls, user: UserPayload, version_id: int) -> Unified...
    method judge_flow_write_permission (line 94) | async def judge_flow_write_permission(cls, user: UserPayload, flow_id:...
    method change_current_version (line 109) | async def change_current_version(cls, request: Request, login_user: Us...
    method create_new_version (line 139) | async def create_new_version(cls, user: UserPayload, flow_id: str, flo...
    method update_version_info (line 175) | async def update_version_info(cls, request: Request, user: UserPayload...
    method get_one_flow (line 218) | async def get_one_flow(cls, login_user: UserPayload, flow_id: str, sha...
    method get_all_flows (line 240) | def get_all_flows(cls, user: UserPayload, name: str, status: int, tag_...
    method get_compare_tasks (line 320) | async def get_compare_tasks(cls, user: UserPayload, req: FlowCompareRe...
    method parse_compare_inputs (line 346) | def parse_compare_inputs(cls, inputs: Dict, question) -> (Dict, Dict):
    method compare_flow_node (line 372) | async def compare_flow_node(cls, user: UserPayload, req: FlowCompareRe...
    method compare_flow_stream (line 392) | async def compare_flow_stream(cls, user: UserPayload, req: FlowCompare...
    method exec_flow_node (line 408) | async def exec_flow_node(cls, inputs: Dict, tweaks: Dict, index: int, ...
    method create_flow_hook (line 437) | def create_flow_hook(cls, request: Request, login_user: UserPayload, f...
    method update_flow_hook (line 468) | async def update_flow_hook(cls, request: Request, login_user: UserPayl...
    method delete_flow_hook (line 478) | def delete_flow_hook(cls, request: Request, login_user: UserPayload, f...

FILE: src/backend/bisheng/api/services/invite_code/code_validator.py
  class VoucherGenerator (line 5) | class VoucherGenerator:
    method __init__ (line 6) | def __init__(self, length=10):
    method generate_voucher (line 13) | def generate_voucher(self):
    method calculate_check_digit (line 18) | def calculate_check_digit(self, voucher_base):
    method validate_voucher (line 24) | def validate_voucher(self, voucher):

FILE: src/backend/bisheng/api/services/invite_code/invite_code.py
  class InviteCodeService (line 10) | class InviteCodeService:
    method use_invite_code (line 13) | async def use_invite_code(cls, user_id: int) -> bool:
    method revoke_invite_code (line 31) | async def revoke_invite_code(cls, user_id: int) -> bool:
    method create_batch_invite_codes (line 52) | async def create_batch_invite_codes(cls, login_user: UserPayload, name...
    method get_invite_code_num (line 84) | async def get_invite_code_num(cls, login_user: UserPayload) -> int:
    method bind_invite_code (line 97) | async def bind_invite_code(cls, login_user: UserPayload, code: str) ->...

FILE: src/backend/bisheng/api/services/knowledge.py
  class KnowledgeService (line 72) | class KnowledgeService(KnowledgeUtils):
    method get_knowledge (line 75) | async def get_knowledge(
    method convert_knowledge_read (line 117) | def convert_knowledge_read(
    method get_knowledge_info (line 138) | def get_knowledge_info(
    method create_knowledge (line 157) | def create_knowledge(
    method create_knowledge_hook (line 202) | def create_knowledge_hook(
    method update_knowledge (line 237) | def update_knowledge(
    method delete_knowledge (line 267) | def delete_knowledge(
    method delete_knowledge_file_in_vector (line 301) | def delete_knowledge_file_in_vector(cls, knowledge: Knowledge, del_es:...
    method delete_knowledge_hook (line 331) | def delete_knowledge_hook(
    method delete_knowledge_file_in_minio (line 347) | def delete_knowledge_file_in_minio(cls, knowledge_id: int):
    method get_upload_file_original_name (line 367) | def get_upload_file_original_name(cls, file_name: str) -> str:
    method save_upload_file_original_name (line 379) | async def save_upload_file_original_name(cls, original_file_name: str)...
    method get_preview_file_chunk (line 393) | async def get_preview_file_chunk(
    method update_preview_file_chunk (line 478) | async def update_preview_file_chunk(
    method delete_preview_file_chunk (line 498) | def delete_preview_file_chunk(
    method save_knowledge_file (line 511) | def save_knowledge_file(
    method process_knowledge_file (line 545) | def process_knowledge_file(
    method sync_process_knowledge_file (line 567) | def sync_process_knowledge_file(
    method rebuild_knowledge_file (line 594) | async def rebuild_knowledge_file(cls, request: Request,
    method retry_files (line 634) | def retry_files(
    method upload_knowledge_file_hook (line 697) | def upload_knowledge_file_hook(
    method process_one_file (line 718) | def process_one_file(
    method get_knowledge_files_title (line 794) | def get_knowledge_files_title(cls, db_knowledge: Knowledge, files: Lis...
    method get_knowledge_files (line 835) | def get_knowledge_files(
    method delete_knowledge_file (line 886) | def delete_knowledge_file(
    method delete_knowledge_file_hook (line 919) | def delete_knowledge_file_hook(
    method judge_knowledge_access (line 939) | def judge_knowledge_access(cls, login_user: UserPayload, knowledge_id:...
    method get_knowledge_chunks (line 951) | def get_knowledge_chunks(
    method update_chunk_updater_info (line 1018) | def update_chunk_updater_info(cls, vector_client, es_client, db_knowle...
    method update_knowledge_chunk (line 1059) | def update_knowledge_chunk(
    method delete_knowledge_chunk (line 1129) | def delete_knowledge_chunk(
    method get_file_share_url (line 1172) | def get_file_share_url(cls, file_id: int) -> (str, str):
    method get_file_share_url_with_empty (line 1193) | def get_file_share_url_with_empty(cls, object_name: str) -> str:
    method get_file_bbox (line 1205) | def get_file_bbox(
    method copy_knowledge (line 1220) | async def copy_knowledge(
    method copy_qa_knowledge (line 1254) | async def copy_qa_knowledge(
    method judge_qa_knowledge_write (line 1284) | def judge_qa_knowledge_write(

FILE: src/backend/bisheng/api/services/knowledge_imp.py
  class KnowledgeUtils (line 85) | class KnowledgeUtils:
    method get_preview_cache_key (line 90) | def get_preview_cache_key(cls, knowledge_id: int, file_path: str, md5_...
    method aggregate_chunk_metadata (line 96) | def aggregate_chunk_metadata(cls, chunk: str, metadata: dict) -> str:
    method chunk2promt (line 105) | def chunk2promt(cls, chunk: str, metadata: dict) -> str:
    method split_chunk_metadata (line 111) | def split_chunk_metadata(cls, chunk: str) -> str:
    method async_save_preview_cache (line 123) | async def async_save_preview_cache(
    method delete_preview_cache (line 137) | def delete_preview_cache(cls, cache_key, chunk_index: int = None):
    method get_preview_cache (line 148) | def get_preview_cache(cls, cache_key, chunk_index: int = None) -> dict:
    method async_get_preview_cache (line 162) | async def async_get_preview_cache(cls, cache_key, chunk_index: int = N...
    method get_knowledge_file_image_dir (line 176) | def get_knowledge_file_image_dir(cls, doc_id: str, knowledge_id: int =...
    method get_knowledge_file_object_name (line 184) | def get_knowledge_file_object_name(cls, file_id: int, file_name: str) ...
    method get_knowledge_bbox_file_object_name (line 190) | def get_knowledge_bbox_file_object_name(cls, file_id: int) -> str:
    method get_knowledge_preview_file_object_name (line 195) | def get_knowledge_preview_file_object_name(
    method get_tmp_preview_file_object_name (line 208) | def get_tmp_preview_file_object_name(cls, file_path: str) -> Optional[...
  function put_images_to_minio (line 220) | def put_images_to_minio(local_image_dir, knowledge_id, doc_id):
  function async_images_to_minio (line 236) | async def async_images_to_minio(local_image_dir, knowledge_id, doc_id):
  function process_file_task (line 252) | def process_file_task(
  function delete_vector_files (line 301) | def delete_vector_files(file_ids: List[int], knowledge: Knowledge) -> bool:
  function delete_minio_files (line 327) | def delete_minio_files(file: KnowledgeFile):
  function delete_knowledge_file_vectors (line 352) | def delete_knowledge_file_vectors(file_ids: List[int], clear_minio: bool...
  function decide_vectorstores (line 369) | def decide_vectorstores(
  function decide_knowledge_llm (line 402) | def decide_knowledge_llm(invoke_user_id: int) -> Any:
  function async_decide_knowledge_llm (line 420) | async def async_decide_knowledge_llm(invoke_user_id: int) -> Any:
  function addEmbedding (line 438) | def addEmbedding(
  function add_file_embedding (line 543) | def add_file_embedding(
  function add_text_into_vector (line 698) | def add_text_into_vector(
  function parse_partitions (line 714) | def parse_partitions(partitions: List[Any]) -> Dict:
  function upload_preview_file_to_minio (line 734) | def upload_preview_file_to_minio(original_file_path: str, preview_file_p...
  function async_upload_preview_file_to_minio (line 753) | async def async_upload_preview_file_to_minio(
  function parse_document_title (line 774) | def parse_document_title(title: str) -> str:
  function read_chunk_text (line 789) | def read_chunk_text(
  function async_read_chunk_text (line 1000) | async def async_read_chunk_text(
  function text_knowledge (line 1203) | def text_knowledge(
  function delete_vector (line 1279) | def delete_vector(collection_name: str, partition_key: str):
  function delete_es (line 1295) | def delete_es(index_name: str):
  function QA_save_knowledge (line 1309) | def QA_save_knowledge(db_knowledge: Knowledge, QA: QAKnowledge):
  function add_qa (line 1363) | def add_qa(db_knowledge: Knowledge, data: QAKnowledgeUpsert) -> QAKnowle...
  function qa_status_change (line 1394) | def qa_status_change(qa_db: QAKnowledge, target_status: int, db_knowledg...
  function list_qa_by_knowledge_id (line 1411) | async def list_qa_by_knowledge_id(
  function delete_vector_data (line 1466) | def delete_vector_data(knowledge: Knowledge, file_ids: List[int]):
  function recommend_question (line 1522) | def recommend_question(invoke_user_id: int, question: str, answer: str, ...
  function extract_code_blocks (line 1573) | def extract_code_blocks(markdown_code_block: str):

FILE: src/backend/bisheng/api/services/libreoffice_converter.py
  function get_libreoffice_path (line 9) | def get_libreoffice_path():
  function _convert_file_extension (line 36) | def _convert_file_extension(input_path, convert_extension, output_dir=No...
  function convert_doc_to_docx (line 126) | def convert_doc_to_docx(input_doc_path, output_dir=None):
  function convert_ppt_to_pdf (line 147) | def convert_ppt_to_pdf(input_path, output_dir=None):
  function convert_ppt_to_pptx (line 163) | def convert_ppt_to_pptx(input_path, output_dir=None):

FILE: src/backend/bisheng/api/services/md_from_docx.py
  function convert_doc_to_md_pandoc_high_quality (line 25) | def convert_doc_to_md_pandoc_high_quality(
  function handler (line 95) | def handler(cache_dir, file_name):

FILE: src/backend/bisheng/api/services/md_from_excel.py
  function xls_to_xlsx (line 11) | def xls_to_xlsx(xls_path):
  function remove_characters (line 49) | def remove_characters(s, chars_to_remove=["\n", "\r"]):
  function unmerge_and_read_sheet (line 60) | def unmerge_and_read_sheet(sheet_obj):
  function generate_markdown_table_string (line 106) | def generate_markdown_table_string(
  function process_dataframe_to_markdown_files (line 159) | def process_dataframe_to_markdown_files(
  function is_list_of_lists_empty (line 268) | def is_list_of_lists_empty(data_list):
  function excel_file_to_markdown (line 280) | def excel_file_to_markdown(
  function csv_file_to_markdown (line 323) | def csv_file_to_markdown(
  function convert_file_to_markdown (line 369) | def convert_file_to_markdown(
  function handler (line 418) | def handler(

FILE: src/backend/bisheng/api/services/md_from_html.py
  class HTML2MarkdownConverter (line 18) | class HTML2MarkdownConverter:
    method __init__ (line 19) | def __init__(
    method _clean_html (line 35) | def _clean_html(self, html_content):
    method _download_media_file (line 114) | def _download_media_file(
    method _process_images_in_html (line 335) | def _process_images_in_html(
    method _process_videos_in_html (line 399) | def _process_videos_in_html(
    method _cleanup_markdown (line 557) | def _cleanup_markdown(self, markdown_text):
    method convert (line 572) | def convert(self, source, output_filename_stem=None):
  function html_handler (line 700) | def html_handler(input_file_name, doc_id, converter):
  function handler (line 712) | def handler(cache_dir, file_or_url: str):

FILE: src/backend/bisheng/api/services/md_from_pdf.py
  function convert_pdf_to_md (line 11) | def convert_pdf_to_md(output_dir, pdf_path, doc_id):
  function is_pdf_damaged (line 131) | def is_pdf_damaged(pdf_path: str) -> bool:
  function handler (line 150) | def handler(cache_dir, file_or_url: str):
  function exec_thread_safe (line 157) | def exec_thread_safe():

FILE: src/backend/bisheng/api/services/md_from_pptx.py
  function parser_pptx2md (line 6) | def parser_pptx2md(
  function handler (line 29) | def handler(

FILE: src/backend/bisheng/api/services/md_post_processing.py
  function post_processing (line 8) | def post_processing(file_path, retain_images=True):

FILE: src/backend/bisheng/api/services/patch_130.py
  function combine_multiple_md_files_to_raw_texts (line 15) | def combine_multiple_md_files_to_raw_texts(
  function convert_file_to_md (line 42) | def convert_file_to_md(
  function replace_image_url (line 108) | def replace_image_url(

FILE: src/backend/bisheng/api/services/role_group_service.py
  class RoleGroupService (line 32) | class RoleGroupService():
    method get_group_list (line 34) | def get_group_list(self, group_ids: List[int]) -> List[GroupRead]:
    method create_group (line 58) | def create_group(self, request: Request, login_user: UserPayload, grou...
    method create_group_hook (line 70) | def create_group_hook(self, request: Request, login_user: UserPayload,...
    method update_group (line 77) | def update_group(self, request: Request, login_user: UserPayload, grou...
    method update_group_hook (line 91) | def update_group_hook(self, request: Request, login_user: UserPayload,...
    method delete_group (line 96) | def delete_group(self, request: Request, login_user: UserPayload, grou...
    method delete_group_hook (line 112) | def delete_group_hook(self, request: Request, login_user: UserPayload,...
    method get_group_user_list (line 141) | def get_group_user_list(self, group_id: int, page_size: int, page_num:...
    method insert_user_group (line 152) | def insert_user_group(self, user_group: UserGroupCreate) -> UserGroupR...
    method replace_user_groups (line 161) | def replace_user_groups(self, request: Request, login_user: UserPayloa...
    method get_user_groups_list (line 210) | def get_user_groups_list(self, user_id: int) -> List[GroupRead]:
    method set_group_admin (line 218) | def set_group_admin(self, request: Request, login_user: UserPayload, u...
    method set_group_update_user (line 245) | def set_group_update_user(self, login_user: UserPayload, group_id: int):
    method get_group_resources (line 249) | async def get_group_resources(self, group_id: int, resource_type: Reso...
    method get_user_map (line 267) | def get_user_map(self, user_ids: set[int]):
    method aget_user_map (line 272) | async def aget_user_map(self, user_ids: set[int]):
    method get_group_flow (line 277) | def get_group_flow(self, group_id: int, keyword: str, page_size: int, ...
    method get_group_knowledge (line 300) | def get_group_knowledge(self, group_id: int, keyword: str, page_size: ...
    method get_group_assistant (line 318) | def get_group_assistant(self, group_id: int, keyword: str, page_size: ...
    method get_group_tool (line 332) | def get_group_tool(self, group_id: int, keyword: str, page_size: int, ...
    method get_group_dashboards (line 350) | async def get_group_dashboards(self, group_id: int, keyword: str, page...
    method get_manage_resources (line 377) | async def get_manage_resources(self, login_user: UserPayload, keyword:...

FILE: src/backend/bisheng/api/services/tag.py
  class TagService (line 18) | class TagService:
    method get_all_tag (line 21) | def get_all_tag(cls,
    method create_tag (line 30) | def create_tag(cls,
    method update_tag (line 43) | def update_tag(cls,
    method delete_tag (line 61) | def delete_tag(cls,
    method check_tag_link_permission (line 69) | def check_tag_link_permission(cls,
    method create_tag_link (line 106) | def create_tag_link(cls,
    method delete_tag_link (line 125) | def delete_tag_link(cls,
    method get_home_tag (line 137) | def get_home_tag(cls,
    method update_home_tag (line 151) | def update_home_tag(cls,

FILE: src/backend/bisheng/api/services/utils.py
  function set_flow_knowledge_id (line 7) | def set_flow_knowledge_id(graph_data: dict, knowledge_id: int):
  function replace_flow_llm (line 18) | def replace_flow_llm(graph_data: dict, llm: BaseLanguageModel, llm_param...
  function trans_obj_to_json (line 28) | def trans_obj_to_json(obj: BaseModel, llm_param: dict):

FILE: src/backend/bisheng/api/services/workflow.py
  class WorkFlowService (line 35) | class WorkFlowService(BaseService):
    method add_extra_field (line 38) | def add_extra_field(cls, user: UserPayload, data: list[dict], managed:...
    method get_all_flows (line 86) | def get_all_flows(cls, user: UserPayload, name: str, status: int, tag_...
    method run_once (line 115) | def run_once(cls, login_user: UserPayload, node_input: Dict[str, any],...
    method update_flow_status (line 181) | async def update_flow_status(cls, login_user: UserPayload, flow_id: st...
    method convert_chat_response_to_workflow_event (line 215) | def convert_chat_response_to_workflow_event(cls, chat_response: ChatRe...
    method handle_source (line 258) | def handle_source(cls, chat_response: ChatResponse, workflow_event: Wo...
    method convert_user_input_event (line 265) | def convert_user_input_event(cls, chat_response: ChatResponse, workflo...
    method convert_output_event (line 298) | def convert_output_event(cls, chat_response: ChatResponse, workflow_ev...
    method convert_output_input_event (line 308) | def convert_output_input_event(cls, chat_response: ChatResponse, workf...
    method convert_output_choose_event (line 322) | def convert_output_choose_event(cls, chat_response: ChatResponse, work...
    method get_frequently_used_flows (line 337) | def get_frequently_used_flows(cls, user: UserPayload, user_link_type: ...
    method delete_frequently_used_flows (line 379) | def delete_frequently_used_flows(cls, user: UserPayload, user_link_typ...
    method add_frequently_used_flows (line 384) | def add_frequently_used_flows(cls, user: UserPayload, user_link_type: ...
    method get_uncategorized_flows (line 389) | def get_uncategorized_flows(cls, user: UserPayload, page: int = 1, pag...
    method get_one_workflow_simple_info (line 427) | async def get_one_workflow_simple_info(cls, workflow_id: str) -> Flow ...
    method get_one_workflow_simple_info_sync (line 434) | def get_one_workflow_simple_info_sync(cls, workflow_id: str) -> Option...
    method get_all_apps_by_time_range_sync (line 441) | def get_all_apps_by_time_range_sync(cls, start_time: datetime, end_tim...
    method get_first_app (line 449) | def get_first_app(cls) -> Dict | None:

FILE: src/backend/bisheng/api/services/workstation/workstation.py
  class WorkStationService (line 31) | class WorkStationService(BaseService):
    method update_config (line 34) | def update_config(cls, request: Request, login_user: UserPayload, data...
    method sync_tool_info (line 47) | def sync_tool_info(cls, tools: list[dict]) -> list[dict]:
    method parse_config (line 76) | def parse_config(cls, config: Any) -> Optional[WorkstationConfig]:
    method get_config (line 96) | def get_config(cls) -> WorkstationConfig | None:
    method aget_config (line 102) | async def aget_config(cls) -> WorkstationConfig | None:
    method uploadPersonalKnowledge (line 108) | def uploadPersonalKnowledge(
    method queryKnowledgeList (line 140) | def queryKnowledgeList(
    method queryChunksFromDB (line 161) | async def queryChunksFromDB(cls, question: str, use_knowledge_param: U...
    method get_chat_history (line 247) | async def get_chat_history(cls, chat_id: str, size: int = 4):
  class WorkstationMessage (line 263) | class WorkstationMessage(BaseModel):
    method convert_message_id (line 282) | def convert_message_id(cls, value: Any) -> str:
    method convert_parent_message_id (line 289) | def convert_parent_message_id(cls, value: Any) -> str:
    method from_chat_message (line 295) | async def from_chat_message(cls, message: ChatMessage):
  class WorkstationConversation (line 318) | class WorkstationConversation(BaseModel):
    method from_chat_session (line 327) | def from_chat_session(cls, session: MessageSession):
    method convert_user (line 339) | def convert_user(cls, v: Any) -> str:
  class SSECallbackClient (line 345) | class SSECallbackClient:
    method __init__ (line 347) | def __init__(self):
    method send_json (line 350) | async def send_json(self, data):

FILE: src/backend/bisheng/api/utils.py
  function has_api_terms (line 18) | def has_api_terms(word: str):
  function remove_api_keys (line 22) | def remove_api_keys(flow: dict):
  function build_input_keys_response (line 36) | def build_input_keys_response(langchain_object, artifacts):
  function build_flow (line 71) | async def build_flow(graph_data: dict,
  function build_flow_no_yield (line 158) | async def build_flow_no_yield(graph_data: dict,
  function get_L2_param_from_flow (line 230) | def get_L2_param_from_flow(flow_data: dict, flow_id: str, version_id: in...
  function raw_frontend_data_is_valid (line 293) | def raw_frontend_data_is_valid(raw_frontend_data):
  function is_valid_data (line 298) | def is_valid_data(frontend_node, raw_frontend_data):
  function update_template_values (line 305) | def update_template_values(frontend_template, raw_template):
  function get_file_path_value (line 314) | def get_file_path_value(file_path):
  function update_template_field (line 330) | def update_template_field(frontend_template, key, value_dict):
  function update_frontend_node_with_template_values (line 347) | def update_frontend_node_with_template_values(frontend_node, raw_fronten...
  function get_url_content (line 368) | async def get_url_content(url: str) -> str:
  function md5_hash (line 378) | def md5_hash(original_string: str):

FILE: src/backend/bisheng/api/v1/assistant.py
  function get_assistant (line 28) | def get_assistant(*,
  function get_assistant_info (line 41) | async def get_assistant_info(*, assistant_id: str, login_user: UserPaylo...
  function delete_assistant (line 49) | def delete_assistant(*,
  function create_assistant (line 59) | async def create_assistant(*,
  function update_assistant (line 70) | async def update_assistant(*,
  function update_status (line 80) | async def update_status(*,
  function auto_update_assistant_task (line 90) | async def auto_update_assistant_task(*, request: Request, login_user: Us...
  function auto_update_assistant (line 107) | async def auto_update_assistant(*, task_id: str = Query(description='Opt...
  function update_prompt (line 130) | async def update_prompt(*,
  function update_flow_list (line 139) | async def update_flow_list(*,
  function update_tool_list (line 148) | async def update_tool_list(*,
  function chat (line 159) | async def chat(*,

FILE: src/backend/bisheng/api/v1/audit.py
  function get_audit_logs (line 14) | async def get_audit_logs(*,
  function get_all_operators (line 31) | def get_all_operators(*, login_user: UserPayload = Depends(UserPayload.g...
  function get_session_list (line 39) | async def get_session_list(login_user: UserPayload = Depends(UserPayload...
  function export_session_messages (line 62) | async def export_session_messages(login_user: UserPayload = Depends(User...
  function get_session_messages (line 83) | async def get_session_messages(login_user: UserPayload = Depends(UserPay...

FILE: src/backend/bisheng/api/v1/base.py
  class CacheResponse (line 7) | class CacheResponse(BaseModel):
  class Code (line 11) | class Code(BaseModel):
  class FrontendNodeRequest (line 15) | class FrontendNodeRequest(FrontendNode):
  class ValidatePromptRequest (line 19) | class ValidatePromptRequest(BaseModel):
  class CodeValidationResponse (line 26) | class CodeValidationResponse(BaseModel):
    method validate_imports (line 32) | def validate_imports(cls, v):
    method validate_function (line 37) | def validate_function(cls, v):
  class PromptValidationResponse (line 41) | class PromptValidationResponse(BaseModel):
  function validate_prompt (line 74) | def validate_prompt(template: str):
  function check_input_variables (line 92) | def check_input_variables(input_variables: list):
  function build_error_message (line 133) | def build_error_message(

FILE: src/backend/bisheng/api/v1/callback.py
  class AsyncStreamingLLMCallbackHandler (line 22) | class AsyncStreamingLLMCallbackHandler(AsyncCallbackHandler):
    method __init__ (line 25) | def __init__(self,
    method on_llm_new_token (line 48) | async def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
    method on_llm_start (line 72) | async def on_llm_start(self, serialized: Dict[str, Any], prompts: List...
    method on_llm_end (line 77) | async def on_llm_end(self, response: LLMResult, **kwargs: Any) -> Any:
    method on_llm_error (line 81) | async def on_llm_error(self, error: Union[Exception, KeyboardInterrupt...
    method on_chain_start (line 85) | async def on_chain_start(self, serialized: Dict[str, Any], inputs: Dic...
    method on_chain_end (line 91) | async def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -...
    method on_chain_error (line 99) | async def on_chain_error(self, error: Union[Exception, KeyboardInterru...
    method on_tool_start (line 104) | async def on_tool_start(self, serialized: Dict[str, Any], input_str: str,
    method on_tool_end (line 118) | async def on_tool_end(self, output: str, **kwargs: Any) -> Any:
    method on_tool_error (line 142) | async def on_tool_error(self, error: Union[Exception, KeyboardInterrupt],
    method on_text (line 147) | async def on_text(self, text: str, **kwargs: Any) -> Any:
    method on_agent_action (line 208) | async def on_agent_action(self, action: AgentAction, **kwargs: Any):
    method on_agent_finish (line 221) | async def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) ->...
    method on_retriever_start (line 231) | async def on_retriever_start(self, serialized: Dict[str, Any], query: ...
    method on_retriever_end (line 238) | async def on_retriever_end(self, result: List[Document], **kwargs: Any...
    method on_chat_model_start (line 248) | async def on_chat_model_start(self, serialized: Dict[str, Any],
  class StreamingLLMCallbackHandler (line 259) | class StreamingLLMCallbackHandler(BaseCallbackHandler):
    method __init__ (line 262) | def __init__(self,
    method on_llm_new_token (line 275) | def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
    method on_agent_action (line 291) | def on_agent_action(self, action: AgentAction, **kwargs: Any) -> Any:
    method on_agent_finish (line 306) | def on_agent_finish(self, finish: AgentFinish, **kwargs: Any) -> Any:
    method on_tool_start (line 318) | def on_tool_start(self, serialized: Dict[str, Any], input_str: str, **...
    method on_tool_end (line 331) | def on_tool_end(self, output: str, **kwargs: Any) -> Any:
    method on_retriever_start (line 357) | def on_retriever_start(self, serialized: Dict[str, Any], query: str, *...
    method on_retriever_end (line 362) | def on_retriever_end(self, result: List[Document], **kwargs: Any) -> Any:
    method on_chain_start (line 372) | def on_chain_start(self, serialized: Dict[str, Any], inputs: Dict[str,...
    method on_chain_end (line 378) | def on_chain_end(self, outputs: Dict[str, Any], **kwargs: Any) -> Any:
    method on_chat_model_start (line 386) | def on_chat_model_start(self, serialized: Dict[str, Any], messages: Li...
    method on_text (line 402) | def on_text(self, text: str, **kwargs) -> Any:
  class AsyncGptsLLMCallbackHandler (line 412) | class AsyncGptsLLMCallbackHandler(AsyncStreamingLLMCallbackHandler):
    method on_tool_start (line 414) | async def on_tool_start(self, serialized: Dict[str, Any], input_str: str,
    method on_tool_end (line 421) | async def on_tool_end(self, output: str, **kwargs: Any) -> Any:
  class AsyncGptsDebugCallbackHandler (line 427) | class AsyncGptsDebugCallbackHandler(AsyncGptsLLMCallbackHandler):
    method parse_tool_category (line 430) | def parse_tool_category(tool_name) -> (str, str):
    method on_chat_model_start (line 445) | async def on_chat_model_start(self, serialized: Dict[str, Any],
    method on_llm_end (line 459) | async def on_llm_end(self, response: LLMResult, **kwargs: Any) -> Any:
    method on_llm_error (line 468) | async def on_llm_error(self, error: Union[Exception, KeyboardInterrupt...
    method on_tool_start (line 477) | async def on_tool_start(self, serialized: Dict[str, Any], input_str: str,
    method on_tool_end (line 500) | async def on_tool_end(self, output: ToolMessage, **kwargs: Any) -> Any:
    method on_tool_error (line 542) | async def on_tool_error(self, error: Union[Exception, KeyboardInterrupt],

FILE: src/backend/bisheng/api/v1/chat.py
  function get_app_chat_list (line 55) | def get_app_chat_list(*,
  function get_chat_message (line 157) | async def get_chat_message(*,
  function get_chat_info (line 174) | async def get_chat_info(chat_id: str = Query(..., description='Session U...
  function rename (line 182) | def rename(conversationId: str = Body(..., description='Sessionsid', emb...
  function copy (line 192) | def copy(conversationId: str = Body(..., description='Sessionsid', embed...
  function del_chat_id (line 228) | async def del_chat_id(*,
  function add_chat_messages (line 271) | def add_chat_messages(*,
  function update_chat_message (line 373) | def update_chat_message(*,
  function del_message_id (line 402) | def del_message_id(*, message_id: str, login_user: UserPayload = Depends...
  function like_response (line 409) | def like_response(*, data: ChatInput):
  function copied_message (line 446) | def copied_message(message_id: int = Body(embed=True)):
  function comment_resp (line 458) | def comment_resp(*, data: ChatInput):
  function get_session_list (line 464) | def get_session_list(page: Optional[int] = Query(default=1, ge=1, le=1000),
  function get_online_chat (line 500) | def get_online_chat(*,
  function chat (line 511) | async def chat(
  function init_build (line 568) | async def init_build(*,
  function build_status (line 606) | async def build_status(flow_id: str,
  function stream_build (line 624) | async def stream_build(flow_id: str,

FILE: src/backend/bisheng/api/v1/component.py
  function get_all_components (line 16) | def get_all_components(*, login_user: UserPayload = Depends(UserPayload....
  function save_components (line 22) | def save_components(*, data: CreateComponentReq, login_user: UserPayload...
  function update_component (line 33) | def update_component(*, data: CreateComponentReq, login_user: UserPayloa...
  function delete_component (line 44) | def delete_component(*,
  function custom_component (line 51) | async def custom_component(
  function reload_custom_component (line 65) | async def reload_custom_component(path: str, login_user: UserPayload = D...
  function custom_component_update (line 79) | async def custom_component_update(

FILE: src/backend/bisheng/api/v1/dataset.py
  function list_dataset (line 16) | def list_dataset(*,
  function create_dataset (line 28) | def create_dataset(
  function delete_dataset (line 42) | def delete_dataset(

FILE: src/backend/bisheng/api/v1/endpoints.py
  function process_graph_cached_task (line 42) | def process_graph_cached_task(*args, **kwargs):
  function tracemalloc_point (line 55) | def tracemalloc_point():
  function get_all (line 65) | def get_all():
  function get_env (line 72) | def get_env():
  function get_config (line 102) | def get_config(admin_user: UserPayload = Depends(UserPayload.get_admin_u...
  function save_config (line 109) | def save_config(data: dict, admin_user: UserPayload = Depends(UserPayloa...
  function get_web_config (line 133) | async def get_web_config():
  function update_web_config (line 142) | async def update_web_config(request: Request,
  function process_flow_old (line 158) | async def process_flow_old(
  function process_flow (line 175) | async def process_flow(
  function _upload_file (line 352) | async def _upload_file(file: UploadFile, object_name_prefix: str, file_s...
  function upload_icon (line 372) | async def upload_icon(request: Request,
  function upload_icon_workflow (line 389) | async def upload_icon_workflow(request: Request,
  function create_upload_file (line 404) | async def create_upload_file(file: UploadFile, flow_id: str):
  function get_version (line 425) | def get_version():

FILE: src/backend/bisheng/api/v1/evaluation.py
  function get_evaluation (line 20) | def get_evaluation(*,
  function create_evaluation (line 29) | def create_evaluation(*,
  function delete_evaluation (line 81) | def delete_evaluation(*, evaluation_id: int, login_user: UserPayload = D...
  function get_download_url (line 87) | async def get_download_url(*,
  function process_evaluation (line 99) | def process_evaluation(*, evaluation_id: int, background_tasks: Backgrou...

FILE: src/backend/bisheng/api/v1/flows.py
  function create_flow (line 30) | def create_flow(*, request: Request, flow: FlowCreate, login_user: UserP...
  function get_versions (line 49) | def get_versions(*, flow_id: str, login_user: UserPayload = Depends(User...
  function create_versions (line 57) | async def create_versions(*,
  function update_versions (line 68) | async def update_versions(*,
  function delete_versions (line 80) | def delete_versions(*, version_id: int, login_user: UserPayload = Depend...
  function get_version_info (line 88) | def get_version_info(*, version_id: int, login_user: UserPayload = Depen...
  function change_version (line 96) | async def change_version(*,
  function read_flows (line 108) | def read_flows(*,
  function read_flow (line 120) | async def read_flow(*, flow_id: str, login_user: UserPayload = Depends(U...
  function update_flow (line 127) | async def update_flow(*,
  function delete_flow (line 174) | def delete_flow(*,
  function compare_flow_node (line 199) | async def compare_flow_node(*, item: FlowCompareReq, login_user: UserPay...
  function compare_flow_node_stream (line 205) | async def compare_flow_node_stream(*,

FILE: src/backend/bisheng/api/v1/invite_code.py
  function create_invite_code (line 13) | async def create_invite_code(request: Request, login_user: UserPayload =...
  function bind_invite_code (line 31) | async def bind_invite_code(request: Request, login_user: UserPayload = D...
  function get_bind_code_num (line 42) | async def get_bind_code_num(request: Request, login_user: UserPayload = ...

FILE: src/backend/bisheng/api/v1/mark_task.py
  function list (line 23) | def list(request: Request,
  function get_status (line 65) | async def get_status(task_id: int, chat_id: str,
  function create (line 80) | async def create(task_create: MarkTaskCreate, login_user: UserPayload = ...
  function get_user (line 100) | async def get_user(task_id: int):
  function mark (line 117) | async def mark(data: MarkData,
  function get_record (line 173) | async def get_record(chat_id: str, task_id: int):
  function pre_or_next (line 179) | async def pre_or_next(chat_id: str, action: str, task_id: int,
  function del_task (line 252) | def del_task(request: Request, task_id: int, login_user: UserPayload = D...

FILE: src/backend/bisheng/api/v1/report.py
  function callback (line 19) | async def callback(data: dict):
  function get_template (line 51) | async def get_template(*, flow_id: str):

FILE: src/backend/bisheng/api/v1/schema/base_schema.py
  class PageList (line 9) | class PageList(BaseModel, Generic[DataT]):

FILE: src/backend/bisheng/api/v1/schema/chat_schema.py
  class AppChatList (line 12) | class AppChatList(BaseModel):
    method convert_user_name (line 32) | def convert_user_name(cls, v: Any):
  class APIAddQAParam (line 38) | class APIAddQAParam(BaseModel):
  class UseKnowledgeBaseParam (line 44) | class UseKnowledgeBaseParam(BaseModel):
    method convert_organization_knowledge_ids (line 50) | def convert_organization_knowledge_ids(cls, v: Any):
  class APIChatCompletion (line 57) | class APIChatCompletion(BaseModel):
  class delta (line 74) | class delta(BaseModel):
  class SSEResponse (line 79) | class SSEResponse(BaseModel):
    method toString (line 83) | def toString(self) -> str:
  class ChatMessageHistoryResponse (line 87) | class ChatMessageHistoryResponse(ChatMessageQuery):
    method from_chat_message_objs (line 92) | def from_chat_message_objs(cls, chat_messages: List[ChatMessage], user...

FILE: src/backend/bisheng/api/v1/schema/dataset_param.py
  class CreateDatasetParam (line 7) | class CreateDatasetParam(BaseModel):

FILE: src/backend/bisheng/api/v1/schema/knowledge.py
  class KnowledgeFileResp (line 7) | class KnowledgeFileResp(KnowledgeFileBase):

FILE: src/backend/bisheng/api/v1/schema/mark_schema.py
  class MarkTaskCreate (line 6) | class MarkTaskCreate(BaseModel):
    method convert_user_list (line 12) | def convert_user_list(cls, v: Any):
  class MarkData (line 22) | class MarkData(BaseModel):

FILE: src/backend/bisheng/api/v1/schema/workflow.py
  class WorkflowEventType (line 7) | class WorkflowEventType(Enum):
  class WorkflowOutputSchema (line 27) | class WorkflowOutputSchema(BaseModel):
  class WorkflowInputItem (line 36) | class WorkflowInputItem(BaseModel):
  class WorkflowInputSchema (line 47) | class WorkflowInputSchema(BaseModel):
  class WorkflowEvent (line 52) | class WorkflowEvent(BaseModel):
    method validate_message_id (line 64) | def validate_message_id(cls, v: Any) -> Optional[str]:
  class WorkflowStream (line 70) | class WorkflowStream(BaseModel):

FILE: src/backend/bisheng/api/v1/schemas.py
  class CaptchaInput (line 18) | class CaptchaInput(BaseModel):
  class ChunkInput (line 23) | class ChunkInput(BaseModel):
  class BuildStatus (line 28) | class BuildStatus(Enum):
  class GraphData (line 37) | class GraphData(BaseModel):
  class ExportedFlow (line 44) | class ExportedFlow(BaseModel):
  class InputRequest (line 53) | class InputRequest(BaseModel):
  class TweaksRequest (line 57) | class TweaksRequest(BaseModel):
  class UpdateTemplateRequest (line 61) | class UpdateTemplateRequest(BaseModel):
  class UnifiedResponseModel (line 69) | class UnifiedResponseModel(BaseModel, Generic[DataT]):
  function resp_200 (line 76) | def resp_200(data: Union[list, dict, str, Any] = None,
  function resp_500 (line 83) | def resp_500(code: int = 500,
  class ProcessResponse (line 90) | class ProcessResponse(BaseModel):
  class ChatInput (line 99) | class ChatInput(BaseModel):
  class AddChatMessages (line 105) | class AddChatMessages(BaseModel):
  class ChatList (line 114) | class ChatList(BaseModel):
  class FlowGptsOnlineList (line 128) | class FlowGptsOnlineList(BaseModel):
  class ChatMessage (line 139) | class ChatMessage(BaseModel):
  class ChatResponse (line 159) | class ChatResponse(ChatMessage):
    method validate_message_type (line 168) | def validate_message_type(cls, v):
  class FileResponse (line 180) | class FileResponse(ChatMessage):
    method validate_data_type (line 190) | def validate_data_type(cls, v):
  class FlowListCreate (line 196) | class FlowListCreate(BaseModel):
  class FlowListRead (line 200) | class FlowListRead(BaseModel):
  class InitResponse (line 204) | class InitResponse(BaseModel):
  class BuiltResponse (line 208) | class BuiltResponse(BaseModel):
  class UploadFileResponse (line 212) | class UploadFileResponse(BaseModel):
  class StreamData (line 224) | class StreamData(BaseModel):
    method __str__ (line 228) | def __str__(self) -> str:
  class CreateComponentReq (line 234) | class CreateComponentReq(BaseModel):
  class CustomComponentCode (line 240) | class CustomComponentCode(BaseModel):
  class AssistantCreateReq (line 246) | class AssistantCreateReq(BaseModel):
  class AssistantUpdateReq (line 252) | class AssistantUpdateReq(BaseModel):
    method convert_model_name (line 273) | def convert_model_name(cls, v):
  class AssistantSimpleInfo (line 277) | class AssistantSimpleInfo(BaseModel):
  class AssistantInfo (line 293) | class AssistantInfo(AssistantBase):
  class FlowVersionCreate (line 299) | class FlowVersionCreate(BaseModel):
  class FlowCompareReq (line 307) | class FlowCompareReq(BaseModel):
  class DeleteToolTypeReq (line 315) | class DeleteToolTypeReq(BaseModel):
  class GroupAndRoles (line 319) | class GroupAndRoles(BaseModel):
  class CreateUserReq (line 324) | class CreateUserReq(BaseModel):
  class OpenAIChatCompletionReq (line 330) | class OpenAIChatCompletionReq(BaseModel):
  class OpenAIChoice (line 343) | class OpenAIChoice(BaseModel):
  class OpenAIChatCompletionResp (line 350) | class OpenAIChatCompletionResp(BaseModel):
  class Icon (line 360) | class Icon(BaseModel):
  class WSModel (line 366) | class WSModel(BaseModel):
  class WSPrompt (line 374) | class WSPrompt(BaseModel):
  class LinsightConfig (line 384) | class LinsightConfig(BaseModel):
  class WorkstationConfig (line 393) | class WorkstationConfig(BaseModel):
  class ExcelRule (line 416) | class ExcelRule(BaseModel):
  class FileProcessBase (line 424) | class FileProcessBase(BaseModel):
    method check_separator_rule (line 442) | def check_separator_rule(cls, values: Any):
  class FileChunk (line 468) | class FileChunk(BaseModel):
  class PreviewFileChunk (line 475) | class PreviewFileChunk(FileProcessBase):
  class UpdatePreviewFileChunk (line 481) | class UpdatePreviewFileChunk(BaseModel):
  class KnowledgeFileOne (line 489) | class KnowledgeFileOne(BaseModel):
  class KnowledgeFileProcess (line 495) | class KnowledgeFileProcess(FileProcessBase):
  class KnowledgeFileReProcess (line 502) | class KnowledgeFileReProcess(FileProcessBase):
  class FrequentlyUsedChat (line 510) | class FrequentlyUsedChat(BaseModel):
  class UpdateKnowledgeReq (line 515) | class UpdateKnowledgeReq(BaseModel):

FILE: src/backend/bisheng/api/v1/skillcenter.py
  function create_template (line 21) | def create_template(*, template: TemplateCreate):
  function read_template (line 48) | def read_template(page_size: Optional[int] = None,
  function update_template (line 81) | def update_template(*, id: int, template: TemplateUpdate):
  function delete_template (line 100) | def delete_template(*, id: int):

FILE: src/backend/bisheng/api/v1/tag.py
  function get_all_tag (line 14) | def get_all_tag(request: Request,
  function create_tag (line 27) | def create_tag(request: Request,
  function update_tag (line 35) | def update_tag(request: Request,
  function delete_tag (line 44) | def delete_tag(request: Request,
  function create_tag_link (line 52) | def create_tag_link(request: Request,
  function delete_tag_link (line 62) | def delete_tag_link(
  function get_home_tag (line 73) | def get_home_tag(request: Request,
  function update_home_tag (line 84) | def update_home_tag(request: Request,

FILE: src/backend/bisheng/api/v1/usergroup.py
  function get_all_group (line 20) | async def get_all_group(login_user: UserPayload = Depends(UserPayload.ge...
  function create_group (line 42) | async def create_group(request: Request, group: GroupCreate,
  function update_group (line 51) | async def update_group(request: Request,
  function delete_group (line 61) | async def delete_group(request: Request,
  function set_user_group (line 72) | async def set_user_group(request: Request,
  function get_user_group (line 86) | async def get_user_group(user_id: int, login_user: UserPayload = Depends...
  function get_group_user (line 94) | async def get_group_user(group_id: int,
  function set_group_admin (line 105) | async def set_group_admin(
  function set_update_user (line 118) | async def set_update_user(group_id: Annotated[int, Body(embed=True)],
  function get_group_resources (line 127) | async def get_group_resources(*,
  function get_group_roles (line 153) | async def get_group_roles(*,
  function get_manage_resources (line 176) | async def get_manage_resources(login_user: UserPayload = Depends(UserPay...

FILE: src/backend/bisheng/api/v1/validate.py
  function post_validate_code (line 14) | def post_validate_code(code: Code):
  function post_validate_prompt (line 27) | def post_validate_prompt(prompt_request: ValidatePromptRequest):
  function get_old_custom_fields (line 49) | def get_old_custom_fields(prompt_request):
  function add_new_variables_to_template (line 58) | def add_new_variables_to_template(input_variables, prompt_request):
  function remove_old_variables_from_template (line 86) | def remove_old_variables_from_template(old_custom_fields, input_variable...
  function update_input_variables_field (line 103) | def update_input_variables_field(input_variables, prompt_request):

FILE: src/backend/bisheng/api/v1/variable.py
  function post_variable (line 17) | def post_variable(variable: Variable):
  function get_variables (line 51) | def get_variables(*,
  function del_variables (line 68) | def del_variables(*, id: int):
  function save_all_variables (line 81) | def save_all_variables(*, data: List[VariableCreate]):

FILE: src/backend/bisheng/api/v1/workflow.py
  function check_app_write_auth (line 36) | async def check_app_write_auth(
  function get_report_file (line 60) | async def get_report_file(
  function copy_report_file (line 93) | async def copy_report_file(
  function upload_report_file (line 112) | async def upload_report_file(
  function run_once (line 136) | def run_once(request: Request, login_user: UserPayload = Depends(UserPay...
  function workflow_ws (line 147) | async def workflow_ws(*,
  function create_flow (line 160) | def create_flow(*, request: Request, flow: FlowCreate, login_user: UserP...
  function get_versions (line 184) | def get_versions(*, flow_id: str, login_user: UserPayload = Depends(User...
  function create_versions (line 192) | async def create_versions(*,
  function update_versions (line 204) | async def update_versions(*,
  function delete_versions (line 216) | def delete_versions(*, version_id: int, login_user: UserPayload = Depend...
  function get_version_info (line 224) | def get_version_info(*, version_id: int, login_user: UserPayload = Depen...
  function change_version (line 232) | def change_version(*,
  function read_flow (line 244) | async def read_flow(*, flow_id: str, login_user: UserPayload = Depends(U...
  function update_flow (line 251) | async def update_flow(*,
  function update_flow_status (line 287) | async def update_flow_status(request: Request, login_user: UserPayload =...
  function read_flows (line 296) | def read_flows(*,

FILE: src/backend/bisheng/api/v1/workstation.py
  function custom_json_serializer (line 65) | def custom_json_serializer(obj):
  function user_message (line 71) | def user_message(msgId, conversationId, sender, text):
  function step_message (line 84) | def step_message(stepId, runId, index, msgId):
  function final_message (line 103) | async def final_message(conversation: MessageSession, title: str, reques...
  function get_config (line 142) | def get_config(
  function update_config (line 161) | def update_config(
  function knowledgeUpload (line 172) | def knowledgeUpload(request: Request,
  function queryKnoledgeList (line 190) | def queryKnoledgeList(request: Request,
  function deleteKnowledge (line 200) | def deleteKnowledge(request: Request,
  function upload_file (line 208) | async def upload_file(
  function gen_title (line 245) | async def gen_title(conversationId: str = Body(..., description='', embe...
  function get_chat_history (line 268) | async def get_chat_history(conversationId: str,
  function genTitle (line 285) | async def genTitle(human: str, assistant: str, llm: BishengLLM, conversa...
  function webSearch (line 305) | async def webSearch(query: str, user_id: int):
  function getFileContent (line 327) | async def getFileContent(filepath_local: str, file_name, invoke_user_id:...
  function _initialize_chat (line 345) | async def _initialize_chat(data: APIChatCompletion, login_user: UserPayl...
  function _log_telemetry_events (line 412) | async def _log_telemetry_events(user_id: str, conversation_id: str, star...
  function chat_completions (line 442) | async def chat_completions(
  function frequently_used_chat (line 645) | def frequently_used_chat(login_user: UserPayload = Depends(UserPayload.g...
  function frequently_used_chat (line 656) | def frequently_used_chat(login_user: UserPayload = Depends(UserPayload.g...
  function frequently_used_chat (line 667) | def frequently_used_chat(login_user: UserPayload = Depends(UserPayload.g...
  function get_uncategorized_chat (line 676) | def get_uncategorized_chat(login_user: UserPayload = Depends(UserPayload...

FILE: src/backend/bisheng/chat/client.py
  class ChatClient (line 33) | class ChatClient:
    method __init__ (line 34) | def __init__(self, request: Request, client_key: str, client_id: str, ...
    method close (line 59) | async def close(self):
    method send_message (line 62) | async def send_message(self, message: str):
    method send_json (line 65) | async def send_json(self, message: ChatMessage):
    method handle_message (line 68) | async def handle_message(self, message: Dict[any, any]):
    method wrapper_task (line 81) | async def wrapper_task(self, task_id: str, fn: Callable, *args, **kwar...
    method add_message (line 108) | async def add_message(self, msg_type: str, message: str, category: str...
    method send_response (line 155) | async def send_response(self, category: str, msg_type: str, message: s...
    method init_gpts_agent (line 171) | async def init_gpts_agent(self):
    method init_chat_history (line 211) | async def init_chat_history(self):
    method get_latest_history (line 227) | async def get_latest_history(self) -> List[BaseMessage]:
    method init_gpts_callback (line 252) | async def init_gpts_callback(self):
    method stop_handle_message (line 264) | async def stop_handle_message(self, message: Dict[any, any]):
    method clear_stream_queue (line 290) | async def clear_stream_queue(self):
    method handle_gpts_message (line 294) | async def handle_gpts_message(self, message: Dict[any, any]):

FILE: src/backend/bisheng/chat/clients/base.py
  class BaseClient (line 18) | class BaseClient(ABC):
    method __init__ (line 19) | def __init__(self, request: Request, client_key: str, client_id: str, ...
    method close (line 35) | async def close(self):
    method send_message (line 38) | async def send_message(self, message: str):
    method send_json (line 41) | async def send_json(self, message: ChatMessage | dict):
    method handle_message (line 47) | async def handle_message(self, message: Dict[any, any]):
    method _handle_message (line 63) | async def _handle_message(self, message: Dict[any, any]):
    method wrapper_task (line 66) | async def wrapper_task(self, task_id: str, fn: Callable, *args, **kwar...
    method add_message (line 79) | async def add_message(self, msg_type: str, message: str, category: str...
    method send_response (line 99) | async def send_response(self, category: str, msg_type: str, message: s...
    method stop_handle_message (line 116) | async def stop_handle_message(self, message: Dict[any, any]):

FILE: src/backend/bisheng/chat/clients/workflow_client.py
  class WorkflowClient (line 23) | class WorkflowClient(BaseClient):
    method __init__ (line 25) | def __init__(self, request: Request, client_key: str, client_id: str, ...
    method close (line 37) | async def close(self, force_stop=False):
    method _handle_message (line 55) | async def _handle_message(self, message: Dict[any, any]):
    method init_history (line 70) | async def init_history(self):
    method check_status (line 78) | async def check_status(self, message: dict, is_init: bool = False) -> ...
    method get_execute_worker (line 130) | async def get_execute_worker(self) -> Optional[str]:
    method init_workflow (line 135) | async def init_workflow(self, message: dict):
    method workflow_run (line 161) | async def workflow_run(self):
    method _workflow_run (line 165) | async def _workflow_run(self):
    method handle_user_input (line 188) | async def handle_user_input(self, data: dict):

FILE: src/backend/bisheng/chat/config.py
  class ChatConfig (line 1) | class ChatConfig:

FILE: src/backend/bisheng/chat/handlers.py
  class Handler (line 33) | class Handler:
    method __init__ (line 35) | def __init__(self, stream_queue: Queue) -> None:
    method dispatch_task (line 46) | async def dispatch_task(self, session: ChatManager, client_id: str, ch...
    method process_stop (line 79) | async def process_stop(self, session: ChatManager, client_id: str, cha...
    method process_report (line 136) | async def process_report(self,
    method recommend_question (line 197) | def recommend_question(self, langchain_obj, chat_history: list):
    method process_message (line 221) | async def process_message(self,
    method process_file (line 333) | async def process_file(self, session: ChatManager, client_id: str, cha...
    method process_autogen (line 393) | async def process_autogen(self, session: ChatManager, client_id: str, ...
    method intermediate_logs (line 409) | async def intermediate_logs(self, session: ChatManager, client_id, cha...

FILE: src/backend/bisheng/chat/manager.py
  class ChatHistory (line 45) | class ChatHistory(Subject):
    method __init__ (line 47) | def __init__(self):
    method add_message (line 51) | def add_message(
    method empty_history (line 81) | def empty_history(self, client_id: str, chat_id: str):
  class ChatManager (line 86) | class ChatManager:
    method __init__ (line 88) | def __init__(self):
    method update (line 101) | def update(self):
    method connect (line 115) | async def connect(self, client_id: str, chat_id: str, websocket: WebSo...
    method reuse_connect (line 120) | def reuse_connect(self, client_id: str, chat_id: str, websocket: WebSo...
    method disconnect (line 124) | def disconnect(self, client_id: str, chat_id: str, key: str = None):
    method send_message (line 132) | async def send_message(self, client_id: str, chat_id: str, message: str):
    method send_json (line 136) | async def send_json(self, client_id: str, chat_id: str, message: ChatM...
    method close_connection (line 145) | async def close_connection(self,
    method ping (line 165) | async def ping(self, client_id: str, chat_id: str):
    method set_cache (line 173) | def set_cache(self, client_id: str, langchain_object: Any) -> bool:
    method accept_client (line 181) | async def accept_client(self, client_key: str, chat_client: ChatClient...
    method clear_client (line 185) | def clear_client(self, client_key: str):
    method close_client (line 192) | async def close_client(self, client_key: str, code: int, reason: str):
    method dispatch_client (line 204) | async def dispatch_client(
    method handle_websocket (line 289) | async def handle_websocket(
    method _process_when_payload (line 448) | async def _process_when_payload(self, flow_id: str, chat_id: str,
    method preper_reuse_connection (line 567) | def preper_reuse_connection(self, flow_id: str, chat_id: str, websocke...
    method preper_payload (line 580) | async def preper_payload(self, payload, graph_data, langchain_obj_key,...
    method preper_action (line 612) | async def preper_action(self, client_id, chat_id, langchain_obj_key, p...
    method init_langchain_object_task (line 680) | async def init_langchain_object_task(self, flow_id, chat_id, user_id, ...
    method refresh_graph_data (line 714) | def refresh_graph_data(self, graph_data: dict, node_data: List[dict]):

FILE: src/backend/bisheng/chat/types.py
  class WorkType (line 5) | class WorkType(Enum):
  class IgnoreException (line 14) | class IgnoreException(Exception):
    method __init__ (line 17) | def __init__(self, message):
    method __str__ (line 21) | def __str__(self):

FILE: src/backend/bisheng/chat/utils.py
  class SourceType (line 23) | class SourceType(Enum):
  function process_graph (line 34) | async def process_graph(langchain_object,
  function extract_answer_keys (line 81) | def extract_answer_keys(answer, llm):
  function extract_answer_keys_async (line 100) | async def extract_answer_keys_async(answer, llm):
  function sync_judge_source (line 119) | def sync_judge_source(result, source_document, chat_id, extra: Dict):
  function judge_source (line 174) | async def judge_source(result, source_document, chat_id, extra: Dict):
  function sync_process_source_document (line 178) | def sync_process_source_document(source_document: List[Document], chat_i...
  function process_source_document (line 208) | async def process_source_document(source_document: List[Document], chat_...
  function process_node_data (line 239) | def process_node_data(node_data: List[Dict]) -> Dict:

FILE: src/backend/bisheng/chat_session/api/router.py
  function get_chat_message_public (line 21) | async def get_chat_message_public(*,
  function get_chat_messages_by_conversation_id (line 33) | async def get_chat_messages_by_conversation_id(*, conversationId: str,
  function post_chat_message_telemetry (line 44) | async def post_chat_message_telemetry(*,

FILE: src/backend/bisheng/chat_session/domain/chat.py
  class ChatSessionService (line 10) | class ChatSessionService:
    method get_chat_history (line 14) | async def get_chat_history(chat_id: str, flow_id: str, message_id: Opt...

FILE: src/backend/bisheng/common/constants/enums/telemetry.py
  class StatusEnum (line 4) | class StatusEnum(str, Enum):
  class ApplicationTypeEnum (line 10) | class ApplicationTypeEnum(str, Enum):
  class BaseTelemetryTypeEnum (line 39) | class BaseTelemetryTypeEnum(str, Enum):

FILE: src/backend/bisheng/common/dependencies/core_deps.py
  function get_db_session (line 7) | async def get_db_session() -> AsyncGenerator[AsyncSession, None]:
  function get_sync_db_session (line 16) | def get_sync_db_session() -> Generator[Session, None, None]:

FILE: src/backend/bisheng/common/dependencies/user_deps.py
  class UserPayload (line 4) | class UserPayload(LoginUser):

FILE: src/backend/bisheng/common/errcode/assistant.py
  class AssistantNotExistsError (line 5) | class AssistantNotExistsError(BaseErrorCode):
  class AssistantInitError (line 10) | class AssistantInitError(BaseErrorCode):
  class AssistantNameRepeatError (line 15) | class AssistantNameRepeatError(BaseErrorCode):
  class AssistantNotEditError (line 20) | class AssistantNotEditError(BaseErrorCode):
  class AssistantDeletedError (line 26) | class AssistantDeletedError(BaseErrorCode):
  class AssistantNotOnlineError (line 32) | class AssistantNotOnlineError(BaseErrorCode):
  class AssistantModelEmptyError (line 38) | class AssistantModelEmptyError(BaseErrorCode):
  class AssistantModelNotConfigError (line 44) | class AssistantModelNotConfigError(BaseErrorCode):
  class AssistantAutoLLMError (line 49) | class AssistantAutoLLMError(BaseErrorCode):
  class AssistantOtherError (line 55) | class AssistantOtherError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/base.py
  class BaseErrorCode (line 9) | class BaseErrorCode(Exception):
    method __init__ (line 14) | def __init__(self, exception: Exception = None, msg: str = None, code:...
    method __str__ (line 21) | def __str__(self):
    method return_resp (line 25) | def return_resp(cls, msg: str = None, data: any = None) -> UnifiedResp...
    method return_resp_instance (line 29) | def return_resp_instance(self, data: any = None) -> UnifiedResponseModel:
    method http_exception (line 36) | def http_exception(cls, msg: str = None) -> HTTPException:
    method to_sse_event (line 40) | def to_sse_event(cls, msg: str = None, data: any = None, event: str = ...
    method to_sse_event_instance (line 51) | def to_sse_event_instance(self, event: str = "error", data: any = None...
    method to_sse_event_instance_str (line 62) | def to_sse_event_instance_str(self, event: str = "error", data: any = ...
    method to_dict (line 71) | def to_dict(self, data: any = None) -> dict:
    method to_json_str (line 79) | def to_json_str(self, data: any = None) -> str:
    method websocket_close_message (line 88) | async def websocket_close_message(self, websocket: WebSocket, close_ws...

FILE: src/backend/bisheng/common/errcode/chat.py
  class SkillDeletedError (line 6) | class SkillDeletedError(BaseErrorCode):
  class SkillNotOnlineError (line 12) | class SkillNotOnlineError(BaseErrorCode):
  class SkillNotBuildError (line 18) | class SkillNotBuildError(BaseErrorCode):
  class ChatServiceError (line 24) | class ChatServiceError(BaseErrorCode):
  class LLMExecutionError (line 30) | class LLMExecutionError(BaseErrorCode):
  class DocumentParseError (line 36) | class DocumentParseError(BaseErrorCode):
  class InputDataParseError (line 42) | class InputDataParseError(BaseErrorCode):
  class WorkflowOfflineError (line 47) | class WorkflowOfflineError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/component.py
  class ComponentExistError (line 5) | class ComponentExistError(BaseErrorCode):
  class ComponentNotExistError (line 10) | class ComponentNotExistError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/dataset.py
  class DatasetNameExistsError (line 4) | class DatasetNameExistsError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/finetune.py
  class CreateFinetuneError (line 5) | class CreateFinetuneError(BaseErrorCode):
  class TrainDataNoneError (line 10) | class TrainDataNoneError(BaseErrorCode):
  class NotFoundJobError (line 15) | class NotFoundJobError(BaseErrorCode):
  class JobStatusError (line 20) | class JobStatusError(BaseErrorCode):
  class CancelJobError (line 25) | class CancelJobError(BaseErrorCode):
  class DeleteJobError (line 30) | class DeleteJobError(BaseErrorCode):
  class ExportJobError (line 35) | class ExportJobError(BaseErrorCode):
  class ChangeModelNameError (line 40) | class ChangeModelNameError(BaseErrorCode):
  class UnExportJobError (line 45) | class UnExportJobError(BaseErrorCode):
  class InvalidExtraParamsError (line 50) | class InvalidExtraParamsError(BaseErrorCode):
  class ModelNameExistsError (line 55) | class ModelNameExistsError(BaseErrorCode):
  class TrainFileNotExistError (line 60) | class TrainFileNotExistError(BaseErrorCode):
  class GetGPUInfoError (line 65) | class GetGPUInfoError(BaseErrorCode):
  class GetModelError (line 70) | class GetModelError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/flow.py
  class NotFoundVersionError (line 5) | class NotFoundVersionError(BaseErrorCode):
  class CurVersionDelError (line 10) | class CurVersionDelError(BaseErrorCode):
  class VersionNameExistsError (line 15) | class VersionNameExistsError(BaseErrorCode):
  class FlowNameExistsError (line 20) | class FlowNameExistsError(BaseErrorCode):
  class NotFoundFlowError (line 25) | class NotFoundFlowError(BaseErrorCode):
  class FlowOnlineEditError (line 30) | class FlowOnlineEditError(BaseErrorCode):
  class WorkFlowOnlineEditError (line 35) | class WorkFlowOnlineEditError(BaseErrorCode):
  class WorkFlowInitError (line 40) | class WorkFlowInitError(BaseErrorCode):
  class WorkFlowWaitUserTimeoutError (line 45) | class WorkFlowWaitUserTimeoutError(BaseErrorCode):
  class WorkFlowNodeRunMaxTimesError (line 50) | class WorkFlowNodeRunMaxTimesError(BaseErrorCode):
  class WorkflowNameExistsError (line 55) | class WorkflowNameExistsError(BaseErrorCode):
  class FlowTemplateNameError (line 60) | class FlowTemplateNameError(BaseErrorCode):
  class WorkFlowNodeUpdateError (line 65) | class WorkFlowNodeUpdateError(BaseErrorCode):
  class WorkFlowVersionUpdateError (line 70) | class WorkFlowVersionUpdateError(BaseErrorCode):
  class WorkFlowTaskBusyError (line 75) | class WorkFlowTaskBusyError(BaseErrorCode):
  class WorkFlowTaskOtherError (line 81) | class WorkFlowTaskOtherError(BaseErrorCode):
  class AppWriteAuthError (line 86) | class AppWriteAuthError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/http_error.py
  class UnAuthorizedError (line 4) | class UnAuthorizedError(BaseErrorCode):
  class NotFoundError (line 9) | class NotFoundError(BaseErrorCode):
  class ServerError (line 14) | class ServerError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/knowledge.py
  class KnowledgeExistError (line 5) | class KnowledgeExistError(BaseErrorCode):
  class KnowledgeNoEmbeddingError (line 10) | class KnowledgeNoEmbeddingError(BaseErrorCode):
  class KnowledgeLLMError (line 15) | class KnowledgeLLMError(BaseErrorCode):
  class KnowledgeChunkError (line 20) | class KnowledgeChunkError(BaseErrorCode):
  class KnowledgeFileEmptyError (line 25) | class KnowledgeFileEmptyError(BaseErrorCode):
  class KnowledgeFileChunkMaxError (line 30) | class KnowledgeFileChunkMaxError(BaseErrorCode):
  class KnowledgeFileDamagedError (line 35) | class KnowledgeFileDamagedError(BaseErrorCode):
  class KnowledgeFileNotSupportedError (line 40) | class KnowledgeFileNotSupportedError(BaseErrorCode):
  class KnowledgeEtl4lmTimeoutError (line 45) | class KnowledgeEtl4lmTimeoutError(BaseErrorCode):
  class KnowledgeExcelChunkMaxError (line 50) | class KnowledgeExcelChunkMaxError(BaseErrorCode):
  class KnowledgeSimilarError (line 55) | class KnowledgeSimilarError(BaseErrorCode):
  class KnowledgeQAError (line 60) | class KnowledgeQAError(BaseErrorCode):
  class KnowledgeCPError (line 65) | class KnowledgeCPError(BaseErrorCode):
  class KnowledgeCPEmptyError (line 70) | class KnowledgeCPEmptyError(BaseErrorCode):
  class KnowledgeFileDeleteError (line 76) | class KnowledgeFileDeleteError(BaseErrorCode):
  class KnowledgeRebuildingError (line 81) | class KnowledgeRebuildingError(BaseErrorCode):
  class KnowledgePreviewError (line 86) | class KnowledgePreviewError(BaseErrorCode):
  class KnowledgeFileFailedError (line 91) | class KnowledgeFileFailedError(BaseErrorCode):
  class KnowledgeNotQAError (line 97) | class KnowledgeNotQAError(BaseErrorCode):
  class KnowledgeRecommendQuestionError (line 102) | class KnowledgeRecommendQuestionError(BaseErrorCode):
  class KnowledgeNotExistError (line 108) | class KnowledgeNotExistError(BaseErrorCode):
  class KnowledgeFileNotExistError (line 114) | class KnowledgeFileNotExistError(BaseErrorCode):
  class KnowledgeMetadataFieldConflictError (line 120) | class KnowledgeMetadataFieldConflictError(BaseErrorCode):
  class KnowledgeMetadataFieldExistError (line 126) | class KnowledgeMetadataFieldExistError(BaseErrorCode):
  class KnowledgeMetadataFieldNotExistError (line 132) | class KnowledgeMetadataFieldNotExistError(BaseErrorCode):
  class KnowledgeMetadataFieldImmutableError (line 138) | class KnowledgeMetadataFieldImmutableError(BaseErrorCode):
  class KnowledgeMetadataValueTypeConvertError (line 144) | class KnowledgeMetadataValueTypeConvertError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/linsight.py
  class SopFileError (line 4) | class SopFileError(BaseErrorCode):
  class SopShowcaseError (line 9) | class SopShowcaseError(BaseErrorCode):
  class FileUploadError (line 14) | class FileUploadError(BaseErrorCode):
  class LinsightUseUpError (line 21) | class LinsightUseUpError(BaseErrorCode):
  class LinsightQuestionError (line 27) | class LinsightQuestionError(BaseErrorCode):
  class LinsightVectorModelError (line 33) | class LinsightVectorModelError(BaseErrorCode):
  class LinsightDocSearchError (line 39) | class LinsightDocSearchError(BaseErrorCode):
  class LinsightDocNotFoundError (line 45) | class LinsightDocNotFoundError(BaseErrorCode):
  class LinsightToolInitError (line 51) | class LinsightToolInitError(BaseErrorCode):
  class LinsightBishengLLMError (line 57) | class LinsightBishengLLMError(BaseErrorCode):
  class LinsightGenerateSopError (line 63) | class LinsightGenerateSopError(BaseErrorCode):
  class LinsightModifySopError (line 69) | class LinsightModifySopError(BaseErrorCode):
  class LinsightSessionVersionRunningError (line 75) | class LinsightSessionVersionRunningError(BaseErrorCode):
  class LinsightStartTaskError (line 81) | class LinsightStartTaskError(BaseErrorCode):
  class LinsightQueueStatusError (line 87) | class LinsightQueueStatusError(BaseErrorCode):
  class LinsightAddSopError (line 93) | class LinsightAddSopError(BaseErrorCode):
  class LinsightUpdateSopError (line 99) | class LinsightUpdateSopError(BaseErrorCode):
  class LinsightDeleteSopError (line 105) | class LinsightDeleteSopError(BaseErrorCode):
  class SopContentOverLimitError (line 110) | class SopContentOverLimitError(BaseErrorCode):
  class InviteCodeInvalidError (line 115) | class InviteCodeInvalidError(BaseErrorCode):
  class InviteCodeBindError (line 120) | class InviteCodeBindError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/llm.py
  class ServerExistError (line 5) | class ServerExistError(BaseErrorCode):
  class ModelNameRepeatError (line 10) | class ModelNameRepeatError(BaseErrorCode):
  class ServerAddAllError (line 15) | class ServerAddAllError(BaseErrorCode):
  class ServerAddError (line 20) | class ServerAddError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/model_deploy.py
  class NotFoundModelError (line 5) | class NotFoundModelError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/qa.py
  class BackendProcessingError (line 6) | class BackendProcessingError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/server.py
  class NoSftServerError (line 5) | class NoSftServerError(BaseErrorCode):
  class InvalidOperationError (line 11) | class InvalidOperationError(BaseErrorCode):
  class ResourceDownloadError (line 17) | class ResourceDownloadError(BaseErrorCode):
  class NoEmbeddingModelError (line 23) | class NoEmbeddingModelError(BaseErrorCode):
  class EmbeddingModelNotExistError (line 29) | class EmbeddingModelNotExistError(BaseErrorCode):
  class EmbeddingModelTypeError (line 35) | class EmbeddingModelTypeError(BaseErrorCode):
  class EmbeddingModelStatusError (line 41) | class EmbeddingModelStatusError(BaseErrorCode):
  class NoLlmModelConfigError (line 47) | class NoLlmModelConfigError(BaseErrorCode):
  class LlmModelConfigDeletedError (line 53) | class LlmModelConfigDeletedError(BaseErrorCode):
  class LlmProviderDeletedError (line 59) | class LlmProviderDeletedError(BaseErrorCode):
  class LlmModelTypeError (line 65) | class LlmModelTypeError(BaseErrorCode):
  class LlmModelOfflineError (line 71) | class LlmModelOfflineError(BaseErrorCode):
  class InitLlmError (line 77) | class InitLlmError(BaseErrorCode):
  class NoAsrModelConfigError (line 82) | class NoAsrModelConfigError(BaseErrorCode):
  class AsrModelConfigDeletedError (line 87) | class AsrModelConfigDeletedError(BaseErrorCode):
  class AsrProviderDeletedError (line 92) | class AsrProviderDeletedError(BaseErrorCode):
  class AsrModelTypeError (line 97) | class AsrModelTypeError(BaseErrorCode):
  class AsrModelOfflineError (line 102) | class AsrModelOfflineError(BaseErrorCode):
  class InitAsrError (line 107) | class InitAsrError(BaseErrorCode):
  class NoTtsModelConfigError (line 112) | class NoTtsModelConfigError(BaseErrorCode):
  class TtsModelConfigDeletedError (line 117) | class TtsModelConfigDeletedError(BaseErrorCode):
  class TtsProviderDeletedError (line 122) | class TtsProviderDeletedError(BaseErrorCode):
  class TtsModelTypeError (line 127) | class TtsModelTypeError(BaseErrorCode):
  class TtsModelOfflineError (line 132) | class TtsModelOfflineError(BaseErrorCode):
  class InitTtsError (line 137) | class InitTtsError(BaseErrorCode):
  class SystemConfigEmptyError (line 142) | class SystemConfigEmptyError(BaseErrorCode):
  class SystemConfigInvalidError (line 147) | class SystemConfigInvalidError(BaseErrorCode):
  class UploadFileEmptyError (line 152) | class UploadFileEmptyError(BaseErrorCode):
  class UploadFileExtError (line 157) | class UploadFileExtError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/tag.py
  class TagExistError (line 5) | class TagExistError(BaseErrorCode):
  class TagNotExistError (line 10) | class TagNotExistError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/telemetry.py
  class DashboardMaxError (line 4) | class DashboardMaxError(BaseErrorCode):
  class DashBoardShareAuthError (line 9) | class DashBoardShareAuthError(BaseErrorCode):
  class QueryDatasetNotFoundError (line 14) | class QueryDatasetNotFoundError(BaseErrorCode):
  class QueryVirtualMaxError (line 19) | class QueryVirtualMaxError(BaseErrorCode):
  class QueryMetricNotFoundError (line 24) | class QueryMetricNotFoundError(BaseErrorCode):
  class QueryAggregationNotFoundError (line 29) | class QueryAggregationNotFoundError(BaseErrorCode):
  class QueryDimensionNotFoundError (line 34) | class QueryDimensionNotFoundError(BaseErrorCode):
  class QueryOperatorNotFoundError (line 39) | class QueryOperatorNotFoundError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/tool.py
  class ToolTypeRepeatError (line 4) | class ToolTypeRepeatError(BaseErrorCode):
  class ToolTypeEmptyError (line 9) | class ToolTypeEmptyError(BaseErrorCode):
  class ToolTypeNotExistsError (line 14) | class ToolTypeNotExistsError(BaseErrorCode):
  class ToolTypeNameError (line 19) | class ToolTypeNameError(BaseErrorCode):
  class ToolTypeIsPresetError (line 24) | class ToolTypeIsPresetError(BaseErrorCode):
  class ToolSchemaDownloadError (line 29) | class ToolSchemaDownloadError(BaseErrorCode):
  class ToolSchemaEmptyError (line 34) | class ToolSchemaEmptyError(BaseErrorCode):
  class ToolSchemaParseError (line 39) | class ToolSchemaParseError(BaseErrorCode):
  class ToolSchemaServerError (line 44) | class ToolSchemaServerError(BaseErrorCode):
  class ToolMcpSchemaError (line 49) | class ToolMcpSchemaError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/user.py
  class UserValidateError (line 5) | class UserValidateError(BaseErrorCode):
  class UserPasswordExpireError (line 10) | class UserPasswordExpireError(BaseErrorCode):
  class UserNotPasswordError (line 15) | class UserNotPasswordError(BaseErrorCode):
  class UserPasswordError (line 20) | class UserPasswordError(BaseErrorCode):
  class UserLoginOfflineError (line 25) | class UserLoginOfflineError(BaseErrorCode):
  class UserNameAlreadyExistError (line 30) | class UserNameAlreadyExistError(BaseErrorCode):
  class UserNeedGroupAndRoleError (line 35) | class UserNeedGroupAndRoleError(BaseErrorCode):
  class CaptchaError (line 40) | class CaptchaError(BaseErrorCode):
  class UserNameTooLongError (line 45) | class UserNameTooLongError(BaseErrorCode):
  class UserGroupNotDeleteError (line 50) | class UserGroupNotDeleteError(BaseErrorCode):
  class UserForbiddenError (line 55) | class UserForbiddenError(BaseErrorCode):
  class UserPasswordMaxTryError (line 60) | class UserPasswordMaxTryError(BaseErrorCode):
  class UserGroupEmptyError (line 65) | class UserGroupEmptyError(BaseErrorCode):
  class AdminUserUpdateForbiddenError (line 70) | class AdminUserUpdateForbiddenError(BaseErrorCode):

FILE: src/backend/bisheng/common/errcode/workstation.py
  class WebSearchToolNotFoundError (line 6) | class WebSearchToolNotFoundError(BaseErrorCode):
  class ConversationNotFoundError (line 12) | class ConversationNotFoundError(BaseErrorCode):
  class AgentAlreadyExistsError (line 17) | class AgentAlreadyExistsError(BaseErrorCode):

FILE: src/backend/bisheng/common/exceptions/auth.py
  class AuthJWTException (line 1) | class AuthJWTException(Exception):
  class JWTDecodeError (line 8) | class JWTDecodeError(AuthJWTException):
    method __init__ (line 13) | def __init__(self, status_code: int, message: str):

FILE: src/backend/bisheng/common/init_data.py
  function init_default_data (line 26) | async def init_default_data():
  function read_from_conf (line 153) | def read_from_conf(file_path: str) -> str:
  function upload_preset_minio_file (line 165) | def upload_preset_minio_file():

FILE: src/backend/bisheng/common/models/base.py
  class SQLModelSerializable (line 7) | class SQLModelSerializable(SQLModel):
    method create_new (line 11) | def create_new(cls, **data) -> "SQLModelSerializable":
    method model_dump (line 15) | def model_dump(self, **kwargs) -> Dict[str, Any]:

FILE: src/backend/bisheng/common/models/config.py
  class ConfigKeyEnum (line 12) | class ConfigKeyEnum(Enum):
  class ConfigBase (line 24) | class ConfigBase(SQLModelSerializable):
  class Config (line 34) | class Config(ConfigBase, table=True):
  class ConfigRead (line 43) | class ConfigRead(ConfigBase):
  class ConfigCreate (line 47) | class ConfigCreate(ConfigBase):
  class ConfigUpdate (line 51) | class ConfigUpdate(SQLModelSerializable):
  class ConfigDao (line 57) | class ConfigDao(ConfigBase):
    method get_config (line 60) | def get_config(cls, key: ConfigKeyEnum) -> Optional[Config]:
    method aget_config (line 67) | async def aget_config(cls, key: ConfigKeyEnum) -> Optional[Config]:
    method insert_config (line 75) | def insert_config(cls, config: Config) -> Config:
    method async_insert_config (line 83) | async def async_insert_config(cls, config: Config) -> Config:

FILE: src/backend/bisheng/common/repositories/implementations/base_repository_impl.py
  class BaseRepositoryImpl (line 13) | class BaseRepositoryImpl(BaseRepository[T, ID]):
    method __init__ (line 16) | def __init__(self, session: Union[AsyncSession, Session], model_class:...
    method save (line 20) | async def save(self, entity: T) -> T:
    method bulk_save (line 27) | async def bulk_save(self, entities: List[T]) -> List[T]:
    method save_sync (line 35) | def save_sync(self, entity: T) -> T:
    method bulk_save_sync (line 42) | def bulk_save_sync(self, entities: List[T]) -> List[T]:
    method find_by_id (line 50) | async def find_by_id(self, entity_id: ID) -> Optional[T]:
    method find_by_id_sync (line 55) | def find_by_id_sync(self, entity_id: ID) -> Optional[T]:
    method find_one (line 60) | async def find_one(self, **filters) -> Optional[T]:
    method find_one_sync (line 71) | def find_one_sync(self, **filters) -> Optional[T]:
    method find_by_ids (line 82) | async def find_by_ids(self, entity_ids: List[ID]) -> Sequence[Row[Any]...
    method find_by_ids_sync (line 88) | def find_by_ids_sync(self, entity_ids: List[ID]) -> Sequence[Row[Any] ...
    method find_all (line 94) | async def find_all(self, **filters) -> Sequence[Row[Any] | RowMapping ...
    method find_all_sync (line 105) | def find_all_sync(self, **filters) -> Sequence[Row[Any] | RowMapping |...
    method update (line 116) | async def update(self, entity: T) -> T:
    method update_sync (line 123) | def update_sync(self, entity: T) -> T:
    method delete (line 130) | async def delete(self, entity_id: ID) -> bool:
    method delete_sync (line 139) | def delete_sync(self, entity_id: ID) -> bool:
    method exists (line 148) | async def exists(self, entity_id: ID) -> bool:
    method exists_sync (line 153) | def exists_sync(self, entity_id: ID) -> bool:
    method count (line 158) | async def count(self, **filters) -> int:
    method count_sync (line 175) | def count_sync(self, **filters) -> int:

FILE: src/backend/bisheng/common/repositories/implementations/config_repository_impl.py
  class ConfigRepositoryImpl (line 8) | class ConfigRepositoryImpl(BaseRepositoryImpl[Config, str], ConfigReposi...
    method __init__ (line 11) | def __init__(self, session: AsyncSession):

FILE: src/backend/bisheng/common/repositories/interfaces/base_repository.py
  class BaseRepository (line 8) | class BaseRepository(ABC, Generic[T, ID]):
    method save (line 12) | async def save(self, entity: T) -> T:
    method bulk_save (line 17) | async def bulk_save(self, entities: List[T]) -> List[T]:
    method save_sync (line 22) | def save_sync(self, entity: T) -> T:
    method bulk_save_sync (line 27) | def bulk_save_sync(self, entities: List[T]) -> List[T]:
    method find_by_id (line 32) | async def find_by_id(self, entity_id: ID) -> Optional[T]:
    method find_by_id_sync (line 37) | def find_by_id_sync(self, entity_id: ID) -> Optional[T]:
    method find_one (line 42) | async def find_one(self, **filters) -> Optional[T]:
    method find_one_sync (line 47) | def find_one_sync(self, **filters) -> Optional[T]:
    method find_by_ids (line 52) | async def find_by_ids(self, entity_ids: List[ID]) -> List[T]:
    method find_by_ids_sync (line 57) | def find_by_ids_sync(self, entity_ids: List[ID]) -> List[T]:
    method find_all (line 62) | async def find_all(self, **filters) -> List[T]:
    method find_all_sync (line 67) | def find_all_sync(self, **filters) -> List[T]:
    method update (line 72) | async def update(self, entity: T) -> T:
    method update_sync (line 77) | def update_sync(self, entity: T) -> T:
    method delete (line 82) | async def delete(self, entity_id: ID) -> bool:
    method delete_sync (line 87) | def delete_sync(self, entity_id: ID) -> bool:
    method exists (line 92) | async def exists(self, entity_id: ID) -> bool:
    method exists_sync (line 97) | def exists_sync(self, entity_id: ID) -> bool:
    method count (line 102) | async def count(self, **filters) -> int:
    method count_sync (line 107) | def count_sync(self, **filters) -> int:

FILE: src/backend/bisheng/common/repositories/interfaces/config_repository.py
  class ConfigRepository (line 7) | class ConfigRepository(BaseRepository[Config, str], ABC):

FILE: src/backend/bisheng/common/schemas/api.py
  class UnifiedResponseModel (line 8) | class UnifiedResponseModel(BaseModel, Generic[DataT]):
  function resp_200 (line 15) | def resp_200(data: Union[list, dict, str, Any] = None,
  function resp_500 (line 22) | def resp_500(code: int = 500,
  class PageList (line 30) | class PageList(BaseModel, Generic[DataT]):
  class PageData (line 36) | class PageData(BaseModel, Generic[DataT]):
  function resp_501 (line 41) | def resp_501(code: int = 501,
  function resp_502 (line 48) | def resp_502(code: int = 502,

FILE: src/backend/bisheng/common/schemas/rag_schema.py
  class RagMetadataFieldSchema (line 7) | class RagMetadataFieldSchema(BaseModel):

FILE: src/backend/bisheng/common/schemas/telemetry/base_telemetry_schema.py
  class UserGroupInfo (line 11) | class UserGroupInfo(BaseModel):
  class UserRoleInfo (line 16) | class UserRoleInfo(BaseModel):
  class UserContext (line 22) | class UserContext(BaseModel):
  class BaseTelemetryEvent (line 32) | class BaseTelemetryEvent(BaseModel, Generic[T_EventData]):
    method model_dump (line 44) | def model_dump(self, *args: Any, **kwargs: Any) -> dict[str, Any]:

FILE: src/backend/bisheng/common/schemas/telemetry/event_data_schema.py
  class BaseEventData (line 8) | class BaseEventData(BaseModel):
    method event_name (line 12) | def event_name(self) -> BaseTelemetryTypeEnum:
  class UserLoginEventData (line 16) | class UserLoginEventData(BaseEventData):
  class NewMessageSessionEventData (line 24) | class NewMessageSessionEventData(BaseEventData):
  class ToolInvocationEventData (line 40) | class ToolInvocationEventData(BaseEventData):
  class DeleteMessageSessionEventData (line 52) | class DeleteMessageSessionEventData(BaseEventData):
  class NewApplicationEventData (line 60) | class NewApplicationEventData(BaseEventData):
  class NewKnowledgeBaseEventData (line 70) | class NewKnowledgeBaseEventData(BaseEventData):
  class FileParseEventData (line 80) | class FileParseEventData(BaseEventData):
  class MessageFeedbackEventData (line 90) | class MessageFeedbackEventData(BaseEventData):
  class ModelInvokeEventData (line 103) | class ModelInvokeEventData(BaseEventData):
  class ApplicationAliveEventData (line 130) | class ApplicationAliveEventData(BaseEventData):
  class ApplicationProcessEventData (line 145) | class ApplicationProcessEventData(BaseEventData):

FILE: src/backend/bisheng/common/services/config_service.py
  function read_from_conf (line 17) | def read_from_conf(file_path: str) -> str:
  function parse_key (line 32) | def parse_key(keys: list[str], setting_str: str = None, include_key: boo...
  class ConfigService (line 58) | class ConfigService(Settings):
    method __init__ (line 61) | def __init__(self, **data):
    method env_var_constructor (line 66) | def env_var_constructor(loader, node):
    method load_settings_from_yaml (line 75) | def load_settings_from_yaml(cls, file_path: str) -> 'ConfigService':
    method init_config (line 98) | async def init_config(self):
    method merge_old_config (line 126) | def merge_old_config(new_config: str, old_db_config: List[Config], old...
    method get_all_config (line 141) | def get_all_config():
    method aget_all_config (line 159) | async def aget_all_config():
    method get_knowledge (line 175) | def get_knowledge(self) -> KnowledgeConf:
    method async_get_knowledge (line 181) | async def async_get_knowledge(self) -> KnowledgeConf:
    method get_default_llm (line 187) | def get_default_llm(self):
    method get_password_conf (line 192) | async def get_password_conf(self) -> PasswordConf:
    method get_system_login_method (line 197) | def get_system_login_method(self) -> SystemLoginMethod:
    method aget_system_login_method (line 204) | async def aget_system_login_method(self) -> SystemLoginMethod:
    method get_workflow_conf (line 211) | def get_workflow_conf(self) -> WorkflowConf:
    method get_linsight_conf (line 216) | def get_linsight_conf(self) -> LinsightConf:
    method get_from_db (line 225) | def get_from_db(self, key: str):
    method aget_from_db (line 230) | async def aget_from_db(self, key: str):

FILE: src/backend/bisheng/common/services/telemetry/telemetry_service.py
  class BaseTelemetryService (line 57) | class BaseTelemetryService(object):
    method __init__ (line 62) | def __init__(self):
    method _ensure_index (line 71) | async def _ensure_index(self):
    method _ensure_index_sync (line 95) | def _ensure_index_sync(self):
    method _init_user_context (line 114) | async def _init_user_context(user_id: int) -> UserContext:
    method _init_user_context_sync (line 150) | def _init_user_context_sync(user_id: int) -> UserContext:
    method index_name (line 186) | def index_name(self) -> str:
    method _record_event_task (line 190) | async def _record_event_task(self, user_id: int, event_type: BaseTelem...
    method log_event (line 218) | async def log_event(self, user_id: int, event_type: BaseTelemetryTypeE...
    method _record_event_task_sync (line 245) | def _record_event_task_sync(self, user_id: int, event_type: BaseTeleme...
    method log_event_sync (line 261) | def log_event_sync(self, user_id: int, event_type: BaseTelemetryTypeEn...

FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/markdocx.py
  class MarkDocx (line 6) | class MarkDocx:
    method __init__ (line 7) | def __init__(self):
    method __call__ (line 10) | def __call__(self, md_input: str):

FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/parser/ext_md_syntax.py
  class ExtMdSyntax (line 5) | class ExtMdSyntax(Extension):
    method extendMarkdown (line 9) | def extendMarkdown(self, md):

FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/parser/md_parser.py
  function md2html (line 6) | def md2html(in_md: str):

FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/docx_plus.py
  function add_hyperlink (line 5) | def add_hyperlink(paragraph, url, text):

FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/docx_processor.py
  class DocxProcessor (line 24) | class DocxProcessor:
    method __init__ (line 25) | def __init__(self, style_conf: dict, debug_state: bool = False, show_i...
    method debug (line 38) | def debug(self, *args):
    method add_heading (line 44) | def add_heading(self, content: str, tag: str):
    method add_run (line 52) | def add_run(self, p: Paragraph, content: str, char_style: str = "plain"):
    method add_code_block (line 86) | def add_code_block(self, pre_tag):
    method add_picture (line 102) | def add_picture(self, img_tag, parent_paragraph: Paragraph = None):
    method add_table (line 191) | def add_table(self, table_root):
    method add_number_list (line 238) | def add_number_list(self, number_list):
    method add_bullet_list (line 287) | def add_bullet_list(self, bullet_list):
    method add_todo_list (line 342) | def add_todo_list(self, todo_list):
    method add_split_line (line 357) | def add_split_line(self):
    method add_link (line 366) | def add_link(self, p: Paragraph, text: str, href: str):
    method add_paragraph (line 371) | def add_paragraph(self, children, p_style: str = None, prefix: str = ""):
    method add_blockquote (line 395) | def add_blockquote(self, children):
    method html2docx (line 438) | def html2docx(self, html_str: str):

FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/simple_style.py
  function _zihao_to_pt (line 7) | def _zihao_to_pt(chn_name: str):
  class SimpleStyle (line 34) | class SimpleStyle:
    method __init__ (line 54) | def __init__(self,
    method __str__ (line 115) | def __str__(self) -> str:

FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/style_manager.py
  class StyleManager (line 13) | class StyleManager:
    method __init__ (line 15) | def __init__(self, doc: Document, yaml_conf: dict):
    method init_styles (line 19) | def init_styles(self):
    method set_style (line 33) | def set_style(self, _style: SimpleStyle):

FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/utils/style_enum.py
  class MDX_STYLE (line 1) | class MDX_STYLE:

FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/utils/yaml_utils.py
  function read_style_yaml (line 5) | def read_style_yaml(path: str) -> dict:

FILE: src/backend/bisheng/common/utils/markdown_cmpnt/md_to_pdf.py
  class MarkdownToPdfError (line 177) | class MarkdownToPdfError(Exception):
  class MarkdownToPdfConverter (line 182) | class MarkdownToPdfConverter:
    method __init__ (line 194) | def __init__(self,
    method _validate_input_path (line 232) | def _validate_input_path(self, file_path: Union[str, Path]) -> Path:
    method _validate_output_path (line 247) | def _validate_output_path(self, file_path: Union[str, Path]) -> Path:
    method _load_css_file (line 259) | def _load_css_file(self, css_path: Union[str, Path]) -> str:
    method render_markdown_to_html (line 277) | def render_markdown_to_html(self,
    method convert_html_to_pdf (line 326) | def convert_html_to_pdf(self,
    method convert_html_to_pdf_bytes (line 383) | def convert_html_to_pdf_bytes(self,
    method _render_pdf_with_playwright (line 441) | def _render_pdf_with_playwright(self,
    method _render_pdf_bytes_with_playwright (line 482) | def _render_pdf_bytes_with_playwright(self,
    method _wait_for_mathjax (line 523) | def _wait_for_mathjax(self, page) -> None:
    method convert_file (line 536) | def convert_file(self,
    method convert_string (line 574) | def convert_string(self,
    method convert_file_to_bytes (line 612) | def convert_file_to_bytes(self,
    method convert_string_to_bytes (line 651) | def convert_string_to_bytes(self,
  function render_markdown_to_html (line 691) | def render_markdown_to_html(md_text: str, css: str = None, enable_math: ...
  function html_to_pdf_with_playwright (line 697) | def html_to_pdf_with_playwright(html: str, output_path: str, format: str...
  function md_to_pdf (line 703) | def md_to_pdf(input_md: str, output_pdf: str, css_file: str = None, is_p...
  function md_to_pdf_bytes (line 721) | def md_to_pdf_bytes(input_md: str, css_file: str = None, is_path: bool =...

FILE: src/backend/bisheng/common/utils/util.py
  function orjson_dumps (line 12) | def orjson_dumps(v, *, default=None, sort_keys=False, indent_2=True):
  function generate_short_high_entropy_string (line 28) | def generate_short_high_entropy_string(length=32):
  function transfer_trace_id (line 58) | def transfer_trace_id(func):

FILE: src/backend/bisheng/components/custom_components/CustomComponent.py
  class Component (line 5) | class Component(CustomComponent):
    method build_config (line 8) | def build_config(self):
    method build (line 11) | def build(self, param: Data) -> Data:

FILE: src/backend/bisheng/core/ai/asr/aliyun_asr_client.py
  class AliyunASRClient (line 9) | class AliyunASRClient(BaseASRClient):
    method __init__ (line 12) | def __init__(self, api_key: str, model: str, **kwargs):
    method sync_func (line 27) | def sync_func(self, temp_file, language=None, model=None):
    method _transcribe (line 32) | async def _transcribe(

FILE: src/backend/bisheng/core/ai/asr/azure_openai_asr_client.py
  class AzureOpenAIASRClient (line 8) | class AzureOpenAIASRClient(BaseASRClient):
    method __init__ (line 11) | def __init__(self, api_key: str, **kwargs):
    method _transcribe (line 15) | async def _transcribe(

FILE: src/backend/bisheng/core/ai/asr/openai_asr_client.py
  class OpenAIASRClient (line 8) | class OpenAIASRClient(BaseASRClient):
    method __init__ (line 11) | def __init__(self, api_key: str, **kwargs):
    method _transcribe (line 15) | async def _transcribe(

FILE: src/backend/bisheng/core/ai/base.py
  class BaseASRClient (line 14) | class BaseASRClient(ABC):
    method transcribe (line 17) | async def transcribe(
    method _transcribe (line 74) | async def _transcribe(self, audio: str, language: Optional[str] = None...
  class BaseTTSClient (line 90) | class BaseTTSClient(ABC):
    method synthesize (line 94) | async def synthesize(
  class BaseRerank (line 116) | class BaseRerank(BaseDocumentCompressor):
    method compress_documents (line 121) | def compress_documents(
    method sort_rerank_result (line 140) | def sort_rerank_result(documents: Sequence[Document], results: list[di...

FILE: src/backend/bisheng/core/ai/llm/chat_openai_compatible.py
  class ChatOpenAICompatible (line 7) | class ChatOpenAICompatible(ChatOpenAI):
    method _get_request_payload (line 13) | def _get_request_payload(

FILE: src/backend/bisheng/core/ai/llm/custom_chat_deepseek.py
  class CustomChatDeepSeek (line 8) | class CustomChatDeepSeek(ChatDeepSeek):
    method _get_request_payload (line 10) | def _get_request_payload(

FILE: src/backend/bisheng/core/ai/llm/custom_chat_tongyi.py
  class CustomChatTongYi (line 6) | class CustomChatTongYi(ChatTongyi):
    method _invocation_params (line 11) | def _invocation_params(

FILE: src/backend/bisheng/core/ai/rerank/common_rerank.py
  class CommonRerank (line 12) | class CommonRerank(BaseRerank):
    method validate_client (line 25) | def validate_client(self) -> Self:
    method get_default_headers (line 34) | def get_default_headers(self):
    method get_default_params (line 40) | def get_default_params(self):
    method get_req_data (line 46) | def get_req_data(
    method compress_documents (line 62) | def compress_documents(
    method acompress_documents (line 88) | async def acompress_documents(

FILE: src/backend/bisheng/core/ai/rerank/rrf_rerank.py
  class RRFRerank (line 10) | class RRFRerank(BaseRerank):
    method set_weights (line 33) | def set_weights(cls, values: Dict[str, Any]) -> Dict[str, Any]:
    method compress_documents (line 39) | def compress_documents(

FILE: src/backend/bisheng/core/ai/rerank/xinference/_compat.py
  class JSONSchema (line 78) | class JSONSchema(BaseModel):
  class ResponseFormatJSONSchema (line 85) | class ResponseFormatJSONSchema(BaseModel):
  class CreateChatCompletionOpenAI (line 95) | class CreateChatCompletionOpenAI(BaseModel):

FILE: src/backend/bisheng/core/ai/rerank/xinference/client/common.py
  function convert_float_to_int_or_str (line 19) | def convert_float_to_int_or_str(model_size: float) -> Union[int, str]:
  function streaming_response_iterator (line 30) | def streaming_response_iterator(
  function async_streaming_response_iterator (line 66) | async def async_streaming_response_iterator(

FILE: src/backend/bisheng/core/ai/rerank/xinference/client/restful/async_restful_client.py
  function _filter_params (line 35) | def _filter_params(params: Dict[Any, Any]) -> Dict[Any, Any]:
  function _get_error_string (line 43) | async def _get_error_string(response: aiohttp.ClientResponse) -> str:
  function _release_response (line 61) | async def _release_response(response: aiohttp.ClientResponse):
  class AsyncRESTfulModelHandle (line 67) | class AsyncRESTfulModelHandle:
    method __init__ (line 73) | def __init__(self, model_uid: str, base_url: str, auth_headers: Dict):
    method close (line 82) | async def close(self):
    method __del__ (line 88) | def __del__(self):
  class AsyncRESTfulEmbeddingModelHandle (line 94) | class AsyncRESTfulEmbeddingModelHandle(AsyncRESTfulModelHandle):
    method create_embedding (line 95) | async def create_embedding(
    method convert_ids_to_tokens (line 136) | async def convert_ids_to_tokens(
  class AsyncRESTfulRerankModelHandle (line 177) | class AsyncRESTfulRerankModelHandle(AsyncRESTfulModelHandle):
    method rerank (line 178) | async def rerank(
  class AsyncRESTfulImageModelHandle (line 239) | class AsyncRESTfulImageModelHandle(AsyncRESTfulModelHandle):
    method text_to_image (line 240) | async def text_to_image(
    method image_to_image (line 287) | async def image_to_image(
    method image_edit (line 370) | async def image_edit(
    method inpainting (line 521) | async def inpainting(
    method ocr (line 601) | async def ocr(self, image: Union[str, bytes], **kwargs):
  class AsyncRESTfulVideoModelHandle (line 623) | class AsyncRESTfulVideoModelHandle(AsyncRESTfulModelHandle):
    method text_to_video (line 624) | async def text_to_video(
    method image_to_video (line 663) | async def image_to_video(
    method flf_to_video (line 712) | async def flf_to_video(
  class AsyncRESTfulGenerateModelHandle (line 768) | class AsyncRESTfulGenerateModelHandle(AsyncRESTfulModelHandle):
    method generate (line 769) | async def generate(
  class AsyncRESTfulChatModelHandle (line 823) | class AsyncRESTfulChatModelHandle(AsyncRESTfulGenerateModelHandle):
    method chat (line 824) | async def chat(
  class AsyncRESTfulAudioModelHandle (line 886) | class AsyncRESTfulAudioModelHandle(AsyncRESTfulModelHandle):
    method transcriptions (line 887) | async def transcriptions(
    method translations (line 954) | async def translations(
    method speech (line 1019) | async def speech(
  class AsyncRESTfulFlexibleModelHandle (line 1102) | class AsyncRESTfulFlexibleModelHandle(AsyncRESTfulModelHandle):
    method infer (line 1103) | async def infer(
  class AsyncClient (line 1137) | class AsyncClient:
    method __init__ (line 1138) | def __init__(self, base_url, api_key: Optional[str] = None):
    method close (line 1150) | async def close(self):
    method __del__ (line 1156) | def __del__(self):
    method _set_token (line 1161) | def _set_token(self, token: Optional[str]):
    method _get_token (line 1166) | def _get_token(self) -> Optional[str]:
    method _check_cluster_authenticated (line 1173) | def _check_cluster_authenticated(self):
    method vllm_models (line 1191) | async def vllm_models(self) -> Dict[str, Any]:
    method login (line 1208) | async def login(self, username: str, password: str):
    method list_models (line 1229) | async def list_models(self) -> Dict[str, Dict[str, Any]]:
    method launch_model (line 1253) | async def launch_model(
    method terminate_model (line 1365) | async def terminate_model(self, model_uid: str):
    method get_launch_model_progress (line 1390) | async def get_launch_model_progress(self, model_uid: str) -> dict:
    method cancel_launch_model (line 1420) | async def cancel_launch_model(self, model_uid: str):
    method get_instance_info (line 1443) | async def get_instance_info(self, model_name: str, model_uid: str):
    method _get_supervisor_internal_address (line 1456) | async def _get_supervisor_internal_address(self):
    method get_model (line 1465) | async def get_model(self, model_uid: str) -> AsyncRESTfulModelHandle:
    method describe_model (line 1535) | async def describe_model(self, model_uid: str):
    method register_model (line 1587) | async def register_model(
    method unregister_model (line 1627) | async def unregister_model(self, model_type: str, model_name: str):
    method list_model_registrations (line 1654) | async def list_model_registrations(self, model_type: str) -> List[Dict...
    method list_cached_models (line 1685) | async def list_cached_models(
    method list_deletable_models (line 1724) | async def list_deletable_models(
    method confirm_and_remove_model (line 1756) | async def confirm_and_remove_model(
    method get_model_registration (line 1788) | async def get_model_registration(
    method query_engine_by_model_name (line 1817) | async def query_engine_by_model_name(
    method abort_request (line 1848) | async def abort_request(
    method get_workers_info (line 1883) | async def get_workers_info(self):
    method get_supervisor_info (line 1894) | async def get_supervisor_info(self):
    method get_progress (line 1905) | async def get_progress(self, request_id: str):
    method abort_cluster (line 1916) | async def abort_cluster(self):

FILE: src/backend/bisheng/core/ai/rerank/xinference/client/restful/restful_client.py
  function _get_error_string (line 34) | def _get_error_string(response: requests.Response) -> str:
  class RESTfulModelHandle (line 47) | class RESTfulModelHandle:
    method __init__ (line 53) | def __init__(self, model_uid: str, base_url: str, auth_headers: Dict):
    method close (line 59) | def close(self):
    method __del__ (line 67) | def __del__(self):
  class RESTfulEmbeddingModelHandle (line 72) | class RESTfulEmbeddingModelHandle(RESTfulModelHandle):
    method create_embedding (line 73) | def create_embedding(self, input: Union[str, List[str]], **kwargs) -> ...
    method convert_ids_to_tokens (line 109) | def convert_ids_to_tokens(
  class RESTfulRerankModelHandle (line 147) | class RESTfulRerankModelHandle(RESTfulModelHandle):
    method rerank (line 148) | def rerank(
  class RESTfulImageModelHandle (line 206) | class RESTfulImageModelHandle(RESTfulModelHandle):
    method text_to_image (line 207) | def text_to_image(
    method image_to_image (line 251) | def image_to_image(
    method image_edit (line 332) | def image_edit(
    method inpainting (line 463) | def inpainting(
    method ocr (line 538) | def ocr(self, image: Union[str, bytes], **kwargs):
  class RESTfulVideoModelHandle (line 558) | class RESTfulVideoModelHandle(RESTfulModelHandle):
    method text_to_video (line 559) | def text_to_video(
    method image_to_video (line 595) | def image_to_video(
    method flf_to_video (line 642) | def flf_to_video(
  class RESTfulGenerateModelHandle (line 696) | class RESTfulGenerateModelHandle(RESTfulModelHandle):
    method generate (line 697) | def generate(
  class RESTfulChatModelHandle (line 751) | class RESTfulChatModelHandle(RESTfulGenerateModelHandle):
    method chat (line 752) | def chat(
  class RESTfulAudioModelHandle (line 813) | class RESTfulAudioModelHandle(RESTfulModelHandle):
    method transcriptions (line 814) | def transcriptions(
    method translations (line 879) | def translations(
    method speech (line 942) | def speech(
  class RESTfulFlexibleModelHandle (line 1023) | class RESTfulFlexibleModelHandle(RESTfulModelHandle):
    method infer (line 1024) | def infer(
  class Client (line 1060) | class Client:
    method __init__ (line 1061) | def __init__(self, base_url, api_key: Optional[str] = None):
    method close (line 1070) | def close(self):
    method __del__ (line 1078) | def __del__(self):
    method _set_token (line 1082) | def _set_token(self, token: Optional[str]):
    method _get_token (line 1087) | def _get_token(self) -> Optional[str]:
    method _check_cluster_authenticated (line 1094) | def _check_cluster_authenticated(self):
    method vllm_models (line 1108) | def vllm_models(self) -> Dict[str, Any]:
    method login (line 1121) | def login(self, username: str, password: str):
    method list_models (line 1137) | def list_models(self) -> Dict[str, Dict[str, Any]]:
    method launch_model (line 1160) | def launch_model(
    method terminate_model (line 1284) | def terminate_model(self, model_uid: str):
    method get_launch_model_progress (line 1308) | def get_launch_model_progress(self, model_uid: str) -> dict:
    method cancel_launch_model (line 1336) | def cancel_launch_model(self, model_uid: str):
    method get_instance_info (line 1358) | def get_instance_info(self, model_name: str, model_uid: str):
    method _get_supervisor_internal_address (line 1370) | def _get_supervisor_internal_address(self):
    method get_model (line 1378) | def get_model(self, model_uid: str) -> RESTfulModelHandle:
    method describe_model (line 1448) | def describe_model(self, model_uid: str):
    method register_model (line 1498) | def register_model(
    method unregister_model (line 1535) | def unregister_model(self, model_type: str, model_name: str):
    method list_model_registrations (line 1561) | def list_model_registrations(
    method list_cached_models (line 1595) | def list_cached_models(
    method list_deletable_models (line 1633) | def list_deletable_models(
    method confirm_and_remove_model (line 1663) | def confirm_and_remove_model(
    method get_model_registration (line 1693) | def get_model_registration(
    method query_engine_by_model_name (line 1721) | def query_engine_by_model_name(
    method abort_request (line 1751) | def abort_request(self, model_uid: str, request_id: str, block_duratio...
    method get_workers_info (line 1783) | def get_workers_info(self):
    method get_supervisor_info (line 1793) | def get_supervisor_info(self):
    method get_progress (line 1803) | def get_progress(self, request_id: str):
    method abort_cluster (line 1813) | def abort_cluster(self):

FILE: src/backend/bisheng/core/ai/rerank/xinference/types.py
  class Image (line 40) | class Image(TypedDict):
  class ImageList (line 45) | class ImageList(TypedDict):
  class ImageEditRequest (line 50) | class ImageEditRequest(TypedDict, total=False):
  class SDAPIResult (line 59) | class SDAPIResult(TypedDict):
  class Video (line 65) | class Video(TypedDict):
  class VideoList (line 70) | class VideoList(TypedDict):
  class EmbeddingUsage (line 75) | class EmbeddingUsage(TypedDict):
  class EmbeddingData (line 80) | class EmbeddingData(TypedDict):
  class Embedding (line 87) | class Embedding(TypedDict):
  class Document (line 95) | class Document(TypedDict):
  class DocumentObj (line 99) | class DocumentObj(TypedDict):
  class ApiVersion (line 106) | class ApiVersion(TypedDict):
  class BilledUnit (line 113) | class BilledUnit(TypedDict):
  class RerankTokens (line 120) | class RerankTokens(TypedDict):
  class Meta (line 125) | class Meta(TypedDict):
  class Rerank (line 132) | class Rerank(TypedDict):
  class CompletionLogprobs (line 138) | class CompletionLogprobs(TypedDict):
  class ToolCallFunction (line 145) | class ToolCallFunction(TypedDict):
  class ToolCalls (line 150) | class ToolCalls(TypedDict):
  class CompletionChoice (line 156) | class CompletionChoice(TypedDict):
  class CompletionUsage (line 164) | class CompletionUsage(TypedDict):
  class CompletionChunk (line 170) | class CompletionChunk(TypedDict):
  class Completion (line 179) | class Completion(TypedDict):
  class ChatCompletionAudio (line 188) | class ChatCompletionAudio(TypedDict):
  class ChatCompletionMessage (line 195) | class ChatCompletionMessage(TypedDict):
  class ChatCompletionChoice (line 204) | class ChatCompletionChoice(TypedDict):
  class ChatCompletion (line 210) | class ChatCompletion(TypedDict):
  class ChatCompletionChunkDelta (line 219) | class ChatCompletionChunkDelta(TypedDict):
  class ChatCompletionChunkChoice (line 226) | class ChatCompletionChunkChoice(TypedDict):
  class ChatCompletionChunk (line 232) | class ChatCompletionChunk(TypedDict):
  class StoppingCriteriaList (line 244) | class StoppingCriteriaList(List[StoppingCriteria]):
    method __call__ (line 245) | def __call__(self, input_ids: List[int], logits: List[float]) -> bool:
  class LogitsProcessorList (line 252) | class LogitsProcessorList(List[LogitsProcessor]):
    method __call__ (line 253) | def __call__(self, input_ids: List[int], scores: List[float]) -> List[...
  class PytorchGenerateConfig (line 259) | class PytorchGenerateConfig(TypedDict, total=False):
  class CogagentGenerateConfig (line 277) | class CogagentGenerateConfig(PytorchGenerateConfig, total=False):
  class PytorchModelConfig (line 290) | class PytorchModelConfig(TypedDict, total=False):
  function get_pydantic_model_from_method (line 312) | def get_pydantic_model_from_method(
  function fix_forward_ref (line 338) | def fix_forward_ref(model):
  class ModelAndPrompt (line 358) | class ModelAndPrompt(BaseModel):
  class ModelAndMessages (line 363) | class ModelAndMessages(BaseModel):
  class CreateCompletionTorch (line 368) | class CreateCompletionTorch(BaseModel):
  class CreateCompletion (line 396) | class CreateCompletion(
  class CreateChatModel (line 404) | class CreateChatModel(BaseModel):
  class CreateChatCompletion (line 414) | class CreateChatCompletion(  # type: ignore
  class LoRA (line 422) | class LoRA:
    method __init__ (line 423) | def __init__(self, lora_name: str, local_path: str):
    method to_dict (line 427) | def to_dict(self):
    method from_dict (line 434) | def from_dict(cls, data: Dict):
  class PeftModelConfig (line 441) | class PeftModelConfig:
    method __init__ (line 442) | def __init__(
    method to_dict (line 452) | def to_dict(self):
    method from_dict (line 464) | def from_dict(cls, data: Dict):
  class AnthropicMessage (line 498) | class AnthropicMessage(TypedDict):
  class MessageCreateParams (line 509) | class MessageCreateParams(TypedDict):
  class CreateMessage (line 524) | class CreateMessage(
  class AnthropicMessage (line 533) | class AnthropicMessage(TypedDict):
  class MessageCreateParams (line 544) | class MessageCreateParams(TypedDict):
  class CreateMessage (line 562) | class CreateMessage(CreateMessageAnthropic):
  class AnthropicMessage (line 567) | class AnthropicMessage:
  class MessageCreateParams (line 570) | class MessageCreateParams:
  class CreateMessage (line 575) | class CreateMessage:

FILE: src/backend/bisheng/core/ai/rerank/xinference_rerank.py
  class XinferenceRerank (line 12) | class XinferenceRerank(BaseRerank):
    method validate_client (line 21) | def validate_client(self) -> Self:
    method compress_documents (line 29) | def compress_documents(

FILE: src/backend/bisheng/core/ai/test/test.py
  function test_aliyun_asr (line 10) | async def test_aliyun_asr():
  function test_aliyun_tts (line 23) | async def test_aliyun_tts():
  function test_azure_openai_asr (line 35) | async def test_azure_openai_asr():
  function test_azure_openai_tts (line 46) | async def test_azure_openai_tts():
  function test_xinference_rerank (line 60) | def test_xinference_rerank():
  function main (line 69) | async def main():

FILE: src/backend/bisheng/core/ai/tts/aliyun_tts_client.py
  class AliyunTTSClient (line 9) | class AliyunTTSClient(BaseTTSClient):
    method __init__ (line 12) | def __init__(self, api_key: str, **kwargs):
    method sync_func (line 22) | def sync_func(self, text: str):
    method synthesize (line 26) | async def synthesize(

FILE: src/backend/bisheng/core/ai/tts/azure_openai_tts_client.py
  class AzureOpenAITTSClient (line 6) | class AzureOpenAITTSClient(BaseTTSClient):
    method __init__ (line 9) | def __init__(self, api_key: str, **kwargs):
    method synthesize (line 19) | async def synthesize(

FILE: src/backend/bisheng/core/ai/tts/openai_tts_client.py
  class OpenAITTSClient (line 8) | class OpenAITTSClient(BaseTTSClient):
    method __init__ (line 11) | def __init__(self, api_key: str, **kwargs):
    method synthesize (line 21) | async def synthesize(

FILE: src/backend/bisheng/core/cache/base.py
  class BaseCache (line 4) | class BaseCache(abc.ABC):
    method get (line 10) | def get(self, key):
    method set (line 22) | def set(self, key, value):
    method delete (line 32) | def delete(self, key):
    method clear (line 41) | def clear(self):
    method __contains__ (line 47) | def __contains__(self, key):
    method __getitem__ (line 59) | def __getitem__(self, key):
    method __setitem__ (line 68) | def __setitem__(self, key, value):
    method __delitem__ (line 78) | def __delitem__(self, key):

FILE: src/backend/bisheng/core/cache/flow.py
  class InMemoryCache (line 8) | class InMemoryCache(BaseCache):
    method __init__ (line 34) | def __init__(self, max_size=None, expiration_time=60 * 60):
    method get (line 47) | def get(self, key):
    method set (line 71) | def set(self, key, value):
    method get_or_set (line 90) | def get_or_set(self, key, value):
    method delete (line 107) | def delete(self, key):
    method clear (line 117) | def clear(self):
    method __contains__ (line 124) | def __contains__(self, key):
    method __getitem__ (line 128) | def __getitem__(self, key):
    method __setitem__ (line 132) | def __setitem__(self, key, value):
    method __delitem__ (line 136) | def __delitem__(self, key):
    method __len__ (line 140) | def __len__(self):
    method __repr__ (line 144) | def __repr__(self):

FILE: src/backend/bisheng/core/cache/manager.py
  class Subject (line 9) | class Subject:
    method __init__ (line 12) | def __init__(self):
    method attach (line 15) | def attach(self, observer: Callable[[], None]):
    method detach (line 19) | def detach(self, observer: Callable[[], None]):
    method notify (line 23) | def notify(self):
  class AsyncSubject (line 31) | class AsyncSubject:
    method __init__ (line 34) | def __init__(self):
    method attach (line 37) | def attach(self, observer: Callable[[], Awaitable]):
    method detach (line 41) | def detach(self, observer: Callable[[], Awaitable]):
    method notify (line 45) | async def notify(self):
  class CacheManager (line 53) | class CacheManager(Subject):
    method __init__ (line 56) | def __init__(self):
    method set_client_id (line 64) | def set_client_id(self, client_id: str, chat_id: str):
    method add (line 83) | def add(self, name: str, obj: Any, obj_type: str, extension: Optional[...
    method add_pandas (line 107) | def add_pandas(self, name: str, obj: Any):
    method add_image (line 120) | def add_image(self, name: str, obj: Any, extension: str = 'png'):
    method get (line 133) | def get(self, name: str):
    method get_last (line 145) | def get_last(self):

FILE: src/backend/bisheng/core/cache/redis_conn.py
  class RedisClient (line 18) | class RedisClient:
    method __init__ (line 20) | def __init__(self, redis_url, max_connections=100):
    method set (line 57) | def set(self, key, value, expiration=3600, enx=None):
    method aset (line 72) | async def aset(self, key, value, expiration=3600):
    method setNx (line 87) | def setNx(self, key, value, expiration=3600):
    method asetNx (line 99) | async def asetNx(self, key, value, expiration=3600):
    method setex (line 111) | def setex(self, key, value, expiration=3600):
    method asetex (line 123) | async def asetex(self, key, value, expiration=3600):
    method mset (line 135) | def mset(self, mapping: Dict[str, typing.Any], expiration: int = None)...
    method amset (line 155) | async def amset(self, mapping: Dict[str, typing.Any], expiration: int ...
    method mget (line 175) | def mget(self, keys: typing.List[str]) -> typing.List[typing.Any] | None:
    method amget (line 186) | async def amget(self, keys: typing.List[str]) -> typing.List[typing.An...
    method akeys (line 196) | async def akeys(self, pattern: str) -> typing.List[str]:
    method hsetkey (line 205) | def hsetkey(self, name, key, value, expiration=3600):
    method ahsetkey (line 215) | async def ahsetkey(self, name, key, value, expiration=3600):
    method hset (line 225) | def hset(self, name,
    method ahset (line 240) | async def ahset(self, name,
    method hget (line 255) | def hget(self, name, key):
    method ahget (line 262) | async def ahget(self, name, key):
    method hgetall (line 269) | def hgetall(self, name):
    method ahgetall (line 276) | async def ahgetall(self, name):
    method hdel (line 283) | def hdel(self, name, *keys):
    method ahdel (line 290) | async def ahdel(self, name, *keys):
    method get (line 297) | def get(self, key):
    method aget (line 305) | async def aget(self, key):
    method incr (line 314) | def incr(self, key, expiration=3600) -> int:
    method aincr (line 324) | async def aincr(self, key, expiration=3600) -> int:
    method expire_key (line 334) | def expire_key(self, key, expiration: int):
    method aexpire_key (line 341) | async def aexpire_key(self, key, expiration: int):
    method delete (line 348) | def delete(self, key):
    method adelete (line 355) | async def adelete(self, key):
    method alpush (line 362) | async def alpush(self, key, value, expiration=3600):
    method ablpop (line 372) | async def ablpop(self, key, timeout=0):
    method alrange (line 380) | async def alrange(self, key, start=0, end=-1):
    method alrem (line 388) | async def alrem(self, key, value):
    method rpush (line 396) | def rpush(self, key, value, expiration=3600):
    method arpush (line 406) | async def arpush(self, key, value, expiration=3600):
    method lpop (line 417) | def lpop(self, key, count: int = None):
    method alpop (line 424) | async def alpop(self, key, count: int = None):
    method publish (line 431) | def publish(self, key, value):
    method apublish (line 438) | async def apublish(self, key, value):
    method exists (line 445) | def exists(self, key):
    method aexists (line 452) | async def aexists(self, key):
    method close (line 459) | def close(self):
    method aclose (line 462) | async def aclose(self):
    method pipeline (line 471) | def pipeline(self, transaction: bool = True) -> redis.client.Pipeline:
    method async_pipeline (line 475) | def async_pipeline(self, transaction: bool = True) -> Pipeline:
    method allen (line 479) | async def allen(self, key: str) -> int:
    method __contains__ (line 484) | def __contains__(self, key):
    method __getitem__ (line 489) | def __getitem__(self, key):
    method __setitem__ (line 494) | def __setitem__(self, key, value):
    method __delitem__ (line 499) | def __delitem__(self, key):
    method cluster_nodes (line 504) | def cluster_nodes(self, key):
    method acluster_nodes (line 510) | async def acluster_nodes(self, key):

FILE: src/backend/bisheng/core/cache/redis_manager.py
  class RedisManager (line 10) | class RedisManager(BaseContextManager[RedisClient]):
    method __init__ (line 19) | def __init__(
    method _async_initialize (line 29) | async def _async_initialize(self) -> RedisClient:
    method _sync_initialize (line 33) | def _sync_initialize(self) -> RedisClient:
    method _sync_cleanup (line 37) | def _sync_cleanup(self) -> None:
    method _async_cleanup (line 42) | async def _async_cleanup(self) -> None:
  function get_redis_client (line 48) | async def get_redis_client() -> RedisClient:
  function get_redis_client_sync (line 66) | def get_redis_client_sync() -> RedisClient:

FILE: src/backend/bisheng/core/cache/utils.py
  function create_cache_folder (line 32) | def create_cache_folder(func):
  function create_cache_folder_async (line 45) | def create_cache_folder_async(func):
  function memoize_dict (line 58) | def memoize_dict(maxsize=128):
  function clear_old_cache_files (line 90) | def clear_old_cache_files(max_cache_size: int = 3):
  function compute_dict_hash (line 104) | def compute_dict_hash(graph_data):
  function filter_json (line 111) | def filter_json(json_data):
  function save_binary_file (line 136) | def save_binary_file(content: str, file_name: str, accepted_types: list[...
  function detect_encoding_cchardet (line 167) | def detect_encoding_cchardet(file_bytes: bytes, num_bytes=1024):
  function convert_encoding_cchardet (line 175) | def convert_encoding_cchardet(content: bytes, target_encoding='utf-8') -...
  function upload_file_to_minio (line 202) | async def upload_file_to_minio(file: UploadFile, object_name, bucket_nam...
  function save_file_to_folder (line 209) | async def save_file_to_folder(file: UploadFile, folder_name: str, file_n...
  function save_uploaded_file (line 233) | async def save_uploaded_file(file: UploadFile, folder_name, file_name, b...
  function save_download_file (line 290) | def save_download_file(file_input: Union[bytes, BinaryIO], folder_name: ...
  function file_download (line 361) | def file_download(file_path: str):
  function async_file_download (line 434) | async def async_file_download(file_path: str):
  function _is_valid_url (line 496) | def _is_valid_url(url: str):

FILE: src/backend/bisheng/core/config/settings.py
  function encrypt_token (line 15) | def encrypt_token(token: str):
  function decrypt_token (line 19) | def decrypt_token(token: str):
  class LoggerConf (line 23) | class LoggerConf(BaseModel):
    method parse_logger_sink (line 30) | def parse_logger_sink(cls, sink: str) -> str:
    method set_handlers (line 41) | def set_handlers(cls, value):
  class PasswordConf (line 51) | class PasswordConf(BaseModel):
  class SystemLoginMethod (line 58) | class SystemLoginMethod(BaseModel):
  class MilvusConf (line 65) | class MilvusConf(BaseModel):
    method convert_connection_args (line 75) | def convert_connection_args(cls, value):
  class ElasticsearchConf (line 81) | class ElasticsearchConf(BaseModel):
    method validate (line 89) | def validate(self):
  class VectorStores (line 96) | class VectorStores(BaseModel):
  class MinioConf (line 102) | class MinioConf(BaseModel):
  class ObjectStore (line 117) | class ObjectStore(BaseModel):
  class WorkflowConf (line 123) | class WorkflowConf(BaseModel):
  class CeleryConf (line 129) | class CeleryConf(BaseModel):
    method validate (line 135) | def validate(self):
  class LinsightConf (line 169) | class LinsightConf(BaseModel):
  class CookieConf (line 185) | class CookieConf(BaseModel):
  class Etl4lmConf (line 198) | class Etl4lmConf(BaseModel):
  class KnowledgeConf (line 205) | class KnowledgeConf(BaseModel):
  class Settings (line 210) | class Settings(BaseModel):
    method set_database_url (line 264) | def set_database_url(cls, value):
    method set_redis_url (line 287) | def set_redis_url(cls, values):
    method set_celery_redis_url (line 307) | def set_celery_redis_url(cls, values):
    method validate_lists (line 327) | def validate_lists(cls, values):
    method get_minio_conf (line 333) | def get_minio_conf(self) -> MinioConf:
    method get_vectors_conf (line 336) | def get_vectors_conf(self) -> VectorStores:
    method get_search_conf (line 339) | def get_search_conf(self) -> ElasticsearchConf:
    method get_telemetry_conf (line 342) | def get_telemetry_conf(self) -> ElasticsearchConf:

FILE: src/backend/bisheng/core/context/base.py
  class ContextState (line 14) | class ContextState(Enum):
  class ContextError (line 24) | class ContextError(Exception):
  class ContextInitializationError (line 29) | class ContextInitializationError(ContextError):
  class ContextTimeoutError (line 34) | class ContextTimeoutError(ContextError):
  class ContextStateError (line 39) | class ContextStateError(ContextError):
  class BaseContextManager (line 44) | class BaseContextManager(ABC, Generic[T]):
    method __init__ (line 55) | def __init__(self, name: str = None, timeout: float = None, retry_coun...
    method _async_initialize (line 73) | async def _async_initialize(self) -> T:
    method _sync_initialize (line 78) | def _sync_initialize(self) -> T:
    method _async_cleanup (line 83) | async def _async_cleanup(self) -> None:
    method _sync_cleanup (line 88) | def _sync_cleanup(self) -> None:
    method _validate_state_for_access (line 92) | def _validate_state_for_access(self) -> None:
    method _wait_for_initialization_async (line 103) | async def _wait_for_initialization_async(self) -> None:
    method _wait_for_initialization_sync (line 110) | def _wait_for_initialization_sync(self) -> None:
    method async_get_instance (line 115) | async def async_get_instance(self) -> T:
    method _perform_initialization_async (line 147) | async def _perform_initialization_async(self) -> T:
    method sync_get_instance (line 179) | def sync_get_instance(self) -> T:
    method _perform_initialization_sync (line 210) | def _perform_initialization_sync(self) -> T:
    method async_close (line 243) | async def async_close(self) -> None:
    method sync_close (line 273) | def sync_close(self) -> None:
    method async_reset (line 303) | async def async_reset(self) -> None:
    method sync_reset (line 315) | def sync_reset(self) -> None:
    method is_ready (line 327) | def is_ready(self) -> bool:
    method get_state (line 335) | def get_state(self) -> ContextState:
    method get_error (line 343) | def get_error(self) -> Optional[Exception]:
    method get_info (line 351) | def get_info(self) -> Dict[str, Any]:
    method sync_context (line 368) | def sync_context(self):
    method async_context (line 386) | async def async_context(self):
    method __repr__ (line 403) | def __repr__(self) -> str:
  class FunctionContextManager (line 407) | class FunctionContextManager(BaseContextManager[T]):
    method __init__ (line 413) | def __init__(
    method _async_initialize (line 425) | async def _async_initialize(self) -> T:
    method _sync_initialize (line 433) | def _sync_initialize(self) -> T:
    method _async_cleanup (line 439) | async def _async_cleanup(self) -> None:
    method _sync_cleanup (line 448) | def _sync_cleanup(self) -> None:
  class ContextRegistry (line 456) | class ContextRegistry:
    method __init__ (line 462) | def __init__(self):
    method register (line 466) | def register(self, context_manager: BaseContextManager) -> None:
    method unregister (line 482) | def unregister(self, name: str) -> None:
    method get_context (line 499) | def get_context(self, name: str) -> BaseContextManager:
    method has_context (line 515) | def has_context(self, name: str) -> bool:
    method async_get_instance (line 526) | async def async_get_instance(self, name: str) -> Any:
    method sync_get_instance (line 531) | def sync_get_instance(self, name: str) -> Any:
    method async_close_all (line 536) | async def async_close_all(self) -> None:
    method sync_close_all (line 549) | def sync_close_all(self) -> None:
    method get_all_contexts (line 557) | def get_all_contexts(self) -> Dict[str, BaseContextManager]:
    method get_ready_contexts (line 565) | def get_ready_contexts(self) -> Dict[str, BaseContextManager]:
    method get_context_states (line 577) | def get_context_states(self) -> Dict[str, ContextState]:
    method health_check (line 588) | async def health_check(self) -> Dict[str, bool]:
    method clear (line 612) | def clear(self) -> None:
    method __len__ (line 621) | def __len__(self) -> int:
    method __contains__ (line 625) | def __contains__(self, name: str) -> bool:
    method __iter__ (line 629) | def __iter__(self):
    method __repr__ (line 633) | def __repr__(self) -> str:

FILE: src/backend/bisheng/core/context/examples.py
  function basic_usage_example (line 31) | async def basic_usage_example():
  function context_manager_example (line 55) | async def context_manager_example():
  class CacheManager (line 71) | class CacheManager(BaseContextManager[Dict[str, Any]]):
    method __init__ (line 76) | def __init__(self, max_size: int = 1000, **kwargs):
    method _async_initialize (line 80) | async def _async_initialize(self) -> Dict[str, Any]:
    method _sync_initialize (line 86) | def _sync_initialize(self) -> Dict[str, Any]:
    method _async_cleanup (line 92) | async def _async_cleanup(self) -> None:
    method _sync_cleanup (line 98) | def _sync_cleanup(self) -> None:
    method health_check (line 104) | async def health_check(self) -> bool:
  function init_redis_connection (line 114) | async def init_redis_connection():
  function cleanup_redis_connection (line 121) | async def cleanup_redis_connection(connection):
  function complete_example (line 128) | async def complete_example():
  function concurrency_example (line 203) | async def concurrency_example():
  function monitoring_example (line 235) | async def monitoring_example():
  function main (line 277) | async def main():

FILE: src/backend/bisheng/core/context/manager.py
  class ApplicationContextManager (line 23) | class ApplicationContextManager:
    method __init__ (line 30) | def __init__(self):
    method initialize (line 37) | async def initialize(self, config: Settings) -> None:
    method _register_default_contexts (line 67) | def _register_default_contexts(self, config: Settings) -> None:
    method _initialize_contexts_in_order (line 100) | async def _initialize_contexts_in_order(self) -> None:
    method _initialize_context_with_dependencies (line 112) | async def _initialize_context_with_dependencies(self, context_name: st...
    method async_get_instance (line 133) | async def async_get_instance(self, name: str) -> T:
    method sync_get_instance (line 138) | def sync_get_instance(self, name: str) -> T:
    method get_context (line 143) | def get_context(self, name: str) -> BaseContextManager:
    method register_context (line 147) | def register_context(
    method unregister_context (line 190) | def unregister_context(self, name: str) -> None:
    method health_check (line 194) | async def health_check(self, include_details: bool = False) -> Union[D...
    method async_close (line 227) | async def async_close(self) -> None:
    method _close_contexts_in_reverse_order (line 249) | async def _close_contexts_in_reverse_order(self) -> None:
    method is_initialized (line 265) | def is_initialized(self) -> bool:
    method get_registry (line 269) | def get_registry(self) -> ContextRegistry:
    method get_context_info (line 277) | def get_context_info(self) -> Dict[str, Any]:
    method sync_context (line 292) | def sync_context(self, *context_names: str):
    method async_context (line 318) | async def async_context(self, *context_names: str):
    method reset_context (line 343) | async def reset_context(self, context_name: str) -> None:
    method restart_context (line 356) | async def restart_context(self, context_name: str) -> None:
    method list_contexts (line 369) | def list_contexts(self, state_filter: Optional[ContextState] = None) -...
  function initialize_app_context (line 391) | async def initialize_app_context(config: Settings) -> None:
  function get_context (line 401) | def get_context(name: str) -> BaseContextManager:
  function async_get_instance (line 416) | async def async_get_instance(name: str) -> Any:
  function sync_get_instance (line 432) | def sync_get_instance(name: str) -> Any:
  function close_app_context (line 448) | async def close_app_context() -> None:
  function register_context (line 453) | def register_context(
  function health_check (line 472) | async def health_check(include_details: bool = False) -> Union[Dict[str,...

FILE: src/backend/bisheng/core/database/alembic/env.py
  function run_migrations_online (line 29) | def run_migrations_online() -> None:

FILE: src/backend/bisheng/core/database/alembic/versions/v2_3_0_beta1_9ba42685e830.py
  function upgrade (line 20) | def upgrade() -> None:
  function downgrade (line 35) | def downgrade() -> None:

FILE: src/backend/bisheng/core/database/connection.py
  class DatabaseConnectionManager (line 17) | class DatabaseConnectionManager:
    method __init__ (line 23) | def __init__(self, database_url: str, **engine_kwargs):
    method _convert_to_async_url (line 32) | def _convert_to_async_url(self, url: str) -> str:
    method _get_default_engine_config (line 40) | def _get_default_engine_config(self) -> Dict[str, Any]:
    method engine (line 67) | def engine(self) -> Engine:
    method async_engine (line 82) | def async_engine(self) -> AsyncEngine:
    method create_session (line 100) | def create_session(self) -> Generator[Session, Any, None]:
    method async_session (line 121) | async def async_session(self):
    method create_db_and_tables (line 142) | async def create_db_and_tables(self) -> None:
    method close (line 156) | async def close(self):
    method close_sync (line 162) | def close_sync(self):
    method __del__ (line 168) | def __del__(self):

FILE: src/backend/bisheng/core/database/manager.py
  class DatabaseManager (line 19) | class DatabaseManager(BaseContextManager[DatabaseConnectionManager]):
    method __init__ (line 28) | def __init__(
    method _async_initialize (line 40) | async def _async_initialize(self) -> DatabaseConnectionManager:
    method _sync_initialize (line 47) | def _sync_initialize(self) -> DatabaseConnectionManager:
    method _async_cleanup (line 54) | async def _async_cleanup(self) -> None:
    method _sync_cleanup (line 59) | def _sync_cleanup(self) -> None:
    method health_check (line 64) | async def health_check(self) -> bool:
    method create_tables_if_not_exists (line 84) | async def create_tables_if_not_exists(self) -> None:
  function get_database_connection (line 98) | async def get_database_connection() -> DatabaseConnectionManager:
  function sync_get_database_connection (line 121) | def sync_get_database_connection() -> DatabaseConnectionManager:
  function get_async_db_session (line 145) | async def get_async_db_session() -> AsyncGenerator[AsyncSession, None]:
  function get_sync_db_session (line 161) | def get_sync_db_session():

FILE: src/backend/bisheng/core/external/http_client/client.py
  class ResponseData (line 11) | class ResponseData(BaseModel):
  class AsyncHttpClient (line 18) | class AsyncHttpClient(object):
    method __init__ (line 19) | def __init__(self, timeout: int = 120, keep_alive: bool = True, limit_...
    method _get_default_headers (line 38) | def _get_default_headers() -> Dict[str, str]:
    method add_custom_header (line 45) | def add_custom_header(self, key: str, value: str) -> None:
    method clear_custom_headers (line 48) | def clear_custom_headers(self) -> None:
    method get_aiohttp_client (line 51) | async def get_aiohttp_client(self, loop=None) -> ClientSession:
    method close_aiohttp_client (line 62) | async def close_aiohttp_client(self) -> None:
    method _execute_request (line 67) | async def _execute_request(
    method get (line 131) | async def get(self, url: str, params: Optional[Dict[str, Union[str, in...
    method post (line 137) | async def post(self, url: str, body: Optional[Union[Dict[str, Any], st...
    method put (line 143) | async def put(self, url: str, body: Optional[Union[Dict[str, Any], str...
    method patch (line 149) | async def patch(self, url: str, body: Optional[Union[Dict[str, Any], s...
    method delete (line 155) | async def delete(self, url: str, params: Optional[Dict[str, Union[str,...
    method stream (line 161) | async def stream(

FILE: src/backend/bisheng/core/external/http_client/http_client_manager.py
  class HttpClientManager (line 9) | class HttpClientManager(BaseContextManager[AsyncHttpClient]):
    method __init__ (line 18) | def __init__(self):
    method _async_initialize (line 21) | async def _async_initialize(self) -> AsyncHttpClient:
    method _sync_initialize (line 27) | def _sync_initialize(self) -> T:
    method _async_cleanup (line 30) | async def _async_cleanup(self) -> None:
    method _sync_cleanup (line 35) | def _sync_cleanup(self) -> None:
  function get_http_client (line 40) | async def get_http_client() -> AsyncHttpClient:

FILE: src/backend/bisheng/core/logger.py
  function trace_id_generator (line 15) | def trace_id_generator() -> str:
  class TraceIdFilter (line 19) | class TraceIdFilter:
    method __init__ (line 20) | def __init__(self, filter_func=None):
    method __call__ (line 23) | def __call__(self, record):
  class InterceptHandler (line 31) | class InterceptHandler(logging.Handler):
    method emit (line 34) | def emit(self, record):
  function set_logger_config (line 51) | def set_logger_config(logger_config: LoggerConf):

FILE: src/backend/bisheng/core/prompts/manager.py
  class PromptManager (line 10) | class PromptManager(BaseContextManager[PromptLoader]):
    method __init__ (line 18) | def __init__(self, **kwargs):
    method _async_initialize (line 21) | async def _async_initialize(self) -> PromptLoader:
    method _sync_initialize (line 28) | def _sync_initialize(self) -> PromptLoader:
    method _async_cleanup (line 35) | async def _async_cleanup(self) -> None:
    method _sync_cleanup (line 39) | def _sync_cleanup(self) -> None:
  function get_prompt_manager (line 44) | async def get_prompt_manager() -> PromptLoader:
  function get_prompt_manager_sync (line 60) | def get_prompt_manager_sync() -> PromptLoader:

FILE: src/backend/bisheng/core/prompts/prompt_loader.py
  class PromptTypeEnum (line 14) | class PromptTypeEnum(str, Enum):
  class ChatPromptSchema (line 22) | class ChatPromptSchema(BaseModel):
  class PromptSchema (line 28) | class PromptSchema(BaseModel):
  class PromptLoader (line 38) | class PromptLoader(object):
    method __init__ (line 39) | def __init__(self):
    method _parse_prompt (line 49) | def _parse_prompt(prompts_data: dict) -> Dict[str, PromptSchema]:
    method _load_all (line 64) | def _load_all(self):
    method get_prompt (line 83) | def get_prompt(self, namespace: str, prompt_name: str) -> PromptSchema:
    method render_prompt (line 95) | def render_prompt(self, namespace: str, prompt_name: str, **kwargs) ->...

FILE: src/backend/bisheng/core/search/elasticsearch/es_connection.py
  class ESConnection (line 6) | class ESConnection:
    method __init__ (line 7) | def __init__(self, es_hosts: str, **kwargs):
    method _create_es_connection (line 14) | def _create_es_connection(self) -> 'AsyncElasticsearch':
    method _create_sync_es_connection (line 21) | def _create_sync_es_connection(self) -> 'Elasticsearch':
    method es_connection (line 28) | def es_connection(self) -> 'AsyncElasticsearch':
    method sync_es_connection (line 34) | def sync_es_connection(self) -> 'Elasticsearch':
    method close (line 39) | async def close(self):
    method sync_close (line 44) | def sync_close(self):

FILE: src/backend/bisheng/core/search/elasticsearch/manager.py
  class EsConnManager (line 13) | class EsConnManager((BaseContextManager[ESConnection])):
    method __init__ (line 16) | def __init__(self, es_hosts: str, name: str = None, **kwargs):
    method _async_initialize (line 25) | async def _async_initialize(self) -> ESConnection:
    method _sync_initialize (line 29) | def _sync_initialize(self) -> ESConnection:
    method _async_cleanup (line 33) | async def _async_cleanup(self) -> None:
    method _sync_cleanup (line 38) | def _sync_cleanup(self) -> None:
  function get_es_connection (line 44) | async def get_es_connection() -> AsyncElasticsearch:
  function get_statistics_es_connection (line 63) | async def get_statistics_es_connection() -> AsyncElasticsearch:
  function get_es_connection_sync (line 84) | def get_es_connection_sync() -> Elasticsearch:
  function get_statistics_es_connection_sync (line 103) | def get_statistics_es_connection_sync() -> Elasticsearch:

FILE: src/backend/bisheng/core/storage/base.py
  class BaseStorage (line 6) | class BaseStorage(ABC):
    method create_bucket (line 10) | async def create_bucket(self, bucket_name: str) -> None:
    method create_bucket_sync (line 15) | def create_bucket_sync(self, bucket_name: str) -> None:
    method check_bucket_exists (line 20) | async def check_bucket_exists(self, bucket_name: str) -> bool:
    method check_bucket_exists_sync (line 25) | def check_bucket_exists_sync(self, bucket_name: str) -> bool:
    method get_all_buckets (line 30) | async def get_all_buckets(self) -> list:
    method get_all_buckets_sync (line 35) | def get_all_buckets_sync(self) -> list:
    method remove_bucket (line 40) | async def remove_bucket(self, bucket_name: str) -> None:
    method remove_bucket_sync (line 45) | def remove_bucket_sync(self, bucket_name: str) -> None:
    method put_object (line 50) | async def put_object(self, bucket_name: str, object_name: str, file: U...
    method put_object_sync (line 56) | def put_object_sync(self, bucket_name: str, object_name: str, file: Un...
    method get_object (line 62) | async def get_object(self, bucket_name: str, object_name: str) -> bytes:
    method get_object_sync (line 67) | def get_object_sync(self, bucket_name: str, object_name: str) -> bytes:
    method object_exists (line 72) | async def object_exists(self, bucket_name: str, object_name: str) -> b...
    method object_exists_sync (line 76) | def object_exists_sync(self, bucket_name: str, object_name: str) -> bool:
    method copy_object (line 81) | async def copy_object(self, source_bucket: str, source_object: str,
    method copy_object_sync (line 87) | def copy_object_sync(self, source_bucket: str, source_object: str,
    method remove_object (line 93) | async def remove_object(self, bucket_name: str, object_name: str) -> N...
    method remove_object_sync (line 98) | def remove_object_sync(self, bucket_name: str, object_name: str) -> None:

FILE: src/backend/bisheng/core/storage/minio/minio_manager.py
  class MinioManager (line 12) | class MinioManager(BaseContextManager[MinioStorage]):
    method __init__ (line 21) | def __init__(
    method _async_initialize (line 31) | async def _async_initialize(self) -> MinioStorage:
    method _sync_initialize (line 37) | def _sync_initialize(self) -> MinioStorage:
    method _sync_cleanup (line 43) | def _sync_cleanup(self) -> None:
    method _async_cleanup (line 48) | async def _async_cleanup(self) -> None:
  function get_minio_storage (line 54) | async def get_minio_storage() -> MinioStorage:
  function get_minio_storage_sync (line 72) | def get_minio_storage_sync() -> MinioStorage:

FILE: src/backend/bisheng/core/storage/minio/minio_storage.py
  class MinioStorage (line 20) | class MinioStorage(BaseStorage, ABC):
    method __init__ (line 23) | def __init__(self, minio_config: MinioConf):
    method _init_bucket_conf (line 45) | def _init_bucket_conf(self):
    method create_bucket (line 82) | async def create_bucket(self, bucket_name: str) -> None:
    method create_bucket_sync (line 86) | def create_bucket_sync(self, bucket_name: str) -> None:
    method check_bucket_exists (line 90) | async def check_bucket_exists(self, bucket_name: str) -> bool:
    method check_bucket_exists_sync (line 93) | def check_bucket_exists_sync(self, bucket_name: str) -> bool:
    method get_all_buckets (line 96) | async def get_all_buckets(self) -> list:
    method get_all_buckets_sync (line 99) | def get_all_buckets_sync(self) -> list:
    method remove_bucket (line 102) | async def remove_bucket(self, bucket_name: str) -> None:
    method remove_bucket_sync (line 106) | def remove_bucket_sync(self, bucket_name: str) -> None:
    method put_object (line 110) | async def put_object(self, *, bucket_name: Optional[str] = None, objec...
    method put_object_sync (line 160) | def put_object_sync(self, *, bucket_name: Optional[str] = None, object...
    method put_object_tmp (line 215) | async def put_object_tmp(self, object_name: str, file: Union[bytes, Bi...
    method put_object_tmp_sync (line 225) | def put_object_tmp_sync(self, object_name: str, file: Union[bytes, Bin...
    method get_object (line 235) | async def get_object(self, bucket_name: Optional[str] = None, object_n...
    method get_object_sync (line 254) | def get_object_sync(self, bucket_name: Optional[str] = None, object_na...
    method object_exists (line 274) | async def object_exists(self, bucket_name: Optional[str] = None, objec...
    method object_exists_sync (line 291) | def object_exists_sync(self, bucket_name: Optional[str] = None, object...
    method copy_object (line 308) | async def copy_object(self, source_bucket: str = None, source_object: ...
    method copy_object_sync (line 327) | def copy_object_sync(self, source_bucket: str = None, source_object: s...
    method remove_object (line 346) | async def remove_object(self, bucket_name: Optional[str] = None, objec...
    method remove_object_sync (line 355) | def remove_object_sync(self, bucket_name: Optional[str] = None, object...
    method get_share_link (line 364) | async def get_share_link(self, object_name, bucket=None, clear_host: b...
    method get_share_link_sync (line 386) | def get_share_link_sync(self, object_name, bucket=None, clear_host: bo...
    method get_minio_share_host (line 408) | def get_minio_share_host(self) -> str:
    method clear_minio_share_host (line 417) | def clear_minio_share_host(self, file_url: str):
    method close (line 426) | async def close(self) -> None:
    method close_sync (line 430) | def close_sync(self) -> None:

FILE: src/backend/bisheng/core/vectorstore/ensemble_retriever.py
  class VectorRetrieverParams (line 18) | class VectorRetrieverParams(BaseModel):
  class RRFMultiVectorRetriever (line 26) | class RRFMultiVectorRetriever(BaseRetriever):
    method __init__ (line 43) | def __init__(self, **data: Any):
    method _get_relevant_documents (line 64) | def _get_relevant_documents(
    method _aget_relevant_documents (line 85) | async def _aget_relevant_documents(
    method _post_process_documents (line 114) | def _post_process_documents(self, documents: Sequence[Document]) -> Li...
    method _filter_by_context_length (line 123) | def _filter_by_context_length(self, documents: List[Document]) -> List...

FILE: src/backend/bisheng/core/vectorstore/multi_retriever.py
  class MultiRetriever (line 10) | class MultiRetriever(BaseRetriever):
    method _get_relevant_documents (line 16) | def _get_relevant_documents(
    method _aget_relevant_documents (line 26) | async def _aget_relevant_documents(
    method parse_doc_with_score (line 42) | def parse_doc_with_score(self, docs_with_score: List[tuple[Document, f...

FILE: src/backend/bisheng/custom/customs.py
  function get_custom_nodes (line 51) | def get_custom_nodes(node_type: str):

FILE: src/backend/bisheng/database/base.py
  function get_count (line 7) | def get_count(session: Session, q: Select) -> int:
  function async_get_count (line 21) | async def async_get_count(session: AsyncSession, q: Select) -> int:
  function uuid_hex (line 35) | def uuid_hex() -> str:

FILE: src/backend/bisheng/database/constants.py
  class MessageCategory (line 10) | class MessageCategory(Enum):

FILE: src/backend/bisheng/database/models/assistant.py
  class AssistantStatus (line 17) | class AssistantStatus(Enum):
  class AssistantBase (line 22) | class AssistantBase(SQLModelSerializable):
  class AssistantLinkBase (line 45) | class AssistantLinkBase(SQLModelSerializable):
  class Assistant (line 57) | class Assistant(AssistantBase, table=True):
  class AssistantLink (line 61) | class AssistantLink(AssistantLinkBase, table=True):
  class AssistantDao (line 65) | class AssistantDao(AssistantBase):
    method create_assistant (line 68) | def create_assistant(cls, data: Assistant) -> Assistant:
    method update_assistant (line 76) | def update_assistant(cls, data: Assistant) -> Assistant:
    method delete_assistant (line 84) | def delete_assistant(cls, data: Assistant) -> Assistant:
    method get_one_assistant (line 93) | def get_one_assistant(cls, assistant_id: str) -> Assistant:
    method aget_one_assistant (line 99) | async def aget_one_assistant(cls, assistant_id: str) -> Assistant:
    method get_assistants_by_ids (line 105) | def get_assistants_by_ids(cls, assistant_ids: List[str]) -> List[Assis...
    method aget_assistants_by_ids (line 113) | async def aget_assistants_by_ids(cls, assistant_ids: List[str]) -> Lis...
    method get_assistant_by_name_user_id (line 122) | def get_assistant_by_name_user_id(cls, name: str, user_id: int) -> Ass...
    method get_assistants (line 130) | def get_assistants(cls, user_id: int, name: str, assistant_ids_extra: ...
    method get_all_online_assistants (line 172) | def get_all_online_assistants(cls, flow_ids: List[str]) -> List[Assist...
    method get_all_assistants (line 183) | def get_all_assistants(cls, name: str, page: int, limit: int, assistan...
    method get_assistants_by_access (line 212) | def get_assistants_by_access(cls, role_id: int, name: str, page_size: ...
    method get_count_by_filters (line 231) | def get_count_by_filters(cls, filters: List) -> int:
    method filter_assistant_by_id (line 238) | def filter_assistant_by_id(cls, assistant_ids: List[str], keywords: st...
  class AssistantLinkDao (line 266) | class AssistantLinkDao(AssistantLink):
    method insert_batch (line 269) | def insert_batch(cls,
    method get_assistant_link (line 289) | async def get_assistant_link(cls, assistant_id: str) -> List[Assistant...
    method update_assistant_tool (line 296) | def update_assistant_tool(cls, assistant_id: str, tool_list: List[int]):
    method update_assistant_flow (line 307) | def update_assistant_flow(cls, assistant_id: str, flow_list: List[str]):
    method update_assistant_knowledge (line 319) | def update_assistant_knowledge(cls, assistant_id: str, knowledge_list:...

FILE: src/backend/bisheng/database/models/audit_log.py
  class SystemId (line 13) | class SystemId(Enum):
  class EventType (line 22) | class EventType(Enum):
  class ObjectType (line 57) | class ObjectType(Enum):
  class AuditLogBase (line 72) | class AuditLogBase(SQLModelSerializable):
  class AuditLog (line 94) | class AuditLog(AuditLogBase, table=True):
  class AuditLogDao (line 99) | class AuditLogDao(AuditLogBase):
    method get_audit_logs (line 102) | async def get_audit_logs(cls, group_ids: List[int], operator_ids: List...
    method insert_audit_logs (line 139) | def insert_audit_logs(cls, audit_logs: List[AuditLog]):
    method ainsert_audit_logs (line 145) | async def ainsert_audit_logs(cls, audit_logs: List[AuditLog]):
    method get_all_operators (line 151) | def get_all_operators(cls, group_ids: List[int]):

FILE: src/backend/bisheng/database/models/component.py
  class ComponentBase (line 11) | class ComponentBase(SQLModelSerializable):
  class Component (line 24) | class Component(ComponentBase, table=True):
  class ComponentDao (line 29) | class ComponentDao(ComponentBase):
    method get_user_components (line 32) | def get_user_components(cls, user_id: int) -> List[Component]:
    method get_component_by_name (line 40) | def get_component_by_name(cls, user_id: int, name: str) -> Component |...
    method insert_component (line 46) | def insert_component(cls, component: Component) -> Component:
    method update_component (line 54) | def update_component(cls, component: Component) -> Component:
    method delete_component (line 62) | def delete_component(cls, component: Component) -> Component:

FILE: src/backend/bisheng/database/models/dataset.py
  class DatasetBase (line 11) | class DatasetBase(SQLModelSerializable):
  class Dataset (line 23) | class Dataset(DatasetBase, table=True):
  class DatasetCreate (line 27) | class DatasetCreate(DatasetBase):
  class DatasetRead (line 31) | class DatasetRead(DatasetBase):
  class DatasetUpdate (line 36) | class DatasetUpdate(DatasetBase):
  class DatasetDao (line 40) | class DatasetDao(DatasetBase):
    method filter_dataset_by_ids (line 43) | def filter_dataset_by_ids(cls,
    method get_count_by_filter (line 61) | def get_count_by_filter(cls, filters: List[Any]) -> int:
    method insert (line 66) | def insert(cls, dataset: DatasetCreate):
    method get_dataset_by_name (line 75) | def get_dataset_by_name(cls, name: str):
    method update (line 80) | def update(cls, data: Dataset):
    method delete (line 88) | def delete(cls, dataset_id: int):

FILE: src/backend/bisheng/database/models/evaluation.py
  class ExecType (line 12) | class ExecType(Enum):
  class EvaluationTaskStatus (line 18) | class EvaluationTaskStatus(Enum):
  class EvaluationBase (line 24) | class EvaluationBase(SQLModelSerializable):
  class Evaluation (line 44) | class Evaluation(EvaluationBase, table=True):
  class EvaluationRead (line 48) | class EvaluationRead(EvaluationBase):
  class EvaluationCreate (line 53) | class EvaluationCreate(EvaluationBase):
  class EvaluationDao (line 57) | class EvaluationDao(EvaluationBase):
    method get_my_evaluations (line 59) | def get_my_evaluations(cls, user_id: int, page: int, limit: int) -> (L...
    method delete_evaluation (line 72) | def delete_evaluation(cls, data: Evaluation) -> Evaluation:
    method get_user_one_evaluation (line 80) | def get_user_one_evaluation(cls, user_id: int, evaluation_id: int) -> ...
    method get_one_evaluation (line 86) | def get_one_evaluation(cls, evaluation_id: int) -> Evaluation:
    method update_evaluation (line 92) | def update_evaluation(cls, evaluation: Evaluation) -> Evaluation:

FILE: src/backend/bisheng/database/models/flow.py
  class FlowStatus (line 26) | class FlowStatus(Enum):
  class FlowType (line 31) | class FlowType(Enum):
  class AppEnum (line 39) | class AppEnum(Enum):
  class UserLinkType (line 45) | class UserLinkType(Enum):
  class FlowBase (line 49) | class FlowBase(SQLModelSerializable):
    method validate_json (line 65) | def validate_json(cls, v):
  class Flow (line 80) | class Flow(FlowBase, table=True):
  class FlowCreate (line 85) | class FlowCreate(FlowBase):
  class FlowRead (line 89) | class FlowRead(FlowBase):
  class FlowReadWithStyle (line 95) | class FlowReadWithStyle(FlowRead):
  class FlowUpdate (line 100) | class FlowUpdate(SQLModelSerializable):
  class FlowDao (line 109) | class FlowDao(FlowBase):
    method create_flow (line 112) | def create_flow(cls, flow_info: Flow, flow_type: Optional[int]) -> Flow:
    method delete_flow (line 152) | def delete_flow(cls, flow_info: Flow) -> Flow:
    method get_flow_by_id (line 164) | def get_flow_by_id(cls, flow_id: str) -> Optional[Flow]:
    method aget_flow_by_id (line 170) | async def aget_flow_by_id(cls, flow_id: str) -> Optional[Flow]:
    method get_flow_by_idstr (line 177) | def get_flow_by_idstr(cls, flow_id: str) -> Optional[Flow]:
    method get_flow_by_ids (line 183) | def get_flow_by_ids(cls, flow_ids: List[str]) -> List[Flow]:
    method aget_flow_by_ids (line 191) | async def aget_flow_by_ids(cls, flow_ids: List[str]) -> List[Flow]:
    method get_flow_by_user (line 200) | def get_flow_by_user(cls, user_id: int) -> List[Flow]:
    method get_flow_by_name (line 206) | def get_flow_by_name(cls, user_id: int, name: str) -> Optional[Flow]:
    method get_flow_list_by_name (line 212) | def get_flow_list_by_name(cls, name: str) -> List[Flow]:
    method get_flow_by_access (line 218) | def get_flow_by_access(cls, role_id: int, name: str, page_size: int,
    method get_count_by_filters (line 236) | def get_count_by_filters(cls, filters) -> int:
    method get_flows (line 242) | def get_flows(cls,
    method count_flows (line 277) | def count_flows(cls,
    method get_all_online_flows (line 303) | def get_all_online_flows(cls,
    method get_user_access_online_flows (line 320) | def get_user_access_online_flows(cls,
    method filter_flows_by_ids (line 348) | def filter_flows_by_ids(cls, flow_ids: List[str], keyword: str = None,
    method update_flow (line 374) | def update_flow(cls, flow: Flow) -> Flow:
    method aupdate_flow (line 382) | async def aupdate_flow(cls, flow: Flow) -> Flow:
    method get_all_apps (line 390) | def get_all_apps(cls,
    method aget_all_apps (line 458) | async def aget_all_apps(cls,
    method get_one_flow_simple (line 544) | async def get_one_flow_simple(cls, flow_id: str) -> Optional[Flow]:
    method get_one_flow_simple_sync (line 566) | def get_one_flow_simple_sync(cls, flow_id: str) -> Optional[Flow]:
    method get_all_app_by_time_range_sync (line 588) | def get_all_app_by_time_range_sync(cls, start_time: datetime, end_time...
    method get_first_app (line 622) | def get_first_app(cls):

FILE: src/backend/bisheng/database/models/flow_version.py
  class FlowVersionBase (line 16) | class FlowVersionBase(SQLModelSerializable):
    method validate_json (line 34) | def validate_json(cls, v):
  class FlowVersion (line 49) | class FlowVersion(FlowVersionBase, table=True):
  class FlowVersionRead (line 53) | class FlowVersionRead(FlowVersionBase):
  class FlowVersionDao (line 57) | class FlowVersionDao(FlowVersionBase):
    method create_version (line 60) | def create_version(cls, version: FlowVersion) -> FlowVersion:
    method update_version (line 71) | def update_version(cls, version: FlowVersion) -> FlowVersion:
    method aupdate_version (line 88) | async def aupdate_version(cls, version: FlowVersion) -> FlowVersion:
    method get_version_by_name (line 105) | def get_version_by_name(cls, flow_id: str, name: str) -> Optional[Flow...
    method get_version_by_id (line 116) | def get_version_by_id(cls, version_id: int, include_delete: bool = Fal...
    method aget_version_by_id (line 127) | async def aget_version_by_id(cls, version_id: int, include_delete: boo...
    method get_version_by_flow (line 139) | def get_version_by_flow(cls, flow_id: str) -> Optional[FlowVersion]:
    method get_list_by_ids (line 150) | def get_list_by_ids(cls, ids: List[int]) -> List[FlowVersion]:
    method get_list_by_flow (line 159) | def get_list_by_flow(cls, flow_id: str) -> List[FlowVersionRead]:
    method count_list_by_flow (line 171) | def count_list_by_flow(cls, flow_id: str, include_delete: bool = False...
    method get_list_by_flow_ids (line 182) | def get_list_by_flow_ids(cls, flow_ids: List[str]) -> List[FlowVersion...
    method delete_flow_version (line 194) | def delete_flow_version(cls, version_id: int) -> None:
    method change_current_version (line 205) | async def change_current_version(cls, flow_id: str, new_version_info: ...

FILE: src/backend/bisheng/database/models/group.py
  class GroupBase (line 14) | class GroupBase(SQLModelSerializable):
  class Group (line 25) | class Group(GroupBase, table=True):
  class GroupRead (line 30) | class GroupRead(GroupBase):
  class GroupUpdate (line 35) | class GroupUpdate(GroupBase):
  class GroupCreate (line 40) | class GroupCreate(GroupBase):
  class GroupDao (line 44) | class GroupDao(GroupBase):
    method get_user_group (line 47) | def get_user_group(cls, group_id: int) -> Group | None:
    method insert_group (line 53) | def insert_group(cls, group: GroupCreate) -> Group:
    method get_all_group (line 62) | def get_all_group(cls) -> list[Group]:
    method get_group_by_ids (line 68) | def get_group_by_ids(cls, ids: List[int]) -> list[Group]:
    method aget_group_by_ids (line 76) | async def aget_group_by_ids(cls, ids: List[int]) -> list[Group]:
    method delete_group (line 85) | def delete_group(cls, group_id: int):
    method update_group (line 91) | def update_group(cls, group: Group) -> Group:
    method update_group_update_user (line 99) | def update_group_update_user(cls, group_id: int, user_id: int):

FILE: src/backend/bisheng/database/models/group_resource.py
  class ResourceTypeEnum (line 12) | class ResourceTypeEnum(Enum):
  class GroupResourceBase (line 21) | class GroupResourceBase(SQLModelSerializable):
  class GroupResource (line 31) | class GroupResource(GroupResourceBase, table=True):
  class GroupResourceRead (line 35) | class GroupResourceRead(GroupResourceBase):
  class GroupResourceUpdate (line 40) | class GroupResourceUpdate(GroupResourceBase):
  class GroupResourceCreate (line 45) | class GroupResourceCreate(GroupResourceBase):
  class GroupResourceDao (line 49) | class GroupResourceDao(GroupResourceBase):
    method insert_group (line 52) | def insert_group(cls, group_resource: GroupResource) -> GroupResource:
    method insert_group_batch (line 60) | def insert_group_batch(cls, group_resources: List[GroupResource]) -> L...
    method ainsert_group_batch (line 67) | async def ainsert_group_batch(cls, group_resources: List[GroupResource...
    method get_group_resource (line 74) | def get_group_resource(cls,
    method aget_group_resources (line 90) | async def aget_group_resources(cls, group_id: int, resource_type: Reso...
    method get_groups_resource (line 100) | async def get_groups_resource(cls,
    method get_resource_group (line 119) | def get_resource_group(cls, resource_type: ResourceTypeEnum, third_id:...
    method aget_resource_group (line 129) | async def aget_resource_group(cls, resource_type: ResourceTypeEnum, th...
    method get_resources_group (line 140) | def get_resources_group(cls, resource_type: ResourceTypeEnum | None, t...
    method delete_group_resource_by_third_id (line 151) | def delete_group_resource_by_third_id(cls, third_id: str, resource_typ...
    method delete_group_resource_by_group_id (line 160) | def delete_group_resource_by_group_id(cls, group_id: int):
    method get_group_all_resource (line 167) | def get_group_all_resource(cls, group_id: int) -> List[GroupResource]:
    method update_group_resource (line 176) | def update_group_resource(cls, group_resources: List[GroupResource]) -...

FILE: src/backend/bisheng/database/models/invite_code.py
  class InviteCodeBase (line 10) | class InviteCodeBase(SQLModelSerializable):
  class InviteCode (line 28) | class InviteCode(InviteCodeBase, table=True):
  class InviteCodeDao (line 32) | class InviteCodeDao(InviteCodeBase):
    method insert_invite_code (line 38) | async def insert_invite_code(cls, invite_code: List[InviteCode]) -> Li...
    method get_user_bind_code (line 45) | async def get_user_bind_code(cls, bind_user: int) -> list[InviteCode]:
    method get_user_all_code (line 56) | async def get_user_all_code(cls, bind_user: int) -> list[InviteCode]:
    method bind_invite_code (line 66) | async def bind_invite_code(cls, user_id: int, code: str) -> bool:
    method use_invite_code (line 81) | async def use_invite_code(cls, user_id: int, code: str) -> bool:
    method revoke_invite_code_used (line 93) | async def revoke_invite_code_used(cls, user_id: int, code: str) -> bool:

FILE: src/backend/bisheng/database/models/mark_app_user.py
  class MarkAppUserBase (line 12) | class MarkAppUserBase(SQLModelSerializable):
  class MarkAppUser (line 24) | class MarkAppUser(MarkAppUserBase, table=True):
  class MarkAppUserDao (line 28) | class MarkAppUserDao(MarkAppUserBase):
    method create_task (line 31) | def create_task(cls, task_info: List[MarkAppUser]) -> List[MarkAppUser]:

FILE: src/backend/bisheng/database/models/mark_record.py
  class MarkRecordStatus (line 13) | class MarkRecordStatus(Enum):
  class MarkRecordBase (line 19) | class MarkRecordBase(SQLModelSerializable):
  class MarkRecord (line 33) | class MarkRecord(MarkRecordBase, table=True):
  class MarkRecordDao (line 37) | class MarkRecordDao(MarkRecordBase):
    method update_record (line 40) | def update_record(cls, record_info: MarkRecord) -> MarkRecord:
    method get_prev_task (line 48) | def get_prev_task(cls, user_id: int, task_id: int):
    method create_record (line 55) | def create_record(cls, record_info: MarkRecord) -> MarkRecord:
    method del_record (line 63) | def del_record(cls, task_id: int):
    method del_task_chat (line 71) | def del_task_chat(cls, task_id: int, session_id: str):
    method get_list_by_taskid (line 79) | def get_list_by_taskid(cls, task_id: int):
    method get_count (line 85) | def get_count(cls, task_id: int):
    method get_record (line 93) | def get_record(cls, task_id: int, session_id: str) -> MarkRecord:
    method filter_records (line 101) | def filter_records(cls, task_id: int, chat_ids: list[str] = None, stat...

FILE: src/backend/bisheng/database/models/mark_task.py
  class MarkTaskStatus (line 13) | class MarkTaskStatus(Enum):
  class MarkTaskBase (line 19) | class MarkTaskBase(SQLModelSerializable):
  class MarkTask (line 32) | class MarkTask(MarkTaskBase, table=True):
  class MarkTaskRead (line 36) | class MarkTaskRead(MarkTaskBase):
  class MarkTaskDao (line 41) | class MarkTaskDao(MarkTaskBase):
    method create_task (line 44) | def create_task(cls, task_info: MarkTask) -> MarkTask:
    method delete_task (line 52) | def delete_task(cls, task_id: int):
    method get_task_byid (line 59) | def get_task_byid(cls, task_id: int) -> MarkTask:
    method get_task (line 65) | def get_task(cls, user_id: int) -> MarkTask:
    method get_task_list_byuid (line 71) | def get_task_list_byuid(cls, user_id: int, task_id: int) -> MarkTask:
    method update_task (line 77) | def update_task(cls, task_id: int, status: int):
    method get_all_task (line 84) | def get_all_task(
    method get_task_list (line 98) | def get_task_list(

FILE: src/backend/bisheng/database/models/message.py
  class LikedType (line 14) | class LikedType(Enum):
  class MessageBase (line 20) | class MessageBase(SQLModelSerializable):
  class ChatMessage (line 49) | class ChatMessage(MessageBase, table=True):
  class ChatMessageRead (line 60) | class ChatMessageRead(MessageBase):
  class ChatMessageQuery (line 64) | class ChatMessageQuery(MessageBase):
  class ChatMessageCreate (line 69) | class ChatMessageCreate(MessageBase):
  class MessageDao (line 73) | class MessageDao(MessageBase):
    method static_msg_liked (line 76) | def static_msg_liked(cls, liked: int, flow_id: str, create_time_begin:...
    method app_list_group_by_chat_id (line 91) | def app_list_group_by_chat_id(
  class ChatMessageDao (line 143) | class ChatMessageDao(MessageBase):
    method get_latest_message_by_chatid (line 146) | def get_latest_message_by_chatid(cls, chat_id: str):
    method aget_latest_message_by_chatid (line 157) | async def aget_latest_message_by_chatid(cls, chat_id: str):
    method get_latest_message_by_chat_ids (line 169) | def get_latest_message_by_chat_ids(cls,
    method get_messages_by_chat_id (line 192) | def get_messages_by_chat_id(cls,
    method aget_messages_by_chat_id (line 204) | async def aget_messages_by_chat_id(cls,
    method get_last_msg_by_flow_id (line 217) | def get_last_msg_by_flow_id(cls, flow_id: List[str], chat_id: List[str]):
    method get_msg_by_chat_id (line 226) | def get_msg_by_chat_id(cls, chat_id: str):
    method get_msg_by_flow (line 232) | def get_msg_by_flow(cls, flow_id: str):
    method get_msg_by_flows (line 240) | def get_msg_by_flows(cls, flow_id: List[str]):
    method delete_by_user_chat_id (line 247) | def delete_by_user_chat_id(cls, user_id: int, chat_id: str):
    method delete_by_message_id (line 261) | def delete_by_message_id(cls, user_id: int, message_id: str):
    method insert_one (line 275) | def insert_one(cls, message: ChatMessage) -> ChatMessage:
    method ainsert_one (line 283) | async def ainsert_one(cls, message: ChatMessage) -> ChatMessage:
    method insert_batch (line 291) | def insert_batch(cls, messages: List[ChatMessage]):
    method get_message_by_id (line 302) | def get_message_by_id(cls, message_id: int) -> Optional[ChatMessage]:
    method aget_message_by_id (line 307) | async def aget_message_by_id(cls, message_id: int) -> Optional[ChatMes...
    method update_message (line 313) | def update_message(cls, message_id: int, user_id: int, message: str):
    method update_message_model (line 321) | def update_message_model(cls, message: ChatMessage):
    method aupdate_message_model (line 329) | async def aupdate_message_model(cls, message: ChatMessage):
    method update_message_copied (line 337) | def update_message_copied(cls, message_id: int, copied: int):
    method update_message_mark (line 345) | def update_message_mark(cls, chat_id: str, status: int):
    method get_all_message_by_chat_ids (line 353) | async def get_all_message_by_chat_ids(cls, chat_ids: List[str]) -> Lis...
    method afilter_message_by_chat_id (line 361) | async def afilter_message_by_chat_id(cls, chat_id: str, flow_id: str, ...

FILE: src/backend/bisheng/database/models/recall_chunk.py
  class RecallBase (line 10) | class RecallBase(SQLModelSerializable):
  class RecallChunk (line 23) | class RecallChunk(RecallBase, table=True):
  class RecallChunkRead (line 27) | class RecallChunkRead(RecallBase):
  class RecallChunkQuery (line 32) | class RecallChunkQuery(SQLModelSerializable):
  class RecallChunkCreate (line 37) | class RecallChunkCreate(RecallBase):

FILE: src/backend/bisheng/database/models/report.py
  class ReportBase (line 10) | class ReportBase(SQLModelSerializable):
  class Report (line 27) | class Report(ReportBase, table=True):
  class ReportRead (line 32) | class ReportRead(ReportBase):
  class RoleUpdate (line 36) | class RoleUpdate(ReportBase):
  class RoleCreate (line 41) | class RoleCreate(ReportBase):

FILE: src/backend/bisheng/database/models/role.py
  class RoleBase (line 14) | class RoleBase(SQLModelSerializable):
  class Role (line 24) | class Role(RoleBase, table=True):
  class RoleRead (line 29) | class RoleRead(RoleBase):
  class RoleUpdate (line 33) | class RoleUpdate(RoleBase):
  class RoleCreate (line 38) | class RoleCreate(RoleBase):
  class RoleDao (line 42) | class RoleDao(RoleBase):
    method get_role_by_groups (line 45) | def get_role_by_groups(cls, group: List[int], keyword: str = None, pag...
    method count_role_by_groups (line 66) | def count_role_by_groups(cls, group: List[int], keyword: str = None) -...
    method insert_role (line 79) | def insert_role(cls, role: RoleCreate):
    method delete_role (line 87) | def delete_role(cls, role_id: int):
    method get_role_by_ids (line 95) | def get_role_by_ids(cls, role_ids: List[int]) -> List[Role]:
    method get_role_by_id (line 100) | def get_role_by_id(cls, role_id: int) -> Role:
    method aget_role_by_id (line 105) | async def aget_role_by_id(cls, role_id: int) -> Role:
    method delete_role_by_group_id (line 111) | def delete_role_by_group_id(cls, group_id: int):

FILE: src/backend/bisheng/database/models/role_access.py
  class RoleAccessBase (line 13) | class RoleAccessBase(SQLModelSerializable):
  class RoleAccess (line 23) | class RoleAccess(RoleAccessBase, table=True):
  class RoleAccessRead (line 27) | class RoleAccessRead(RoleAccessBase):
  class RoleAccessCreate (line 31) | class RoleAccessCreate(RoleAccessBase):
  class WebMenuResource (line 35) | class WebMenuResource(Enum):
  class AccessType (line 49) | class AccessType(Enum):
  class RoleRefresh (line 68) | class RoleRefresh(BaseModel):
  class RoleAccessDao (line 74) | class RoleAccessDao(RoleAccessBase):
    method get_role_access (line 77) | def get_role_access(cls, role_ids: List[int], access_type: AccessType)...
    method aget_role_access (line 86) | async def aget_role_access(cls, role_ids: List[int], access_type: Acce...
    method get_role_access_batch (line 95) | def get_role_access_batch(cls, role_ids: List[int], access_type: List[...
    method aget_role_access_batch (line 103) | async def aget_role_access_batch(cls, role_ids: List[int], access_type...
    method judge_role_access (line 112) | def judge_role_access(cls, role_ids: List[int], third_id: str, access_...
    method ajudge_role_access (line 121) | async def ajudge_role_access(cls, role_ids: List[int], third_id: str, ...
    method find_role_access (line 132) | def find_role_access(cls, role_ids: List[int], third_ids: List[str], a...
    method afind_role_access (line 142) | async def afind_role_access(cls, role_ids: List[int], third_ids: List[...
    method update_role_access_all (line 154) | async def update_role_access_all(cls, role_id: int, access_type: Acces...

FILE: src/backend/bisheng/database/models/session.py
  class SensitiveStatus (line 13) | class SensitiveStatus(Enum):
  class MessageSessionBase (line 18) | class MessageSessionBase(SQLModelSerializable):
  class MessageSession (line 41) | class MessageSession(MessageSessionBase, table=True):
  class MessageSessionDao (line 45) | class MessageSessionDao(MessageSessionBase):
    method insert_one (line 48) | def insert_one(cls, data: MessageSession) -> MessageSession:
    method async_insert_one (line 61) | async def async_insert_one(cls, data: MessageSession) -> MessageSession:
    method delete_session (line 74) | async def delete_session(cls, chat_id: str):
    method get_one (line 81) | def get_one(cls, chat_id: str) -> MessageSession | None:
    method async_get_one (line 87) | async def async_get_one(cls, chat_id: str) -> MessageSession | None:
    method generate_filter_session_statement (line 93) | def generate_filter_session_statement(cls,
    method filter_session (line 135) | def filter_session(cls,
    method afilter_session (line 167) | async def afilter_session(cls,
    method get_statement_results (line 202) | async def get_statement_results(cls, statement, page: int = 0, limit: ...
    method get_statement_count (line 211) | async def get_statement_count(cls, statement) -> int:
    method filter_session_count (line 218) | async def filter_session_count(cls,
    method update_sensitive_status (line 238) | def update_sensitive_status(cls, chat_id: str, sensitive_status: Sensi...
    method add_like_count (line 246) | def add_like_count(cls, chat_id: str, like_count: int):
    method add_dislike_count (line 256) | def add_dislike_count(cls, chat_id: str, dislike_count: int):
    method add_copied_count (line 266) | def add_copied_count(cls, chat_id: str, copied_count: int):
    method update_session_info_by_flow (line 276) | def update_session_info_by_flow(cls, name: str, description: str, logo...

FILE: src/backend/bisheng/database/models/tag.py
  class TagBase (line 12) | class TagBase(SQLModelSerializable):
  class Tag (line 24) | class Tag(TagBase, table=True):
  class TagLinkBase (line 28) | class TagLinkBase(SQLModelSerializable):
  class TagLink (line 42) | class TagLink(TagLinkBase, table=True):
  class TagDao (line 47) | class TagDao(Tag):
    method search_tags (line 50) | def search_tags(cls, keyword: str = None, page: int = 0, limit: int = ...
    method count_tags (line 62) | def count_tags(cls, keyword: str = None) -> int:
    method insert_tag (line 71) | def insert_tag(cls, data: Tag) -> Tag:
    method delete_tag (line 80) | def delete_tag(cls, tag_id: int) -> bool:
    method get_tag_by_name (line 91) | def get_tag_by_name(cls, name: str) -> Tag:
    method get_tag_by_id (line 98) | def get_tag_by_id(cls, tag_id: int) -> Tag:
    method get_tags_by_ids (line 105) | def get_tags_by_ids(cls, tag_ids: List[int]) -> List[Tag]:
    method get_tags_by_resource (line 112) | def get_tags_by_resource(cls, resource_type: ResourceTypeEnum | None, ...
    method get_tags_by_resource_batch (line 136) | def get_tags_by_resource_batch(cls, resource_type: List[ResourceTypeEn...
    method get_resources_by_tags (line 155) | def get_resources_by_tags(cls, tag_ids: List[int], resource_type: Reso...
    method get_resources_by_tags_batch (line 163) | def get_resources_by_tags_batch(cls, tag_ids: List[int], resource_type...
    method insert_tag_link (line 172) | def insert_tag_link(cls, tag_link: TagLink) -> TagLink:
    method get_tag_link (line 181) | def get_tag_link(cls, tag_link_id: int) -> TagLink:
    method delete_tag_link (line 188) | def delete_tag_link(cls, tag_link_id: int) -> bool:
    method delete_resource_tag (line 197) | def delete_resource_tag(cls, tag_id: int, resource_id: str, resource_t...

FILE: src/backend/bisheng/database/models/template.py
  class TemplateSkillBase (line 11) | class TemplateSkillBase(SQLModelSerializable):
  class Template (line 26) | class Template(TemplateSkillBase, table=True):
  class TemplateRead (line 30) | class TemplateRead(TemplateSkillBase):
  class TemplateCreate (line 35) | class TemplateCreate(TemplateSkillBase):
  class TemplateUpdate (line 41) | class TemplateUpdate(SQLModelSerializable):
    method convert_field (line 50) | def convert_field(cls, values: dict) -> dict:

FILE: src/backend/bisheng/database/models/user_group.py
  class UserGroupBase (line 12) | class UserGroupBase(SQLModelSerializable):
  class UserGroup (line 34) | class UserGroup(UserGroupBase, table=True):
  class UserGroupRead (line 38) | class UserGroupRead(UserGroupBase):
  class UserGroupUpdate (line 42) | class UserGroupUpdate(UserGroupBase):
  class UserGroupCreate (line 49) | class UserGroupCreate(UserGroupBase):
  class UserGroupDao (line 53) | class UserGroupDao(UserGroupBase):
    method get_user_group (line 56) | def get_user_group(cls, user_id: int) -> List[UserGroup]:
    method aget_user_group (line 65) | async def aget_user_group(cls, user_id: int) -> List[UserGroup]:
    method get_user_admin_group (line 75) | def get_user_admin_group(cls, user_id: int) -> List[UserGroup]:
    method aget_user_admin_group (line 84) | async def aget_user_admin_group(cls, user_id: int, group_id: int = Non...
    method insert_user_group (line 96) | def insert_user_group(cls, user_group: UserGroupCreate) -> UserGroup:
    method insert_user_group_admin (line 105) | def insert_user_group_admin(cls, user_id: int, group_id: int) -> UserG...
    method delete_user_group (line 117) | def delete_user_group(cls, user_id: int, group_id: int) -> None:
    method delete_user_groups (line 126) | def delete_user_groups(cls, user_id: int, group_ids: List[int]):
    method add_user_groups (line 141) | def add_user_groups(cls, user_id: int, group_ids: List[int]):
    method get_group_user (line 152) | def get_group_user(cls,
    method get_groups_user (line 167) | def get_groups_user(cls,
    method aget_group_users (line 182) | async def aget_group_users(cls,
    method is_users_in_group (line 202) | def is_users_in_group(cls, group_id: int, user_ids: List[int]) -> List...
    method get_groups_admins (line 209) | def get_groups_admins(cls, group_ids: List[int]) -> List[UserGroup]:
    method update_user_groups (line 216) | def update_user_groups(cls, user_groups: List[UserGroup]) -> List[User...
    method add_default_user_group (line 223) | async def add_default_user_group(cls, user_id: int) -> None:
    method delete_group_admins (line 233) | def delete_group_admins(cls, group_id: int, admin_ids: List[int]) -> N...
    method delete_group_all_admin (line 246) | def delete_group_all_admin(cls, group_id: int) -> None:

FILE: src/backend/bisheng/database/models/user_link.py
  class UserLinkBase (line 13) | class UserLinkBase(SQLModelSerializable):
  class UserLink (line 23) | class UserLink(UserLinkBase, table=True):
  class UserLinkDao (line 28) | class UserLinkDao(UserLinkBase):
    method get_user_link (line 30) | def get_user_link(cls, user_id: int, types: list) -> List[UserLink]:
    method add_user_link (line 37) | def add_user_link(cls, user_id: int, type: str, type_detail: str) -> t...
    method delete_user_link (line 67) | def delete_user_link(cls, user_id: int, type: str, type_detail: str) -...

FILE: src/backend/bisheng/database/models/variable_value.py
  class VariableBase (line 13) | class VariableBase(SQLModelSerializable):
    method validate_length (line 28) | def validate_length(cls, v):
    method validate_value (line 39) | def validate_value(cls, v):
  class Variable (line 52) | class Variable(VariableBase, table=True):
  class VariableCreate (line 57) | class VariableCreate(VariableBase):
  class VariableRead (line 61) | class VariableRead(VariableBase):
  class VariableDao (line 65) | class VariableDao(Variable):
    method create_variable (line 68) | def create_variable(cls, variable: Variable) -> Variable:
    method get_variables (line 80) | def get_variables(cls, flow_id: str, node_id: str, variable_name: str,...
    method copy_variables (line 92) | def copy_variables(cls, flow_id: str, old_version_id: int, version_id:...

FILE: src/backend/bisheng/field_typing/__init__.py
  function _import_template_field (line 10) | def _import_template_field():
  function __getattr__ (line 16) | def __getattr__(name: str) -> Any:

FILE: src/backend/bisheng/field_typing/constants.py
  class Object (line 21) | class Object:
  class Data (line 25) | class Data:
  class Prompt (line 29) | class Prompt:

FILE: src/backend/bisheng/field_typing/range_spec.py
  class RangeSpec (line 4) | class RangeSpec(BaseModel):
    method max_must_be_greater_than_min (line 11) | def max_must_be_greater_than_min(cls, values):
    method step_must_be_positive (line 18) | def step_must_be_positive(cls, v):

FILE: src/backend/bisheng/finetune/api/finetune.py
  function create_job (line 24) | async def create_job(*, finetune: FinetuneCreateReq, login_user: UserPay...
  function delete_job (line 36) | async def delete_job(*, job_id: str, login_user: UserPayload = Depends(U...
  function cancel_job (line 44) | async def cancel_job(*, job_id: str, login_user: UserPayload = Depends(U...
  function publish_job (line 52) | async def publish_job(*, job_id: str, login_user: UserPayload = Depends(...
  function cancel_publish_job (line 59) | async def cancel_publish_job(*, job_id: str, login_user: UserPayload = D...
  function get_job (line 67) | async def get_job(*,
  function get_job_info (line 93) | async def get_job_info(*, job_id: str, login_user: UserPayload = Depends...
  function update_job (line 100) | async def update_job(*, req_data: FinetuneChangeModelName,
  function upload_file (line 108) | async def upload_file(*,
  function upload_preset_file (line 125) | async def upload_preset_file(*,
  function get_preset_file (line 157) | async def get_preset_file(*,
  function delete_preset_file (line 167) | async def delete_preset_file(*, file_id: str, login_user: UserPayload = ...
  function get_download_url (line 174) | async def get_download_url(*, file_url: str, login_user: UserPayload = D...
  function get_server_filters (line 181) | async def get_server_filters(*, login_user: UserPayload = Depends(UserPa...
  function get_model_list (line 187) | async def get_model_list(login_user: UserPayload = Depends(UserPayload.g...
  function get_gpu_info (line 195) | async def get_gpu_info(*, login_user: UserPayload = Depends(UserPayload....

FILE: src/backend/bisheng/finetune/api/server.py
  function add_server (line 14) | async def add_server(*, server: ServerCreate):
  function list_server (line 21) | async def list_server():
  function delete_server (line 28) | async def delete_server(*, server_id: int):
  function get_model_deploy (line 34) | async def get_model_deploy(*, deploy_id: int):

FILE: src/backend/bisheng/finetune/domain/models/finetune.py
  class TrainMethod (line 15) | class TrainMethod(Enum):
  class FinetuneStatus (line 21) | class FinetuneStatus(Enum):
  class FinetuneBase (line 34) | class FinetuneBase(SQLModelSerializable):
    method validate_train (line 62) | def validate_train(cls, v: Any):
    method validate_all (line 74) | def validate_all(cls, values: Dict[str, Any]) -> Dict[str, Any]:
  class Finetune (line 87) | class Finetune(FinetuneBase, table=True):
  class FinetuneL
Copy disabled (too large) Download .json
Condensed preview — 3195 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (46,068K chars).
[
  {
    "path": ".drone.yml",
    "chars": 9575,
    "preview": "kind: pipeline # 定义对象类型,还有secret和signature两种类型\ntype: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型\nname: cicd # 定义流水线名称\n\nclo"
  },
  {
    "path": ".gitattributes",
    "chars": 529,
    "preview": "# 默认:自动识别文本,统一用 LF 存库\n#* text=auto eol=lf\n\n# 明确常见文本文件用 LF\n*.py   text eol=lf\n*.sh   text eol=lf\n*.yml  text eol=lf\n*.yam"
  },
  {
    "path": ".github/workflows/base_ci.yml",
    "chars": 4885,
    "preview": "name: BASE_CI\n\non:\n  push:\n    # Sequence of patterns matched against refs/tags\n    tags:\n      - \"base.v*\"\n\nenv:\n  DOCK"
  },
  {
    "path": ".github/workflows/build_linux_only.yml",
    "chars": 2752,
    "preview": "name: Build Linux Binaries (x86_64 & ARM)\n\non:\n  workflow_dispatch:\n  push:\n    tags:\n      - \"build.*\"\n\njobs:\n  build_p"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 6402,
    "preview": "name: CI\n\non:\n  push:\n    # Sequence of patterns matched against refs/tags\n    tags:\n      - \"v*\"\n\nenv:\n  DOCKERHUB_REPO"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 8334,
    "preview": "name: PublishRelease\n\n# 在github上新建release发行版时触发此CICD,主要是把预发布镜像的tag改为正式镜像的tag,并同步到私有镜像仓库\non:\n  release:\n    types: [publi"
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 3112,
    "preview": "name: test_build\n\non:\n  push:\n    # Sequence of patterns matched against refs/tags\n    branches:\n      - \"develop/*\"\n\nen"
  },
  {
    "path": ".gitignore",
    "chars": 3883,
    "preview": "# This is to avoid Opencommit hook from getting pushed\nprepare-commit-msg\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.lo"
  },
  {
    "path": ".gitmodules",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 1708,
    "preview": "exclude: ^scripts|docs|docker|requirements|README.md|test|experimental\nrepos:\n  - repo: https://github.com/PyCQA/flake8."
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5192,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
  },
  {
    "path": "LICENSE",
    "chars": 10758,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 7367,
    "preview": "**Proudly made by Chinese,May we, like the creators of Deepseek and Black Myth: Wukong, bring more wonder and greatness "
  },
  {
    "path": "README_CN.md",
    "chars": 4884,
    "preview": "<img src=\"https://dataelem.com/bs/face.png\" alt=\"Bisheng banner\">\n\n<p align=\"center\">\n    <a href=\"https://dataelem.feis"
  },
  {
    "path": "README_JPN.md",
    "chars": 4985,
    "preview": "以下は、あなたが提供したMarkdownコンテンツの日本語翻訳です。\n\n---\n\n<img src=\"https://dataelem.com/bs/face.png\" alt=\"Bisheng banner\">\n\n<p align=\"ce"
  },
  {
    "path": "SECURITY.md",
    "chars": 1698,
    "preview": "# Security Policy\n\n## Reporting Security Issues\n\nWe take the security of our project seriously. If you believe you have "
  },
  {
    "path": "docker/bisheng/config/config.yaml",
    "chars": 3531,
    "preview": "# 数据库配置, 当前加密串的密码是1234,\n# 密码加密参考 https://dataelem.feishu.cn/wiki/BSCcwKd4Yiot3IkOEC8cxGW7nPc#Gxitd1xEeof1TzxdhINcGS6JnXd"
  },
  {
    "path": "docker/bisheng/entrypoint.sh",
    "chars": 1786,
    "preview": "#!/bin/bash\nset -xe\n\nexport PYTHONPATH=\"./\"\n\nstart_mode=${1:-api}\n\nstart_knowledge(){\n  # 知识库解析的celery worker\n    celery"
  },
  {
    "path": "docker/bisheng-ft/config.yaml",
    "chars": 105,
    "preview": "# Celery 的broker配置。存储ft指令执行结果。\n# 密码加密规则和backend一致, 暂不支持集群redis\nredis_url: \"redis://bisheng-redis:6379/5\"\n"
  },
  {
    "path": "docker/bisheng-uns/config.yaml",
    "chars": 2254,
    "preview": "# 可根据loguru的文档配置不同 handlers\nlogger_conf:\n  # 默认输出到控制台的日志级别, 大于等于此级别都会输出\n  level: DEBUG\n  # 默认输出格式\n  format: '[{time:YYYY"
  },
  {
    "path": "docker/docker-compose-ft.yml",
    "chars": 1010,
    "preview": "services:\n  ft_server:\n    container_name: bisheng-ft-server\n    image: dataelement/bisheng-ft:v0.5.0\n    shm_size: \"4g\""
  },
  {
    "path": "docker/docker-compose-office.yml",
    "chars": 392,
    "preview": "services:\n  office:\n    container_name: bisheng-office\n    image: onlyoffice/documentserver:7.1.1\n    ports:\n      - \"87"
  },
  {
    "path": "docker/docker-compose-uns.yml",
    "chars": 630,
    "preview": "services:\n  bisheng-unstructured:\n    container_name: bisheng-unstructured\n    image: dataelement/bisheng-unstructured:v"
  },
  {
    "path": "docker/docker-compose.yml",
    "chars": 6325,
    "preview": "services:\n  mysql:\n    container_name: bisheng-mysql\n    image: mysql:8.0\n    \n    ports:\n      - \"3306:3306\"\n    enviro"
  },
  {
    "path": "docker/mysql/conf/my.cnf",
    "chars": 375,
    "preview": "[client]\ndefault-character-set=utf8mb4\n\n[mysql]\ndefault-character-set=utf8mb4\n\n[mysqld]\ninit_connect='SET collation_conn"
  },
  {
    "path": "docker/nginx/conf.d/default.conf",
    "chars": 1696,
    "preview": "\n# 在http区域内一定要添加下面配置, 支持websocket\nmap $http_upgrade $connection_upgrade {\n\tdefault upgrade;\n\t'' close;\n}\n\n\n\nserver {\n\tgz"
  },
  {
    "path": "docker/nginx/conf.d/websocket.conf",
    "chars": 654,
    "preview": "\n# 在http区域内一定要添加下面配置, 支持websocket\nmap $http_upgrade $connection_upgrade {\n\tdefault upgrade;\n\t'' close;\n}\n\nserver {\n\tgzip"
  },
  {
    "path": "docker/nginx/nginx.conf",
    "chars": 647,
    "preview": "\nuser  nginx;\nworker_processes  auto;\n\nerror_log  /var/log/nginx/error.log notice;\npid        /var/run/nginx.pid;\n\n\neven"
  },
  {
    "path": "docker/office/bisheng/all.js",
    "chars": 16283,
    "preview": "(function (window, undefined) {\n  let selectText = ''\n\n  window.Asc.plugin.init = function (e) {\n    selectText = e\n  }\n"
  },
  {
    "path": "docker/office/bisheng/bisheng.js",
    "chars": 479,
    "preview": "(function () {\n    window.Asc.plugin.init = function (e) {}\n    window.Asc.plugin.event_onClick = function () {}\n    win"
  },
  {
    "path": "docker/office/bisheng/config.json",
    "chars": 731,
    "preview": "{\n  \"name\": \"文档自动化\",\n  \"guid\": \"asc.{D2A0F3BE-CC8D-4956-BCD9-6CBEA6E8960E}\",\n  \"variations\": [\n    {\n      \"description\""
  },
  {
    "path": "docker/office/bisheng/index.html",
    "chars": 307,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n   "
  },
  {
    "path": "docker/redis/redis.conf",
    "chars": 106528,
    "preview": "# Redis configuration file example.\n#\n# Note that in order to read the configuration file, Redis must be\n# started with "
  },
  {
    "path": "src/backend/Dockerfile",
    "chars": 533,
    "preview": "FROM dataelement/bisheng-backend:base.v8\n\nWORKDIR /app\n\nCOPY ./ ./\n\n# 生成并安装依赖\nRUN uv pip compile pyproject.toml --upgrad"
  },
  {
    "path": "src/backend/README.md",
    "chars": 44,
    "preview": "# 毕昇后端代码\n\n* Dockerfile 使用 uv 进行 Python 依赖管理\n"
  },
  {
    "path": "src/backend/alembic.ini",
    "chars": 4786,
    "preview": "# A generic, single database configuration.\n\n[alembic]\n# path to migration scripts.\n# this is typically a path given in "
  },
  {
    "path": "src/backend/base.Dockerfile",
    "chars": 1732,
    "preview": "FROM python:3.10-slim\n\nARG PANDOC_ARCH=amd64\nENV PANDOC_ARCH=$PANDOC_ARCH\nENV PATH=\"${PATH}:/root/.local/bin\"\n\nWORKDIR /"
  },
  {
    "path": "src/backend/bisheng/.gitignore",
    "chars": 11,
    "preview": "config.yaml"
  },
  {
    "path": "src/backend/bisheng/__init__.py",
    "chars": 542,
    "preview": "from importlib import metadata\n\nfrom bisheng.core.cache import cache_manager\nfrom bisheng.interface.custom.custom_compon"
  },
  {
    "path": "src/backend/bisheng/api/__init__.py",
    "chars": 86,
    "preview": "from bisheng.api.router import router, router_rpc\n\n__all__ = ['router', 'router_rpc']\n"
  },
  {
    "path": "src/backend/bisheng/api/router.py",
    "chars": 2872,
    "preview": "# Router for base api\nfrom fastapi import APIRouter\n\nfrom bisheng.api.v1 import (assistant_router, audit_router, chat_ro"
  },
  {
    "path": "src/backend/bisheng/api/services/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/api/services/assistant.py",
    "chars": 23784,
    "preview": "from datetime import datetime\nfrom typing import Any, List, Optional, Union\n\nfrom fastapi import Request\nfrom loguru imp"
  },
  {
    "path": "src/backend/bisheng/api/services/assistant_agent.py",
    "chars": 20846,
    "preview": "import json\nimport os\nimport time\nimport uuid\nfrom typing import Any, Dict, List\n\nfrom langchain_core.callbacks import C"
  },
  {
    "path": "src/backend/bisheng/api/services/assistant_base.py",
    "chars": 1399,
    "preview": "import os\n\nfrom tiktoken.load import load_tiktoken_bpe\nfrom tiktoken.core import Encoding as TikTokenEncoding\n\n\nclass As"
  },
  {
    "path": "src/backend/bisheng/api/services/audit_log.py",
    "chars": 39322,
    "preview": "import asyncio\nimport csv\nfrom datetime import datetime\nfrom tempfile import NamedTemporaryFile\nfrom typing import Any, "
  },
  {
    "path": "src/backend/bisheng/api/services/base.py",
    "chars": 2070,
    "preview": "from bisheng.core.cache import InMemoryCache\nfrom bisheng.core.cache.redis_manager import get_redis_client_sync, get_red"
  },
  {
    "path": "src/backend/bisheng/api/services/chat_imp.py",
    "chars": 5000,
    "preview": "import asyncio\nimport json\n# Pengaturan websockets Log level is NONE\nimport logging\nfrom collections import defaultdict\n"
  },
  {
    "path": "src/backend/bisheng/api/services/component.py",
    "chars": 1859,
    "preview": "from typing import List\n\nfrom bisheng.api.v1.schemas import UnifiedResponseModel, resp_200\nfrom bisheng.common.dependenc"
  },
  {
    "path": "src/backend/bisheng/api/services/dataset_service.py",
    "chars": 3162,
    "preview": "from typing import Dict, List, Optional\n\nfrom fastapi import HTTPException\n\nfrom bisheng.api.services.base import BaseSe"
  },
  {
    "path": "src/backend/bisheng/api/services/etl4lm_loader.py",
    "chars": 12116,
    "preview": "# flake8: noqa\n\"\"\"Loads PDF with semantic splilter.\"\"\"\nimport base64\nimport logging\nimport os\nfrom typing import List\nfr"
  },
  {
    "path": "src/backend/bisheng/api/services/evaluation.py",
    "chars": 19102,
    "preview": "import asyncio\nimport io\nimport json\nimport os\nfrom collections import defaultdict\nfrom copy import deepcopy\nfrom io imp"
  },
  {
    "path": "src/backend/bisheng/api/services/flow.py",
    "chars": 21778,
    "preview": "import asyncio\nimport copy\nfrom typing import List, Dict, AsyncGenerator, Optional, Union\n\nfrom fastapi import Request\nf"
  },
  {
    "path": "src/backend/bisheng/api/services/invite_code/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/api/services/invite_code/code_validator.py",
    "chars": 1977,
    "preview": "import random\nimport string\n\n\nclass VoucherGenerator:\n    def __init__(self, length=10):\n        self.length = length\n  "
  },
  {
    "path": "src/backend/bisheng/api/services/invite_code/invite_code.py",
    "chars": 4084,
    "preview": "from loguru import logger\n\nfrom bisheng.api.services.invite_code.code_validator import VoucherGenerator\nfrom bisheng.com"
  },
  {
    "path": "src/backend/bisheng/api/services/knowledge.py",
    "chars": 53849,
    "preview": "import json\nimport math\nimport os\nfrom datetime import datetime\nfrom typing import Any, Dict, List\n\nfrom fastapi import "
  },
  {
    "path": "src/backend/bisheng/api/services/knowledge_imp.py",
    "chars": 63839,
    "preview": "import asyncio\nimport json\nimport os\nimport re\nimport time\nfrom pathlib import Path\nfrom typing import Any, Dict, List, "
  },
  {
    "path": "src/backend/bisheng/api/services/libreoffice_converter.py",
    "chars": 7236,
    "preview": "import os\nimport shutil  # For checking if the executable is in PATH\nimport subprocess\nimport tempfile\n\nfrom loguru impo"
  },
  {
    "path": "src/backend/bisheng/api/services/md_from_docx.py",
    "chars": 5642,
    "preview": "import os\nfrom pathlib import Path\nfrom uuid import uuid4\n\nimport pypandoc\nfrom loguru import logger\n\nfrom bisheng.api.s"
  },
  {
    "path": "src/backend/bisheng/api/services/md_from_excel.py",
    "chars": 15675,
    "preview": "import math\nimport os\nfrom typing import List\nfrom uuid import uuid4\n\nimport openpyxl\nimport pandas as pd\nfrom loguru im"
  },
  {
    "path": "src/backend/bisheng/api/services/md_from_html.py",
    "chars": 32220,
    "preview": "import requests\nfrom bs4 import BeautifulSoup, Comment\nfrom markdownify import markdownify as md\nimport os\nimport re\nimp"
  },
  {
    "path": "src/backend/bisheng/api/services/md_from_pdf.py",
    "chars": 5923,
    "preview": "import os\nimport threading\nfrom uuid import uuid4\n\nimport fitz\nfrom loguru import logger\n\npymu_lock = threading.Lock()\n\n"
  },
  {
    "path": "src/backend/bisheng/api/services/md_from_pptx.py",
    "chars": 1389,
    "preview": "from bisheng.pptx2md import convert, ConversionConfig\nfrom pathlib import Path\nfrom uuid import uuid4\n\n\ndef parser_pptx2"
  },
  {
    "path": "src/backend/bisheng/api/services/md_post_processing.py",
    "chars": 7085,
    "preview": "import html\nimport os\nimport re\n\nfrom bs4 import BeautifulSoup\n\n\ndef post_processing(file_path, retain_images=True):\n   "
  },
  {
    "path": "src/backend/bisheng/api/services/patch_130.py",
    "chars": 4795,
    "preview": "import os\n\nfrom langchain_core.documents import Document\n\nfrom bisheng.api.services.md_from_docx import handler as docx_"
  },
  {
    "path": "src/backend/bisheng/api/services/role_group_service.py",
    "chars": 19840,
    "preview": "import asyncio\nimport json\nfrom datetime import datetime\nfrom typing import List, Any, Dict, Optional\n\nfrom fastapi impo"
  },
  {
    "path": "src/backend/bisheng/api/services/tag.py",
    "chars": 6416,
    "preview": "import json\nfrom typing import List\n\nfrom fastapi import Request\nfrom loguru import logger\n\nfrom bisheng.common.dependen"
  },
  {
    "path": "src/backend/bisheng/api/services/tiktoken_file/cl100k_base.tiktoken",
    "chars": 1681126,
    "preview": "IQ== 0\nIg== 1\nIw== 2\nJA== 3\nJQ== 4\nJg== 5\nJw== 6\nKA== 7\nKQ== 8\nKg== 9\nKw== 10\nLA== 11\nLQ== 12\nLg== 13\nLw== 14\nMA== 15\nMQ"
  },
  {
    "path": "src/backend/bisheng/api/services/utils.py",
    "chars": 1582,
    "preview": "from bisheng.template.field.base import TemplateField\nfrom bisheng.template.template.base import Template\nfrom pydantic "
  },
  {
    "path": "src/backend/bisheng/api/services/workflow.py",
    "chars": 20700,
    "preview": "from datetime import datetime\nfrom typing import Dict, Optional\n\nfrom fastapi.encoders import jsonable_encoder\nfrom lang"
  },
  {
    "path": "src/backend/bisheng/api/services/workstation/__init__.py",
    "chars": 108,
    "preview": "from .workstation import WorkStationService, WorkstationMessage, WorkstationConversation, SSECallbackClient\n"
  },
  {
    "path": "src/backend/bisheng/api/services/workstation/workstation.py",
    "chars": 14894,
    "preview": "import asyncio\nimport json\nfrom datetime import datetime\nfrom typing import Optional, Any\n\nfrom fastapi import Backgroun"
  },
  {
    "path": "src/backend/bisheng/api/utils.py",
    "chars": 15841,
    "preview": "import hashlib\nfrom pathlib import Path\n\nimport aiohttp\nfrom loguru import logger\nfrom platformdirs import user_cache_di"
  },
  {
    "path": "src/backend/bisheng/api/v1/__init__.py",
    "chars": 1589,
    "preview": "from bisheng.api.v1.assistant import router as assistant_router\nfrom bisheng.api.v1.audit import router as audit_router\n"
  },
  {
    "path": "src/backend/bisheng/api/v1/assistant.py",
    "chars": 8113,
    "preview": "from typing import List, Optional, Union\n\nfrom fastapi import (APIRouter, Body, Depends, HTTPException, Query, Request, "
  },
  {
    "path": "src/backend/bisheng/api/v1/audit.py",
    "chars": 6470,
    "preview": "from datetime import datetime\nfrom typing import Optional, List\n\nfrom fastapi import APIRouter, Query, Depends\n\nfrom bis"
  },
  {
    "path": "src/backend/bisheng/api/v1/base.py",
    "chars": 4535,
    "preview": "from bisheng.interface.utils import extract_input_variables_from_prompt\nfrom bisheng.template.frontend_node.base import "
  },
  {
    "path": "src/backend/bisheng/api/v1/callback.py",
    "chars": 27260,
    "preview": "import asyncio\nimport copy\nimport json\nfrom queue import Queue\nfrom typing import Any, Dict, List, Union\n\nfrom fastapi i"
  },
  {
    "path": "src/backend/bisheng/api/v1/chat.py",
    "chars": 32787,
    "preview": "import asyncio\nimport json\nfrom typing import List, Optional, Union\nfrom uuid import UUID, uuid4\n\nfrom fastapi import (A"
  },
  {
    "path": "src/backend/bisheng/api/v1/component.py",
    "chars": 3690,
    "preview": "from fastapi import APIRouter, Body, Depends\n\nfrom bisheng.api.services.component import ComponentService\nfrom bisheng.a"
  },
  {
    "path": "src/backend/bisheng/api/v1/dataset.py",
    "chars": 1561,
    "preview": "from typing import List\n\nfrom fastapi import APIRouter, Depends, Request\n\nfrom bisheng.api.services.dataset_service impo"
  },
  {
    "path": "src/backend/bisheng/api/v1/endpoints.py",
    "chars": 18416,
    "preview": "import copy\nimport json\nimport time\nfrom typing import Annotated, List, Optional, Union\nfrom uuid import UUID\n\nimport ya"
  },
  {
    "path": "src/backend/bisheng/api/v1/evaluation.py",
    "chars": 4535,
    "preview": "import io\nfrom typing import Optional\n\nfrom datasets import Dataset\nfrom fastapi import APIRouter, Depends, Query, Uploa"
  },
  {
    "path": "src/backend/bisheng/api/v1/flows.py",
    "chars": 9414,
    "preview": "import json\nfrom typing import Any, Union\n\nfrom fastapi import APIRouter, Depends, HTTPException, Query, Request\nfrom lo"
  },
  {
    "path": "src/backend/bisheng/api/v1/invite_code.py",
    "chars": 1963,
    "preview": "from fastapi import APIRouter, Depends, Body, Request\nfrom loguru import logger\n\nfrom bisheng.api.services.invite_code.i"
  },
  {
    "path": "src/backend/bisheng/api/v1/mark_task.py",
    "chars": 9278,
    "preview": "from collections import deque\nfrom typing import Optional\n\nfrom fastapi import APIRouter, Depends, Request\nfrom loguru i"
  },
  {
    "path": "src/backend/bisheng/api/v1/report.py",
    "chars": 3091,
    "preview": "from fastapi import APIRouter, HTTPException\nfrom loguru import logger\nfrom sqlalchemy import or_\nfrom sqlmodel import s"
  },
  {
    "path": "src/backend/bisheng/api/v1/schema/base_schema.py",
    "chars": 209,
    "preview": "from typing import Generic, List, TypeVar\n\nfrom pydantic import BaseModel\n\n# Create generic variables\nDataT = TypeVar('D"
  },
  {
    "path": "src/backend/bisheng/api/v1/schema/chat_schema.py",
    "chars": 2996,
    "preview": "import json\nfrom datetime import datetime\nfrom typing import Any, Dict, List, Optional\n\nfrom pydantic import BaseModel, "
  },
  {
    "path": "src/backend/bisheng/api/v1/schema/dataset_param.py",
    "chars": 216,
    "preview": "from ast import List\nfrom typing import Optional\n\nfrom pydantic import BaseModel\n\n\nclass CreateDatasetParam(BaseModel):\n"
  },
  {
    "path": "src/backend/bisheng/api/v1/schema/knowledge.py",
    "chars": 302,
    "preview": "from typing import Optional\n\nfrom bisheng.knowledge.domain.models.knowledge_file import KnowledgeFileBase\nfrom pydantic "
  },
  {
    "path": "src/backend/bisheng/api/v1/schema/mark_schema.py",
    "chars": 609,
    "preview": "from typing import List, Optional, Any\n\nfrom pydantic import BaseModel, Field, field_validator\n\n\nclass MarkTaskCreate(Ba"
  },
  {
    "path": "src/backend/bisheng/api/v1/schema/workflow.py",
    "chars": 3485,
    "preview": "from enum import Enum\nfrom typing import Optional, Any, List\n\nfrom pydantic import BaseModel, Field, field_validator\n\n\nc"
  },
  {
    "path": "src/backend/bisheng/api/v1/schemas.py",
    "chars": 20731,
    "preview": "from datetime import datetime\nfrom enum import Enum\nfrom typing import Any, Dict, Generic, List, Optional, TypeVar, Unio"
  },
  {
    "path": "src/backend/bisheng/api/v1/skillcenter.py",
    "chars": 4178,
    "preview": "from typing import Optional\n\nfrom fastapi import APIRouter, HTTPException, Depends\nfrom sqlmodel import select\n\nfrom bis"
  },
  {
    "path": "src/backend/bisheng/api/v1/tag.py",
    "chars": 3590,
    "preview": "from typing import List\n\nfrom fastapi import APIRouter, Request, Depends, Query, Body\n\nfrom bisheng.api.services.tag imp"
  },
  {
    "path": "src/backend/bisheng/api/v1/usergroup.py",
    "chars": 6984,
    "preview": "# build router\nfrom typing import Annotated, List, Optional\n\nfrom fastapi import APIRouter, Body, Depends, Query, Reques"
  },
  {
    "path": "src/backend/bisheng/api/v1/validate.py",
    "chars": 4212,
    "preview": "from bisheng.api.v1.base import (Code, CodeValidationResponse, PromptValidationResponse,\n                               "
  },
  {
    "path": "src/backend/bisheng/api/v1/variable.py",
    "chars": 3529,
    "preview": "from typing import List, Optional\n\nfrom loguru import logger\nfrom fastapi import APIRouter, HTTPException\nfrom sqlmodel "
  },
  {
    "path": "src/backend/bisheng/api/v1/workflow.py",
    "chars": 13354,
    "preview": "import time\nfrom typing import Optional, Union\n\nfrom fastapi import APIRouter, Body, Depends, Query, WebSocket, WebSocke"
  },
  {
    "path": "src/backend/bisheng/api/v1/workstation.py",
    "chars": 29284,
    "preview": "import asyncio\nimport base64\nimport json\nimport time\nfrom datetime import datetime\nfrom pathlib import Path\nfrom typing "
  },
  {
    "path": "src/backend/bisheng/chat/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/chat/client.py",
    "chars": 17763,
    "preview": "import json\nimport time\nfrom queue import Queue\nfrom typing import Dict, Callable, List\n\nfrom fastapi import WebSocket, "
  },
  {
    "path": "src/backend/bisheng/chat/clients/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/chat/clients/base.py",
    "chars": 5034,
    "preview": "import json\nfrom abc import abstractmethod, ABC\nfrom typing import Dict, Callable\n\nfrom fastapi import WebSocket, Reques"
  },
  {
    "path": "src/backend/bisheng/chat/clients/workflow_client.py",
    "chars": 10271,
    "preview": "import asyncio\nimport json\nfrom typing import Dict, Optional\n\nfrom fastapi import Request, WebSocket\nfrom loguru import "
  },
  {
    "path": "src/backend/bisheng/chat/config.py",
    "chars": 45,
    "preview": "class ChatConfig:\n    streaming: bool = True\n"
  },
  {
    "path": "src/backend/bisheng/chat/handlers.py",
    "chars": 23147,
    "preview": "import ast\nimport json\nimport time\nfrom queue import Queue\nfrom typing import Dict\n\nfrom langchain.chains.llm import LLM"
  },
  {
    "path": "src/backend/bisheng/chat/manager.py",
    "chars": 35001,
    "preview": "import asyncio\nimport concurrent.futures\nimport json\nimport time\nfrom collections import defaultdict\nfrom queue import Q"
  },
  {
    "path": "src/backend/bisheng/chat/types.py",
    "chars": 483,
    "preview": "from enum import Enum\n\n\n# clientBusiness Type\nclass WorkType(Enum):\n    # Skills Conversation Business\n    FLOW = 'flow'"
  },
  {
    "path": "src/backend/bisheng/chat/utils.py",
    "chars": 10771,
    "preview": "import ast\nimport json\nimport re\nfrom enum import Enum\nfrom typing import Dict, List\nfrom urllib.parse import unquote, u"
  },
  {
    "path": "src/backend/bisheng/chat_session/README.md",
    "chars": 6,
    "preview": "# 会话模块"
  },
  {
    "path": "src/backend/bisheng/chat_session/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/chat_session/api/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/chat_session/api/router.py",
    "chars": 3287,
    "preview": "from typing import Optional, Literal\n\nfrom fastapi import APIRouter, Depends, Body\n\nfrom bisheng.common.constants.enums."
  },
  {
    "path": "src/backend/bisheng/chat_session/domain/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/chat_session/domain/chat.py",
    "chars": 1385,
    "preview": "from typing import Optional, List\n\nfrom bisheng.api.v1.schema.chat_schema import ChatMessageHistoryResponse\nfrom bisheng"
  },
  {
    "path": "src/backend/bisheng/common/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/constants/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/constants/enums/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/constants/enums/telemetry.py",
    "chars": 2011,
    "preview": "from enum import Enum\n\n\nclass StatusEnum(str, Enum):\n    SUCCESS = 'success'\n    FAILED = 'failed'\n\n\n# Generalized appli"
  },
  {
    "path": "src/backend/bisheng/common/constants/vectorstore_metadata.py",
    "chars": 1426,
    "preview": "from bisheng.common.schemas.rag_schema import RagMetadataFieldSchema\n\nKNOWLEDGE_RAG_METADATA_SCHEMA = [\n    RagMetadataF"
  },
  {
    "path": "src/backend/bisheng/common/dependencies/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/dependencies/core_deps.py",
    "chars": 734,
    "preview": "from typing import Generator, Any, AsyncGenerator\n\nfrom sqlmodel.ext.asyncio.session import AsyncSession, Session\n\n\n# db"
  },
  {
    "path": "src/backend/bisheng/common/dependencies/user_deps.py",
    "chars": 97,
    "preview": "from bisheng.user.domain.services.auth import LoginUser\n\n\nclass UserPayload(LoginUser):\n    pass\n"
  },
  {
    "path": "src/backend/bisheng/common/errcode/README.md",
    "chars": 9489,
    "preview": "# Bisheng API 错误码说明文档\n\n## 错误码结构说明\n\n错误码前三位代表具体功能模块,后两位表示模块内部具体的报错。例如:10001\n\n## 基础错误码 (base.py)\n\n| 错误码 | 错误信息   | 说明      "
  },
  {
    "path": "src/backend/bisheng/common/errcode/__init__.py",
    "chars": 31,
    "preview": "from .base import BaseErrorCode"
  },
  {
    "path": "src/backend/bisheng/common/errcode/assistant.py",
    "chars": 1536,
    "preview": "from .base import BaseErrorCode\n\n\n# Component Modules Return error code, business code104\nclass AssistantNotExistsError("
  },
  {
    "path": "src/backend/bisheng/common/errcode/base.py",
    "chars": 3699,
    "preview": "import json\n\nfrom fastapi import WebSocket\nfrom fastapi.exceptions import HTTPException\n\nfrom bisheng.common.schemas.api"
  },
  {
    "path": "src/backend/bisheng/common/errcode/chat.py",
    "chars": 1429,
    "preview": "# Chat Related return error codes 130What/the beginning?\nfrom .base import BaseErrorCode\n\n\n# This skill has been deleted"
  },
  {
    "path": "src/backend/bisheng/common/errcode/component.py",
    "chars": 299,
    "preview": "from .base import BaseErrorCode\n\n\n# Component Modules Return error code, business code103\nclass ComponentExistError(Base"
  },
  {
    "path": "src/backend/bisheng/common/errcode/dataset.py",
    "chars": 231,
    "preview": "from bisheng.common.errcode import BaseErrorCode\n\n\nclass DatasetNameExistsError(BaseErrorCode):\n    \"\"\"Raised when a dat"
  },
  {
    "path": "src/backend/bisheng/common/errcode/finetune.py",
    "chars": 1635,
    "preview": "from .base import BaseErrorCode\n\n\n# finetuneTraining Module Return error code, business code101\nclass CreateFinetuneErro"
  },
  {
    "path": "src/backend/bisheng/common/errcode/flow.py",
    "chars": 2246,
    "preview": "from .base import BaseErrorCode\n\n\n# Skill service related return error code, function module code:105\nclass NotFoundVers"
  },
  {
    "path": "src/backend/bisheng/common/errcode/http_error.py",
    "chars": 324,
    "preview": "from .base import BaseErrorCode\n\n\nclass UnAuthorizedError(BaseErrorCode):\n    Code: int = 403\n    Msg: str = 'No permiss"
  },
  {
    "path": "src/backend/bisheng/common/errcode/knowledge.py",
    "chars": 4571,
    "preview": "from .base import BaseErrorCode\n\n\n#  Return error code related to the knowledge base module, function module code:109\ncl"
  },
  {
    "path": "src/backend/bisheng/common/errcode/linsight.py",
    "chars": 3843,
    "preview": "from bisheng.common.errcode.base import BaseErrorCode\n\n\nclass SopFileError(BaseErrorCode):\n    Code: int = 11010\n    Msg"
  },
  {
    "path": "src/backend/bisheng/common/errcode/llm.py",
    "chars": 638,
    "preview": "from .base import BaseErrorCode\n\n\n#  Model management module related return error code, function module code:108\nclass S"
  },
  {
    "path": "src/backend/bisheng/common/errcode/model_deploy.py",
    "chars": 199,
    "preview": "from .base import BaseErrorCode\n\n\n# RTModel Deployment Module Return error code, business code102\nclass NotFoundModelErr"
  },
  {
    "path": "src/backend/bisheng/common/errcode/qa.py",
    "chars": 264,
    "preview": "# QAModule-related return error codes 140 What/the beginning?\nfrom .base import BaseErrorCode\n\n\n# Processing in the back"
  },
  {
    "path": "src/backend/bisheng/common/errcode/server.py",
    "chars": 5605,
    "preview": "from .base import BaseErrorCode\n\n\n# RTService-related return error code, function module code:100\nclass NoSftServerError"
  },
  {
    "path": "src/backend/bisheng/common/errcode/tag.py",
    "chars": 288,
    "preview": "from .base import BaseErrorCode\n\n\n# Label module related return error code, function module code:107\nclass TagExistError"
  },
  {
    "path": "src/backend/bisheng/common/errcode/telemetry.py",
    "chars": 1063,
    "preview": "from bisheng.common.errcode import BaseErrorCode\n\n\nclass DashboardMaxError(BaseErrorCode):\n    Code: int = 17000\n    Msg"
  },
  {
    "path": "src/backend/bisheng/common/errcode/tool.py",
    "chars": 1460,
    "preview": "from bisheng.common.errcode import BaseErrorCode\n\n\nclass ToolTypeRepeatError(BaseErrorCode):\n    Code: int = 15000\n    M"
  },
  {
    "path": "src/backend/bisheng/common/errcode/user.py",
    "chars": 2093,
    "preview": "from .base import BaseErrorCode\n\n\n# Return error code related to user module, function module code:106\nclass UserValidat"
  },
  {
    "path": "src/backend/bisheng/common/errcode/workstation.py",
    "chars": 534,
    "preview": "from .base import BaseErrorCode\n\n\n# WorkstationModule-related return error code, function module code:120\n# No web_searc"
  },
  {
    "path": "src/backend/bisheng/common/exceptions/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/exceptions/auth.py",
    "chars": 330,
    "preview": "class AuthJWTException(Exception):\n    \"\"\"\n    Base except which all fastapi_jwt_auth errors extend\n    \"\"\"\n    pass\n\n\nc"
  },
  {
    "path": "src/backend/bisheng/common/init_data.py",
    "chars": 8930,
    "preview": "import hashlib\nimport json\nimport os\nfrom typing import List\n\nfrom bisheng.telemetry_search.domain.init_dataset import i"
  },
  {
    "path": "src/backend/bisheng/common/models/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/models/base.py",
    "chars": 538,
    "preview": "from typing import Dict, Any\n\nfrom pydantic import ConfigDict\nfrom sqlmodel import SQLModel\n\n\nclass SQLModelSerializable"
  },
  {
    "path": "src/backend/bisheng/common/models/config.py",
    "chars": 3109,
    "preview": "from datetime import datetime\nfrom enum import Enum\nfrom typing import Optional\n\nfrom sqlalchemy import Column, DateTime"
  },
  {
    "path": "src/backend/bisheng/common/repositories/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/repositories/implementations/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/repositories/implementations/base_repository_impl.py",
    "chars": 6838,
    "preview": "from typing import Type, TypeVar, Optional, Any, Sequence, Union, List, Coroutine\n\nfrom sqlalchemy import Row, RowMappin"
  },
  {
    "path": "src/backend/bisheng/common/repositories/implementations/config_repository_impl.py",
    "chars": 504,
    "preview": "from sqlmodel.ext.asyncio.session import AsyncSession\n\nfrom bisheng.common.models.config import Config\nfrom bisheng.comm"
  },
  {
    "path": "src/backend/bisheng/common/repositories/interfaces/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/repositories/interfaces/base_repository.py",
    "chars": 2754,
    "preview": "from abc import ABC, abstractmethod\nfrom typing import Generic, TypeVar, List, Optional, Dict, Any\n\nT = TypeVar('T')\nID "
  },
  {
    "path": "src/backend/bisheng/common/repositories/interfaces/config_repository.py",
    "chars": 261,
    "preview": "from abc import ABC\n\nfrom bisheng.common.models.config import Config\nfrom bisheng.common.repositories.interfaces.base_re"
  },
  {
    "path": "src/backend/bisheng/common/schemas/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/schemas/api.py",
    "chars": 1613,
    "preview": "from typing import Generic, TypeVar, Union, Any, List\n\nfrom pydantic import BaseModel\n\nDataT = TypeVar('DataT')\n\n\nclass "
  },
  {
    "path": "src/backend/bisheng/common/schemas/rag_schema.py",
    "chars": 302,
    "preview": "from typing import Literal, Optional\n\nfrom pydantic import BaseModel\n\n\n# Custom Extended Fieldsschema\nclass RagMetadataF"
  },
  {
    "path": "src/backend/bisheng/common/schemas/telemetry/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/schemas/telemetry/base_telemetry_schema.py",
    "chars": 2050,
    "preview": "import uuid\nfrom datetime import datetime, timezone\nfrom typing import List, Generic, TypeVar, Optional, Any\n\nfrom pydan"
  },
  {
    "path": "src/backend/bisheng/common/schemas/telemetry/event_data_schema.py",
    "chars": 3926,
    "preview": "from typing import Literal\n\nfrom pydantic import BaseModel\n\nfrom bisheng.common.constants.enums.telemetry import BaseTel"
  },
  {
    "path": "src/backend/bisheng/common/services/__init__.py",
    "chars": 115,
    "preview": "from bisheng.common.services.telemetry.telemetry_service import telemetry_service\n\n__all__ = [\"telemetry_service\"]\n"
  },
  {
    "path": "src/backend/bisheng/common/services/config_service.py",
    "chars": 10402,
    "preview": "import os\nfrom typing import List, Dict\n\nimport yaml\nfrom loguru import logger\n\nfrom bisheng.common.models.config import"
  },
  {
    "path": "src/backend/bisheng/common/services/telemetry/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/services/telemetry/telemetry_service.py",
    "chars": 11005,
    "preview": "import asyncio\nimport logging\nfrom asyncio import Semaphore\nfrom concurrent.futures import ThreadPoolExecutor\nfrom typin"
  },
  {
    "path": "src/backend/bisheng/common/utils/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/config/default_style.py",
    "chars": 2883,
    "preview": "#  Parameter explanation. Note that colon or dash must be followed by a space and cannot be omitted.\n#\n#  font:\n#    def"
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/markdocx.py",
    "chars": 713,
    "preview": "from bisheng.common.utils.markdown_cmpnt.md_to_docx.config.default_style import style_conf\nfrom bisheng.common.utils.mar"
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/parser/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/parser/ext_md_syntax.py",
    "chars": 733,
    "preview": "from markdown.inlinepatterns import SimpleTagInlineProcessor\nfrom markdown.extensions import Extension\n\n\nclass ExtMdSynt"
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/parser/md_parser.py",
    "chars": 403,
    "preview": "import markdown\n\nfrom bisheng.common.utils.markdown_cmpnt.md_to_docx.parser.ext_md_syntax import ExtMdSyntax\n\n\ndef md2ht"
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/docx_plus.py",
    "chars": 1742,
    "preview": "import docx\nfrom docx.shared import RGBColor\nfrom docx.enum.dml import MSO_THEME_COLOR_INDEX\n\ndef add_hyperlink(paragrap"
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/docx_processor.py",
    "chars": 21777,
    "preview": "# noinspection PyProtectedMember\n#\nimport io\nimport re\nfrom socket import socket\nfrom urllib.error import HTTPError, URL"
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/simple_style.py",
    "chars": 4722,
    "preview": "import docx\n\nfrom docx.enum.style import WD_STYLE_TYPE\n\n\n# Chinese Font Size Conversion pt THE METHOD\ndef _zihao_to_pt(c"
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/provider/style_manager.py",
    "chars": 3286,
    "preview": "import docx\nfrom docx import Document\nfrom docx.oxml.ns import qn\nfrom docx.shared import Inches, RGBColor, Pt\nfrom docx"
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/utils/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/utils/style_enum.py",
    "chars": 265,
    "preview": "class MDX_STYLE:\n    PLAIN_TEXT = \"Normal\"\n    PLAIN_LIST = \"List\"\n    LIST_NUMBER = \"List Number\"\n    LIST_CONTINUE = \""
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_docx/utils/yaml_utils.py",
    "chars": 177,
    "preview": "import yaml\nfrom yaml import FullLoader\n\n\ndef read_style_yaml(path: str) -> dict:\n    with open(path, \"r\", encoding=\"utf"
  },
  {
    "path": "src/backend/bisheng/common/utils/markdown_cmpnt/md_to_pdf.py",
    "chars": 26619,
    "preview": "\"\"\"\nTypora Style Markdown Transfer PDF Converter\n\nUse Playwright (Chromium) will be HTML Render As PDF Professional Mark"
  },
  {
    "path": "src/backend/bisheng/common/utils/util.py",
    "chars": 2417,
    "preview": "import base64\nimport contextvars\nimport functools\nimport hashlib\nimport hmac\nimport os\nimport uuid\n\nimport orjson\n\n\ndef "
  },
  {
    "path": "src/backend/bisheng/components/__init__.py",
    "chars": 101,
    "preview": "from bisheng.interface.custom.custom_component import CustomComponent\n\n__all__ = [\"CustomComponent\"]\n"
  },
  {
    "path": "src/backend/bisheng/components/custom_components/CustomComponent.py",
    "chars": 328,
    "preview": "from bisheng import CustomComponent\nfrom bisheng.field_typing import Data\n\n\nclass Component(CustomComponent):\n    docume"
  },
  {
    "path": "src/backend/bisheng/components/custom_components/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/core/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/backend/bisheng/core/ai/__init__.py",
    "chars": 1412,
    "preview": "from langchain_anthropic import ChatAnthropic\nfrom langchain_community.chat_models import ChatTongyi, ChatZhipuAI, MiniM"
  },
  {
    "path": "src/backend/bisheng/core/ai/asr/__init__.py",
    "chars": 240,
    "preview": "from .aliyun_asr_client import AliyunASRClient\nfrom .azure_openai_asr_client import AzureOpenAIASRClient\nfrom .openai_as"
  },
  {
    "path": "src/backend/bisheng/core/ai/asr/aliyun_asr_client.py",
    "chars": 1483,
    "preview": "import asyncio\nfrom typing import Optional\n\nfrom dashscope.audio.asr import Recognition, RecognitionResult\n\nfrom ..base "
  },
  {
    "path": "src/backend/bisheng/core/ai/asr/azure_openai_asr_client.py",
    "chars": 999,
    "preview": "from typing import Optional\n\nimport openai\n\nfrom ..base import BaseASRClient\n\n\nclass AzureOpenAIASRClient(BaseASRClient)"
  },
  {
    "path": "src/backend/bisheng/core/ai/asr/openai_asr_client.py",
    "chars": 1105,
    "preview": "from typing import Optional, Union, BinaryIO\n\nimport openai\n\nfrom ..base import BaseASRClient\n\n\nclass OpenAIASRClient(Ba"
  },
  {
    "path": "src/backend/bisheng/core/ai/base.py",
    "chars": 4668,
    "preview": "import asyncio\nimport os\nimport tempfile\nimport uuid\nfrom abc import ABC, abstractmethod\nfrom typing import Optional, Un"
  },
  {
    "path": "src/backend/bisheng/core/ai/embeddings/__init__.py",
    "chars": 298,
    "preview": "from langchain_community.embeddings import DashScopeEmbeddings\nfrom langchain_ollama import OllamaEmbeddings\nfrom langch"
  },
  {
    "path": "src/backend/bisheng/core/ai/llm/__init__.py",
    "chars": 0,
    "preview": ""
  }
]

// ... and 2995 more files (download for full content)

About this extraction

This page contains the full source code of the dataelement/bisheng GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3195 files (52.0 MB), approximately 11.0M tokens, and a symbol index with 17806 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!