Files
cloudpods/pkg/llm/models/dify_container_shared_envs.go
cwz_eikoh 897a6fc61f [OSPP]feature: Auto deploy llm and dify (#23282)
* feat(llm): add llm-create

* fix(llm): fix llm-create, add llm-list & llm-show

* fix(llm): format file names

* fear(llm): add exec stream

* fear(llm): init llm model cache

* fix(llm): move llm model cache to LocalImageCache

* feat(llm): auto clean model cache

* fix(llm): auto clean tmp model cache

* feat(dify): init dify-create

* fix(dify): change dify default registry

* feat: support create model with gguf file

* feat(llm): support more modelfile option for gguf file

* feat(dify): init user customize dify parameters

* feat: update llm as a service in climc

* fix: delete llm from region service

* feat: init llm service (with error)

* fix: resolve errors (task cant callback yet)

* feat: add PerformRequestHostActionByOtherService for container

* fix: make llm service usable

* feat: delete llm and dify after guest deleted

* feat(llm): add llm-image

* feat(llm): add llm-model

* feat: mv old llm to ollama

* feat(llm): init llm-batch-create(can not run)

* fix(llm): make llm-create usable

* fix(llm): add pull-model step

* feat(llm): add list and delete

* fix(llm): ollama pull official model don't rely on host & region's code any more

* feat(llm): add dify-model

* fix: remove llm's code in host & compute

* fix: remove remain code in compute

* feat(llm): Abstract out and reuse the llm_model logic

* feat(llm): abstract llm_base from llm

* fix(llm): make dify usable

* feat(llm): add sync_dify_images.sh

* fix(llm): format import

* feat(llm): support start & stop for llm and dify

* feat(llm): add model-update

* fix(llm): gendocgo
2025-10-24 13:29:31 +08:00

243 lines
17 KiB
Go

package models
import (
"yunion.io/x/onecloud/pkg/apis"
api "yunion.io/x/onecloud/pkg/apis/llm"
)
var sharedApiWorkerEnvKeyVal []*apis.ContainerKeyValue
func getSharedApiWorkerEnv(custom *DifyContainerEnv) []*apis.ContainerKeyValue {
if sharedApiWorkerEnvKeyVal == nil {
sharedApiWorkerEnv := &DifyContainerEnv{
"CONSOLE_API_URL": "",
"CONSOLE_WEB_URL": "",
"SERVICE_API_URL": "",
"APP_API_URL": "",
"APP_WEB_URL": "",
"LANG": "en_US.UTF-8",
"LC_ALL": "en_US.UTF-8",
"PYTHONIOENCODING": "utf-8",
"LOG_LEVEL": "INFO",
"LOG_FILE": "/app/logs/server.log",
"LOG_FILE_MAX_SIZE": "20",
"LOG_FILE_BACKUP_COUNT": "5",
"LOG_DATEFORMAT": "%Y-%m-%d %H:%M:%S",
"LOG_TZ": "UTC",
"DEBUG": "false",
"FLASK_DEBUG": "false",
"ENABLE_REQUEST_LOGGING": "False",
"SECRET_KEY": api.DIFY_SECRET_KEY,
"INIT_PASSWORD": "",
"DEPLOY_ENV": "PRODUCTION",
"CHECK_UPDATE_URL": "https://updates.dify.ai",
"OPENAI_API_BASE": "https://api.openai.com/v1",
"MIGRATION_ENABLED": "true",
"FILES_ACCESS_TIMEOUT": "300",
"ACCESS_TOKEN_EXPIRE_MINUTES": "60",
"REFRESH_TOKEN_EXPIRE_DAYS": "30",
"APP_MAX_ACTIVE_REQUESTS": "0",
"APP_MAX_EXECUTION_TIME": "1200",
"DIFY_BIND_ADDRESS": "0.0.0.0",
"DIFY_PORT": "5001",
"SERVER_WORKER_AMOUNT": "1",
"SERVER_WORKER_CLASS": "gevent",
"SERVER_WORKER_CONNECTIONS": "10",
"CELERY_WORKER_CLASS": "",
"GUNICORN_TIMEOUT": "360",
"CELERY_WORKER_AMOUNT": "",
"CELERY_AUTO_SCALE": "false",
"CELERY_MAX_WORKERS": "",
"CELERY_MIN_WORKERS": "",
"API_TOOL_DEFAULT_CONNECT_TIMEOUT": "10",
"API_TOOL_DEFAULT_READ_TIMEOUT": "60",
"ENABLE_WEBSITE_JINAREADER": api.DIFY_WEB_ENABLE_WEBSITE_JINAREADER,
"ENABLE_WEBSITE_FIRECRAWL": api.DIFY_WEB_ENABLE_WEBSITE_FIRECRAWL,
"ENABLE_WEBSITE_WATERCRAWL": api.DIFY_WEB_ENABLE_WEBSITE_WATERCRAWL,
"DB_USERNAME": api.DIFY_POSTGRES_USER,
"DB_PASSWORD": api.DIFY_POSTGRES_PASSWORD,
"DB_HOST": api.DIFY_LOCALHOST,
"DB_PORT": api.DIFY_POSTGRES_PORT,
"DB_DATABASE": "dify",
"SQLALCHEMY_POOL_SIZE": "30",
"SQLALCHEMY_POOL_RECYCLE": "3600",
"SQLALCHEMY_ECHO": "false",
"SQLALCHEMY_POOL_PRE_PING": "false",
"SQLALCHEMY_POOL_USE_LIFO": "false",
"POSTGRES_MAX_CONNECTIONS": api.DIFY_POSTGRES_MAX_CONNECTIONS,
"POSTGRES_SHARED_BUFFERS": api.DIFY_POSTGRES_SHARED_BUFFERS,
"POSTGRES_WORK_MEM": api.DIFY_POSTGRES_WORK_MEM,
"POSTGRES_MAINTENANCE_WORK_MEM": api.DIFY_POSTGRES_MAINTENANCE_WORK_MEM,
"POSTGRES_EFFECTIVE_CACHE_SIZE": api.DIFY_POSTGRES_EFFECTIVE_CACHE_SIZE,
"REDIS_HOST": api.DIFY_LOCALHOST,
"REDIS_PORT": api.DIFY_REDIS_PORT,
"REDIS_USERNAME": "",
"REDIS_PASSWORD": api.DIFY_REDISCLI_AUTH,
"REDIS_USE_SSL": "false",
"REDIS_DB": "0",
"REDIS_USE_SENTINEL": "false",
"REDIS_SENTINELS": "",
"REDIS_SENTINEL_SERVICE_NAME": "",
"REDIS_SENTINEL_USERNAME": "",
"REDIS_SENTINEL_PASSWORD": "",
"REDIS_SENTINEL_SOCKET_TIMEOUT": "0.1",
"REDIS_USE_CLUSTERS": "false",
"REDIS_CLUSTERS": "",
"REDIS_CLUSTERS_PASSWORD": "",
"CELERY_BROKER_URL": "redis://:" + api.DIFY_REDISCLI_AUTH + "@" + api.DIFY_LOCALHOST + ":" + api.DIFY_REDIS_PORT + "/1",
"CELERY_BACKEND": api.DIFY_LOCALHOST,
"BROKER_USE_SSL": "false",
"CELERY_USE_SENTINEL": "false",
"CELERY_SENTINEL_MASTER_NAME": "",
"CELERY_SENTINEL_PASSWORD": "",
"CELERY_SENTINEL_SOCKET_TIMEOUT": "0.1",
"STORAGE_TYPE": "opendal",
"OPENDAL_SCHEME": "fs",
"OPENDAL_FS_ROOT": "storage",
"VECTOR_STORE": "weaviate",
"VECTOR_INDEX_NAME_PREFIX": "Vector_index",
"WEAVIATE_ENDPOINT": "http://" + api.DIFY_LOCALHOST + ":8080",
"WEAVIATE_API_KEY": api.DIFY_WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS,
"UPLOAD_FILE_SIZE_LIMIT": "15",
"UPLOAD_FILE_BATCH_LIMIT": "5",
"ETL_TYPE": "dify",
"UNSTRUCTURED_API_URL": "",
"UNSTRUCTURED_API_KEY": "",
"SCARF_NO_ANALYTICS": "true",
"PROMPT_GENERATION_MAX_TOKENS": "512",
"CODE_GENERATION_MAX_TOKENS": "1024",
"PLUGIN_BASED_TOKEN_COUNTING_ENABLED": "false",
"MULTIMODAL_SEND_FORMAT": "base64",
"UPLOAD_IMAGE_FILE_SIZE_LIMIT": "10",
"UPLOAD_VIDEO_FILE_SIZE_LIMIT": "100",
"UPLOAD_AUDIO_FILE_SIZE_LIMIT": "50",
"API_SENTRY_DSN": api.DIFY_API_SENTRY_DSN,
"API_SENTRY_TRACES_SAMPLE_RATE": api.DIFY_API_SENTRY_TRACES_SAMPLE_RATE,
"API_SENTRY_PROFILES_SAMPLE_RATE": api.DIFY_API_SENTRY_PROFILES_SAMPLE_RATE,
"WEB_SENTRY_DSN": "",
"NOTION_INTEGRATION_TYPE": "public",
"NOTION_CLIENT_SECRET": "",
"NOTION_CLIENT_ID": "",
"NOTION_INTERNAL_SECRET": "",
"MAIL_TYPE": "resend",
"MAIL_DEFAULT_SEND_FROM": "",
"RESEND_API_URL": "https://api.resend.com",
"RESEND_API_KEY": "your-resend-api-key",
"SMTP_SERVER": "",
"SMTP_PORT": "465",
"SMTP_USERNAME": "",
"SMTP_PASSWORD": "",
"SMTP_USE_TLS": "true",
"SMTP_OPPORTUNISTIC_TLS": "false",
"SENDGRID_API_KEY": "",
"INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH": api.DIFY_WEB_INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH,
"INVITE_EXPIRY_HOURS": "72",
"RESET_PASSWORD_TOKEN_EXPIRY_MINUTES": "5",
"CHANGE_EMAIL_TOKEN_EXPIRY_MINUTES": "5",
"OWNER_TRANSFER_TOKEN_EXPIRY_MINUTES": "5",
"CODE_EXECUTION_ENDPOINT": "http://" + api.DIFY_LOCALHOST + ":8194",
"CODE_EXECUTION_API_KEY": api.DIFY_SANDBOX_API_KEY,
"CODE_MAX_NUMBER": "9223372036854775807",
"CODE_MIN_NUMBER": "-9223372036854775808",
"CODE_MAX_DEPTH": "5",
"CODE_MAX_PRECISION": "20",
"CODE_MAX_STRING_LENGTH": "80000",
"CODE_MAX_STRING_ARRAY_LENGTH": "30",
"CODE_MAX_OBJECT_ARRAY_LENGTH": "30",
"CODE_MAX_NUMBER_ARRAY_LENGTH": "1000",
"CODE_EXECUTION_CONNECT_TIMEOUT": "10",
"CODE_EXECUTION_READ_TIMEOUT": "60",
"CODE_EXECUTION_WRITE_TIMEOUT": "10",
"TEMPLATE_TRANSFORM_MAX_LENGTH": "80000",
"WORKFLOW_MAX_EXECUTION_STEPS": "500",
"WORKFLOW_MAX_EXECUTION_TIME": "1200",
"WORKFLOW_CALL_MAX_DEPTH": "5",
"MAX_VARIABLE_SIZE": "204800",
"WORKFLOW_PARALLEL_DEPTH_LIMIT": "3",
"WORKFLOW_FILE_UPLOAD_LIMIT": "10",
"WORKFLOW_NODE_EXECUTION_STORAGE": "rdbms",
"CORE_WORKFLOW_EXECUTION_REPOSITORY": "core.repositories.sqlalchemy_workflow_execution_repository.SQLAlchemyWorkflowExecutionRepository",
"CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY": "core.repositories.sqlalchemy_workflow_node_execution_repository.SQLAlchemyWorkflowNodeExecutionRepository",
"API_WORKFLOW_NODE_EXECUTION_REPOSITORY": "repositories.sqlalchemy_api_workflow_node_execution_repository.DifyAPISQLAlchemyWorkflowNodeExecutionRepository",
"API_WORKFLOW_RUN_REPOSITORY": "repositories.sqlalchemy_api_workflow_run_repository.DifyAPISQLAlchemyWorkflowRunRepository",
"HTTP_REQUEST_NODE_MAX_BINARY_SIZE": "10485760",
"HTTP_REQUEST_NODE_MAX_TEXT_SIZE": "1048576",
"HTTP_REQUEST_NODE_SSL_VERIFY": "True",
"RESPECT_XFORWARD_HEADERS_ENABLED": "false",
"SSRF_PROXY_HTTP_URL": "http://" + api.DIFY_LOCALHOST + ":3128",
"SSRF_PROXY_HTTPS_URL": "http://" + api.DIFY_LOCALHOST + ":3128",
"LOOP_NODE_MAX_COUNT": api.DIFY_WEB_LOOP_NODE_MAX_COUNT,
"MAX_TOOLS_NUM": api.DIFY_WEB_MAX_TOOLS_NUM,
"MAX_PARALLEL_LIMIT": api.DIFY_WEB_MAX_PARALLEL_LIMIT,
"MAX_ITERATIONS_NUM": api.DIFY_WEB_MAX_ITERATIONS_NUM,
"TEXT_GENERATION_TIMEOUT_MS": api.DIFY_WEB_TEXT_GENERATION_TIMEOUT_MS,
"ALLOW_UNSAFE_DATA_SCHEME": api.DIFY_WEB_ALLOW_UNSAFE_DATA_SCHEME,
"POSTGRES_USER": "${DB_USERNAME}",
"POSTGRES_PASSWORD": "${DB_PASSWORD}",
"POSTGRES_DB": "${DB_DATABASE}",
"PGDATA": "/var/lib/postgresql/data/pgdata",
"SANDBOX_API_KEY": api.DIFY_SANDBOX_API_KEY,
"SANDBOX_GIN_MODE": api.DIFY_SANDBOX_GIN_MODE,
"SANDBOX_WORKER_TIMEOUT": api.DIFY_SANDBOX_WORKER_TIMEOUT,
"SANDBOX_ENABLE_NETWORK": api.DIFY_SANDBOX_ENABLE_NETWORK,
"SANDBOX_HTTP_PROXY": api.DIFY_SANDBOX_HTTP_PROXY,
"SANDBOX_HTTPS_PROXY": api.DIFY_SANDBOX_HTTPS_PROXY,
"SANDBOX_PORT": api.DIFY_SANDBOX_PORT,
"WEAVIATE_PERSISTENCE_DATA_PATH": api.DIFY_WEAVIATE_PERSISTENCE_DATA_PATH,
"WEAVIATE_QUERY_DEFAULTS_LIMIT": api.DIFY_WEAVIATE_QUERY_DEFAULTS_LIMIT,
"WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED": api.DIFY_WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED,
"WEAVIATE_DEFAULT_VECTORIZER_MODULE": api.DIFY_WEAVIATE_DEFAULT_VECTORIZER_MODULE,
"WEAVIATE_CLUSTER_HOSTNAME": api.DIFY_WEAVIATE_CLUSTER_HOSTNAME,
"WEAVIATE_AUTHENTICATION_APIKEY_ENABLED": api.DIFY_WEAVIATE_AUTHENTICATION_APIKEY_ENABLED,
"WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS": api.DIFY_WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS,
"WEAVIATE_AUTHENTICATION_APIKEY_USERS": api.DIFY_WEAVIATE_AUTHENTICATION_APIKEY_USERS,
"WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED": api.DIFY_WEAVIATE_AUTHORIZATION_ADMINLIST_ENABLED,
"WEAVIATE_AUTHORIZATION_ADMINLIST_USERS": api.DIFY_WEAVIATE_AUTHORIZATION_ADMINLIST_USERS,
"NGINX_SERVER_NAME": api.DIFY_NGINX_SERVER_NAME,
"NGINX_PORT": api.DIFY_NGINX_PORT,
"NGINX_WORKER_PROCESSES": api.DIFY_NGINX_WORKER_PROCESSES,
"NGINX_CLIENT_MAX_BODY_SIZE": api.DIFY_NGINX_CLIENT_MAX_BODY_SIZE,
"NGINX_KEEPALIVE_TIMEOUT": api.DIFY_NGINX_KEEPALIVE_TIMEOUT,
"NGINX_PROXY_READ_TIMEOUT": api.DIFY_NGINX_PROXY_READ_TIMEOUT,
"NGINX_PROXY_SEND_TIMEOUT": api.DIFY_NGINX_PROXY_SEND_TIMEOUT,
"SSRF_HTTP_PORT": api.DIFY_SSRF_HTTP_PORT,
"SSRF_COREDUMP_DIR": api.DIFY_SSRF_COREDUMP_DIR,
"SSRF_REVERSE_PROXY_PORT": api.DIFY_SANDBOX_PORT,
"SSRF_SANDBOX_HOST": api.DIFY_LOCALHOST,
"SSRF_DEFAULT_TIME_OUT": "5",
"SSRF_DEFAULT_CONNECT_TIME_OUT": "5",
"SSRF_DEFAULT_READ_TIME_OUT": "5",
"SSRF_DEFAULT_WRITE_TIME_OUT": "5",
"DB_PLUGIN_DATABASE": api.DIFY_PLUGIN_DB_DATABASE,
"PLUGIN_DAEMON_PORT": api.DIFY_PLUGIN_SERVER_PORT,
"PLUGIN_DAEMON_KEY": api.DIFY_PLUGIN_SERVER_KEY,
"PLUGIN_DAEMON_URL": "http://" + api.DIFY_LOCALHOST + ":" + api.DIFY_PLUGIN_SERVER_PORT,
"PLUGIN_MAX_PACKAGE_SIZE": api.DIFY_PLUGIN_MAX_PACKAGE_SIZE,
"PLUGIN_PPROF_ENABLED": api.DIFY_PLUGIN_PPROF_ENABLED,
"PLUGIN_DEBUGGING_HOST": api.DIFY_PLUGIN_REMOTE_INSTALLING_HOST,
"PLUGIN_DEBUGGING_PORT": api.DIFY_PLUGIN_REMOTE_INSTALLING_PORT,
"EXPOSE_PLUGIN_DEBUGGING_HOST": api.DIFY_LOCALHOST,
"EXPOSE_PLUGIN_DEBUGGING_PORT": api.DIFY_PLUGIN_REMOTE_INSTALLING_PORT,
"PLUGIN_DIFY_INNER_API_KEY": api.DIFY_API_INNER_KEY,
"PLUGIN_DIFY_INNER_API_URL": "http://" + api.DIFY_LOCALHOST + ":5001",
"ENDPOINT_URL_TEMPLATE": "http://" + api.DIFY_LOCALHOST + "/e/{hook_id}",
"MARKETPLACE_ENABLED": "true",
"MARKETPLACE_API_URL": api.DIFY_WEB_MARKETPLACE_API_URL,
"ALLOW_EMBED": api.DIFY_WEB_ALLOW_EMBED,
"QUEUE_MONITOR_THRESHOLD": "200",
"QUEUE_MONITOR_ALERT_EMAILS": "",
"QUEUE_MONITOR_INTERVAL": "30",
"ENABLE_CLEAN_EMBEDDING_CACHE_TASK": "false",
"ENABLE_CLEAN_UNUSED_DATASETS_TASK": "false",
"ENABLE_CREATE_TIDB_SERVERLESS_TASK": "false",
"ENABLE_UPDATE_TIDB_SERVERLESS_STATUS_TASK": "false",
"ENABLE_CLEAN_MESSAGES": "false",
"ENABLE_MAIL_CLEAN_DOCUMENT_NOTIFY_TASK": "false",
"ENABLE_DATASETS_QUEUE_MONITOR": "false",
"ENABLE_CHECK_UPGRADABLE_PLUGIN_TASK": "true",
}
sharedApiWorkerEnvKeyVal = sharedApiWorkerEnv.GetContainerEnvs(custom)
}
return sharedApiWorkerEnvKeyVal
}