dflash-console 0.3.231__tar.gz → 0.3.232__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dflash_console-0.3.231 → dflash_console-0.3.232}/PKG-INFO +3 -3
- {dflash_console-0.3.231 → dflash_console-0.3.232}/README.md +2 -2
- {dflash_console-0.3.231 → dflash_console-0.3.232}/api/app.py +6 -4
- {dflash_console-0.3.231 → dflash_console-0.3.232}/api/gateway.py +39 -5
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/chat_proxy.py +758 -708
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/hf_local_match.py +50 -1
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/huggingface.py +5292 -4963
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/library_import.py +22 -1
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/version.py +1 -1
- {dflash_console-0.3.231 → dflash_console-0.3.232}/pyproject.toml +1 -1
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/css/dflash-console.css +6 -3
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/css/dflash-shell.css +222 -43
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/index.html +2 -2
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/download-queue.js +945 -927
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/models-live.js +51 -28
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/server-live.js +135 -9
- {dflash_console-0.3.231 → dflash_console-0.3.232}/.gitignore +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/LICENSE +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/NOTICE.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/api/__init__.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/assets/dflash_console_logo.png +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/assets/dflash_console_logo_only.png +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/assets/dflash_console_logo_only2.png +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/assets/dflash_console_logo_only_clear.png +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/assets/dflash_txt_logo.png +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/config.example.json +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/__init__.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/api_access_log.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/api_catalog.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/api_introspection.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/api_providers.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/auto_register.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/catalog_load.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/chat_ready.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/chat_vision.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/client_identity.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/components_hub.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/config.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/dflash_generation.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/diagnostics_bundle.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/display_names.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/embedding_server.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/engine_state.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/freetoken_runtime_install.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/fs_browse.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/fs_reveal.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/gateway_routing.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/gguf_meta.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/gpu_devices.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/gpu_policy.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/gpu_process_memory_windows.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/gpu_processes.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/gpu_relief.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/hardware_apply.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/hardware_info.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/hf_catalog_cache.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/hf_catalog_index.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/hf_catalog_recommend.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/hf_engines.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/hf_install.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/hf_model_fit.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/inference_stats.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/load_progress.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/local_models.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/log_utils.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/memory_guardrails.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/model_discovery.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/model_paths.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/model_presets.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/model_runtime_policy.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/model_stack.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/net_listeners.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/node_connect.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/ocr_setup.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/remote_nodes.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtime.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtime_install_job.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtime_recommendations.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/__init__.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/base.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/contention.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/faster_whisper.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/freetoken.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/noop.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/ollama.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/piper.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/registry.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/stt.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/transformers_hf.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/vibevoice.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/runtimes/vllm.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/server_boot.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/setup.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/stack_match.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/status_report.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/support_journal.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/system_stats.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/transformers_runtime_install.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/vision_setup.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/core/vllm_runtime_install.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/dflash_cli/__init__.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/dflash_cli/__main__.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/dflash_cli/cli.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/dflash_cli/commands.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/dflash_cli/http.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/dflash_cli/render.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/dflash_cli/resolve.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/dflash_cli/server_takeover.py +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/AGENT-PROMPT-CLIENT-IDENTITY.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/AGENT-PROMPT-DFLASH-TRANSLATION-PERF-AI-TOOLS.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/AGENT-PROMPT-TRANSLATEGEMMA-AI-TOOLS.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ARCHITECTURE.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/BUG-REPORTS.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/CLI.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/CLIENT-IDENTITY.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/CURSOR.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/GOING-PUBLIC.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/LICENSING.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/LINUX-CLI.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/MULTI-MODAL-AGENT-PROMPT.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/MULTI-MODAL-RUNTIME-PLAN.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/PRODUCTION.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/RELEASING.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/STT-ENGINE-DECISION.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/USER-GUIDE.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/announcements/public-preview-v0.3.103.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/announcements/public-preview-v0.3.122.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/announcements/public-preview.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/automatic-updates.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/plans/shared-speak-stt-service.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.103.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.106.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.117.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.118.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.119.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.120.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.121.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.122.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.123.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.128.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.129.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.132.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.133.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/release-notes-0.3.208.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/README.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/devices-view.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/model-search.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/models-view.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/nodes-v1-plan.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/settings-appearance.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/settings-chat.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/settings-developer.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/settings-general.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/settings-hardware.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/settings-integrations.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/settings-lm-link.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/settings-model-defaults.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/settings-runtime.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/docs/ui/settings-runtimes.md +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/app-functional.html +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/css/dflash-console.css.bak-density +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/css/dflash-shell.css.bak-density +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/css/studio.css +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/about-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/app-settings-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/app.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/bug-report-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/chat-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/component-install-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/console-api.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/dashboard.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/desktop-shell.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/dflash-console-ui.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/docs-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/downloads-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/library-browse-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/library-scan-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/library-type-options.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/log-format.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/model-card.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/model-catalog-groups.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/model-search-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/nodes-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/runtime-recommendations.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/runtime-steppers.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/select-theme.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/server-reload-watch.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/settings-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/settings-live.js.api-providers-bak +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/settings-live.js.pre-api-merge-bak +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/setup-wizard-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/speak-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/stack-wizard.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/status-feed.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/sysbar-live.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/table-column-resize.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/js/ui-layout-prefs.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/vendor/marked.min.js +0 -0
- {dflash_console-0.3.231 → dflash_console-0.3.232}/static/vendor/purify.min.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: dflash-console
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.232
|
|
4
4
|
Summary: Local control panel and terminal CLI for DFlash stacks and local model runtimes
|
|
5
5
|
Project-URL: Homepage, https://github.com/ilan4ever/Dflash-Console
|
|
6
6
|
Project-URL: Repository, https://github.com/ilan4ever/Dflash-Console
|
|
@@ -674,7 +674,7 @@ from one UI, then talk to them through a single OpenAI-compatible port.
|
|
|
674
674
|
> supported platform**; Linux and macOS are not supported or tested (see
|
|
675
675
|
> [Platform support](#platform-support) below).
|
|
676
676
|
|
|
677
|
-
**Developer:** ILAN AVIV · **UI:** [http://127.0.0.1:8900/](http://127.0.0.1:8900/) · **Version:** v0.3.
|
|
677
|
+
**Developer:** ILAN AVIV · **UI:** [http://127.0.0.1:8900/](http://127.0.0.1:8900/) · **Version:** v0.3.232
|
|
678
678
|
|
|
679
679
|
## Download (Windows)
|
|
680
680
|
|
|
@@ -753,7 +753,7 @@ Typical first session:
|
|
|
753
753
|
3. For a DFlash GGUF, right-click and **Find and attach draft** if you want speculative decoding.
|
|
754
754
|
4. Chat in the **Playground**, or point any OpenAI client at `http://127.0.0.1:8001/v1` with optional `X-DFlash-Client: YourApp` so **Engines** shows who is using each model.
|
|
755
755
|
|
|
756
|
-
### Recent improvements (v0.3.
|
|
756
|
+
### Recent improvements (v0.3.232)
|
|
757
757
|
|
|
758
758
|
- **Engine standby** — Running toggle gates load/chat until you arm the pipeline
|
|
759
759
|
- **External GPU cards** — OneVoice, LM Studio, and other apps on the GPU; compact mobile layout; loading state expires when models are ready
|
|
@@ -8,7 +8,7 @@ from one UI, then talk to them through a single OpenAI-compatible port.
|
|
|
8
8
|
> supported platform**; Linux and macOS are not supported or tested (see
|
|
9
9
|
> [Platform support](#platform-support) below).
|
|
10
10
|
|
|
11
|
-
**Developer:** ILAN AVIV · **UI:** [http://127.0.0.1:8900/](http://127.0.0.1:8900/) · **Version:** v0.3.
|
|
11
|
+
**Developer:** ILAN AVIV · **UI:** [http://127.0.0.1:8900/](http://127.0.0.1:8900/) · **Version:** v0.3.232
|
|
12
12
|
|
|
13
13
|
## Download (Windows)
|
|
14
14
|
|
|
@@ -87,7 +87,7 @@ Typical first session:
|
|
|
87
87
|
3. For a DFlash GGUF, right-click and **Find and attach draft** if you want speculative decoding.
|
|
88
88
|
4. Chat in the **Playground**, or point any OpenAI client at `http://127.0.0.1:8001/v1` with optional `X-DFlash-Client: YourApp` so **Engines** shows who is using each model.
|
|
89
89
|
|
|
90
|
-
### Recent improvements (v0.3.
|
|
90
|
+
### Recent improvements (v0.3.232)
|
|
91
91
|
|
|
92
92
|
- **Engine standby** — Running toggle gates load/chat until you arm the pipeline
|
|
93
93
|
- **External GPU cards** — OneVoice, LM Studio, and other apps on the GPU; compact mobile layout; loading state expires when models are ready
|
|
@@ -3429,14 +3429,15 @@ async def proxy_chat_completions(server_id: str, request: Request):
|
|
|
3429
3429
|
extract_stream_completion_stats,
|
|
3430
3430
|
is_reasoning_only_chunk,
|
|
3431
3431
|
open_upstream_chat_stream,
|
|
3432
|
+
resolve_disable_reasoning_for_chat,
|
|
3432
3433
|
sse_had_content_delta,
|
|
3433
3434
|
sse_stream_complete,
|
|
3434
3435
|
sse_stream_error_chunk,
|
|
3435
3436
|
SSE_KEEPALIVE_COMMENT,
|
|
3436
3437
|
upstream_chat_completion,
|
|
3437
|
-
validate_reasoning_chat_request,
|
|
3438
3438
|
wants_stream,
|
|
3439
3439
|
)
|
|
3440
|
+
from core.client_identity import LABEL_UNKNOWN_API
|
|
3440
3441
|
from core.inference_stats import mark_inference_end, mark_inference_start, note_completion_stats
|
|
3441
3442
|
from core.local_models import model_has_reasoning
|
|
3442
3443
|
from core.runtime import api_base_url, build_server_status
|
|
@@ -3541,12 +3542,13 @@ async def proxy_chat_completions(server_id: str, request: Request):
|
|
|
3541
3542
|
raise HTTPException(status_code=400, detail='engine api_url not configured')
|
|
3542
3543
|
# Non-reasoning models never negotiate reasoning: strip reasoning_effort and
|
|
3543
3544
|
# thinking toggles so the API returns the regular chat behaviour.
|
|
3544
|
-
disable_reasoning = request.headers.get('X-Disable-Reasoning') == '1'
|
|
3545
3545
|
reasoning_model = model_has_reasoning(server)
|
|
3546
|
-
|
|
3546
|
+
attributed = bool(client_label) and client_label != LABEL_UNKNOWN_API
|
|
3547
|
+
disable_reasoning, reasoning_error = resolve_disable_reasoning_for_chat(
|
|
3547
3548
|
raw,
|
|
3548
3549
|
reasoning=reasoning_model,
|
|
3549
|
-
|
|
3550
|
+
disable_header=request.headers.get('X-Disable-Reasoning') == '1',
|
|
3551
|
+
attributed_client=attributed,
|
|
3550
3552
|
)
|
|
3551
3553
|
if reasoning_error:
|
|
3552
3554
|
raise HTTPException(
|
|
@@ -442,6 +442,17 @@ async def _forward_chat(
|
|
|
442
442
|
raw = await exc.response.aread()
|
|
443
443
|
except Exception:
|
|
444
444
|
raw = b''
|
|
445
|
+
try: # DFLASH_LOG_400_BODIES (stream path)
|
|
446
|
+
from pathlib import Path as _P
|
|
447
|
+
_log = _P(__file__).resolve().parents[1] / 'logs' / 'gateway-400-bodies.log'
|
|
448
|
+
_log.parent.mkdir(parents=True, exist_ok=True)
|
|
449
|
+
with _log.open('a', encoding='utf-8') as _fh:
|
|
450
|
+
_fh.write(
|
|
451
|
+
f"stream status={status} url={url} "
|
|
452
|
+
f"req={body[:2000]!r} resp={raw[:4000]!r}\n"
|
|
453
|
+
)
|
|
454
|
+
except Exception:
|
|
455
|
+
pass
|
|
445
456
|
error_payload = _upstream_error_payload(raw, status)
|
|
446
457
|
encoded = json.dumps(error_payload).encode('utf-8')
|
|
447
458
|
if stream_requested:
|
|
@@ -466,6 +477,14 @@ async def _forward_chat(
|
|
|
466
477
|
media_type = upstream.headers.get('content-type', 'application/json')
|
|
467
478
|
status = upstream.status_code
|
|
468
479
|
if status >= 400:
|
|
480
|
+
try: # DFLASH_LOG_400_BODIES
|
|
481
|
+
from pathlib import Path as _P
|
|
482
|
+
_log = _P(__file__).resolve().parents[1] / 'logs' / 'gateway-400-bodies.log'
|
|
483
|
+
_log.parent.mkdir(parents=True, exist_ok=True)
|
|
484
|
+
with _log.open('a', encoding='utf-8') as _fh:
|
|
485
|
+
_fh.write(f"status={status} url={url} body={content[:4000]!r}\n")
|
|
486
|
+
except Exception:
|
|
487
|
+
pass
|
|
469
488
|
return Response(content=content, status_code=status, media_type=media_type)
|
|
470
489
|
return Response(content=content, status_code=status, media_type=media_type)
|
|
471
490
|
|
|
@@ -576,17 +595,32 @@ async def chat_completions(request: Request) -> Response:
|
|
|
576
595
|
body = json.dumps(payload).encode('utf-8')
|
|
577
596
|
except Exception:
|
|
578
597
|
body = None
|
|
598
|
+
disable_reasoning = request.headers.get('X-Disable-Reasoning') == '1'
|
|
579
599
|
if body is not None:
|
|
580
|
-
from core.chat_proxy import apply_reasoning_policy,
|
|
600
|
+
from core.chat_proxy import apply_reasoning_policy, resolve_disable_reasoning_for_chat
|
|
601
|
+
from core.client_identity import resolve_client_label, LABEL_UNKNOWN_API
|
|
581
602
|
|
|
582
|
-
disable_reasoning = request.headers.get('X-Disable-Reasoning') == '1'
|
|
583
603
|
reasoning_model = model_has_reasoning(server)
|
|
584
|
-
|
|
604
|
+
client_label = resolve_client_label(request)
|
|
605
|
+
attributed = bool(client_label) and client_label != LABEL_UNKNOWN_API
|
|
606
|
+
disable_reasoning, reasoning_error = resolve_disable_reasoning_for_chat(
|
|
585
607
|
body,
|
|
586
608
|
reasoning=reasoning_model,
|
|
587
|
-
|
|
609
|
+
disable_header=disable_reasoning,
|
|
610
|
+
attributed_client=attributed,
|
|
588
611
|
)
|
|
589
612
|
if reasoning_error:
|
|
613
|
+
try: # DFLASH_LOG_400_BODIES (gateway reject)
|
|
614
|
+
from pathlib import Path as _P
|
|
615
|
+
_log = _P(__file__).resolve().parents[1] / 'logs' / 'gateway-400-bodies.log'
|
|
616
|
+
_log.parent.mkdir(parents=True, exist_ok=True)
|
|
617
|
+
with _log.open('a', encoding='utf-8') as _fh:
|
|
618
|
+
_fh.write(
|
|
619
|
+
f"gateway_reject reason=reasoning_budget_too_low "
|
|
620
|
+
f"client={client_label!r} body={body[:2000]!r}\n"
|
|
621
|
+
)
|
|
622
|
+
except Exception:
|
|
623
|
+
pass
|
|
590
624
|
raise HTTPException(
|
|
591
625
|
status_code=400,
|
|
592
626
|
detail={
|
|
@@ -604,7 +638,7 @@ async def chat_completions(request: Request) -> Response:
|
|
|
604
638
|
disable_reasoning=disable_reasoning,
|
|
605
639
|
)
|
|
606
640
|
url = f"{_console_base(cfg)}/api/servers/{sid}/v1/chat/completions"
|
|
607
|
-
filter_reasoning =
|
|
641
|
+
filter_reasoning = disable_reasoning
|
|
608
642
|
response = await _forward_chat(request, url, body, filter_reasoning=filter_reasoning)
|
|
609
643
|
if isinstance(response, Response):
|
|
610
644
|
response.headers['X-DFlash-Server-Id'] = sid
|