Spaces:
Sleeping
Sleeping
P0-R4 Manual Research Design default qualitative
#138
by GuXiaopeng - opened
- app.py +23 -33
- core/advanced_method_registry.py +26 -57
- i18n.py +12 -12
app.py
CHANGED
|
@@ -505,10 +505,13 @@ def _uploaded_material_descriptors() -> list[dict[str, str]]:
|
|
| 505 |
|
| 506 |
|
| 507 |
def _method_intent_signature() -> str:
|
| 508 |
-
|
| 509 |
-
|
| 510 |
-
|
| 511 |
-
|
|
|
|
|
|
|
|
|
|
| 512 |
return hashlib.sha256(
|
| 513 |
json.dumps(payload, ensure_ascii=False, sort_keys=True, separators=(",", ":")).encode("utf-8")
|
| 514 |
).hexdigest()
|
|
@@ -777,9 +780,9 @@ def _process_pending_launch(lang_code: str) -> None:
|
|
| 777 |
idempotency_key = str(pending.get("idempotency_key") or "").strip()
|
| 778 |
pending_signature = str(pending.get("method_intent_signature") or "").strip()
|
| 779 |
|
| 780 |
-
#
|
| 781 |
-
# creation so a stale rerun or modified session state cannot bypass
|
| 782 |
-
# manually
|
| 783 |
preflight, current_signature = _current_method_preflight(
|
| 784 |
confirmed_method_family=pending_family or None
|
| 785 |
)
|
|
@@ -1518,31 +1521,23 @@ def render_workspace_controls(user):
|
|
| 1518 |
method_signature = ""
|
| 1519 |
else:
|
| 1520 |
# SmartPaper intentionally supports only two reader-visible research
|
| 1521 |
-
# designs.
|
| 1522 |
-
#
|
| 1523 |
-
#
|
| 1524 |
-
|
| 1525 |
-
auto_family = str(auto_preflight.get("method_family") or "qualitative").strip().casefold()
|
| 1526 |
-
if auto_family not in METHOD_FAMILIES:
|
| 1527 |
-
auto_family = "qualitative"
|
| 1528 |
-
specialized_redirect = bool((auto_preflight.get("resolution") or {}).get("specialized_method_detected"))
|
| 1529 |
-
|
| 1530 |
stored = str(st.session_state.get("sp_method_confirmation") or "").strip().casefold()
|
| 1531 |
stored_sig = str(st.session_state.get("sp_method_confirmation_signature") or "").strip()
|
| 1532 |
selected_default = (
|
| 1533 |
-
stored if stored_sig == method_signature and stored in METHOD_FAMILIES else
|
| 1534 |
)
|
| 1535 |
|
| 1536 |
-
# A changed Title/Keywords signature invalidates a previous manual
|
| 1537 |
-
# override. For the same signature, the user's explicit selection remains
|
| 1538 |
-
# authoritative even when automatic detection found a specialized cue.
|
| 1539 |
selector_sig = str(st.session_state.get("sp_method_selector_signature") or "").strip()
|
| 1540 |
if selector_sig != method_signature:
|
| 1541 |
st.session_state["sp_method_confirmation"] = ""
|
| 1542 |
st.session_state["sp_method_confirmation_signature"] = ""
|
| 1543 |
-
st.session_state["sp_method_selector"] =
|
| 1544 |
st.session_state["sp_method_selector_signature"] = method_signature
|
| 1545 |
-
selected_default =
|
| 1546 |
elif str(st.session_state.get("sp_method_selector") or "").strip().casefold() not in METHOD_FAMILIES:
|
| 1547 |
st.session_state["sp_method_selector"] = selected_default
|
| 1548 |
|
|
@@ -1554,13 +1549,11 @@ def render_workspace_controls(user):
|
|
| 1554 |
key="sp_method_selector",
|
| 1555 |
disabled=active,
|
| 1556 |
)
|
| 1557 |
-
selected = str(selected or
|
| 1558 |
-
if selected
|
| 1559 |
-
|
| 1560 |
-
|
| 1561 |
-
|
| 1562 |
-
st.session_state["sp_method_confirmation"] = ""
|
| 1563 |
-
st.session_state["sp_method_confirmation_signature"] = ""
|
| 1564 |
preflight, method_signature = _current_method_preflight(confirmed_method_family=selected)
|
| 1565 |
|
| 1566 |
method_family = str(preflight.get("method_family") or "undetermined").strip().casefold()
|
|
@@ -1574,10 +1567,7 @@ def render_workspace_controls(user):
|
|
| 1574 |
st.caption(tr(lang_code, "method_detection_explanation"))
|
| 1575 |
|
| 1576 |
block_reason = str(preflight.get("block_reason") or "")
|
| 1577 |
-
|
| 1578 |
-
if specialized_redirect and not active and method_family == "qualitative":
|
| 1579 |
-
st.warning(tr(lang_code, "specialized_method_redirect"))
|
| 1580 |
-
elif block_reason:
|
| 1581 |
st.warning(tr(lang_code, "method_resolution_invalid"))
|
| 1582 |
elif not active:
|
| 1583 |
st.info(tr(lang_code, "method_supported", method=method_label))
|
|
|
|
| 505 |
|
| 506 |
|
| 507 |
def _method_intent_signature() -> str:
|
| 508 |
+
"""Stable identity for the manual Research Design control.
|
| 509 |
+
|
| 510 |
+
Title and Keywords must never reset or auto-change the user's selected
|
| 511 |
+
research design. The signature therefore identifies the control policy, not
|
| 512 |
+
the topic text.
|
| 513 |
+
"""
|
| 514 |
+
payload = {"research_design_control": "manual-default-qualitative-v1"}
|
| 515 |
return hashlib.sha256(
|
| 516 |
json.dumps(payload, ensure_ascii=False, sort_keys=True, separators=(",", ":")).encode("utf-8")
|
| 517 |
).hexdigest()
|
|
|
|
| 780 |
idempotency_key = str(pending.get("idempotency_key") or "").strip()
|
| 781 |
pending_signature = str(pending.get("method_intent_signature") or "").strip()
|
| 782 |
|
| 783 |
+
# Repeat the capability preflight immediately before any task/quota
|
| 784 |
+
# creation so a stale rerun or modified session state cannot bypass the
|
| 785 |
+
# manually selected/default research design.
|
| 786 |
preflight, current_signature = _current_method_preflight(
|
| 787 |
confirmed_method_family=pending_family or None
|
| 788 |
)
|
|
|
|
| 1521 |
method_signature = ""
|
| 1522 |
else:
|
| 1523 |
# SmartPaper intentionally supports only two reader-visible research
|
| 1524 |
+
# designs. New tasks default to qualitative research. The user may
|
| 1525 |
+
# adjust the design manually; Title, Keywords, and uploaded materials
|
| 1526 |
+
# never auto-select or reset the Research Design.
|
| 1527 |
+
method_signature = _method_intent_signature()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1528 |
stored = str(st.session_state.get("sp_method_confirmation") or "").strip().casefold()
|
| 1529 |
stored_sig = str(st.session_state.get("sp_method_confirmation_signature") or "").strip()
|
| 1530 |
selected_default = (
|
| 1531 |
+
stored if stored_sig == method_signature and stored in METHOD_FAMILIES else "qualitative"
|
| 1532 |
)
|
| 1533 |
|
|
|
|
|
|
|
|
|
|
| 1534 |
selector_sig = str(st.session_state.get("sp_method_selector_signature") or "").strip()
|
| 1535 |
if selector_sig != method_signature:
|
| 1536 |
st.session_state["sp_method_confirmation"] = ""
|
| 1537 |
st.session_state["sp_method_confirmation_signature"] = ""
|
| 1538 |
+
st.session_state["sp_method_selector"] = "qualitative"
|
| 1539 |
st.session_state["sp_method_selector_signature"] = method_signature
|
| 1540 |
+
selected_default = "qualitative"
|
| 1541 |
elif str(st.session_state.get("sp_method_selector") or "").strip().casefold() not in METHOD_FAMILIES:
|
| 1542 |
st.session_state["sp_method_selector"] = selected_default
|
| 1543 |
|
|
|
|
| 1549 |
key="sp_method_selector",
|
| 1550 |
disabled=active,
|
| 1551 |
)
|
| 1552 |
+
selected = str(selected or "qualitative").strip().casefold()
|
| 1553 |
+
if selected not in METHOD_FAMILIES:
|
| 1554 |
+
selected = "qualitative"
|
| 1555 |
+
st.session_state["sp_method_confirmation"] = selected
|
| 1556 |
+
st.session_state["sp_method_confirmation_signature"] = method_signature
|
|
|
|
|
|
|
| 1557 |
preflight, method_signature = _current_method_preflight(confirmed_method_family=selected)
|
| 1558 |
|
| 1559 |
method_family = str(preflight.get("method_family") or "undetermined").strip().casefold()
|
|
|
|
| 1567 |
st.caption(tr(lang_code, "method_detection_explanation"))
|
| 1568 |
|
| 1569 |
block_reason = str(preflight.get("block_reason") or "")
|
| 1570 |
+
if block_reason:
|
|
|
|
|
|
|
|
|
|
| 1571 |
st.warning(tr(lang_code, "method_resolution_invalid"))
|
| 1572 |
elif not active:
|
| 1573 |
st.info(tr(lang_code, "method_supported", method=method_label))
|
core/advanced_method_registry.py
CHANGED
|
@@ -1,13 +1,11 @@
|
|
| 1 |
# -*- coding: utf-8 -*-
|
| 2 |
-
"""Deterministic two-design
|
| 3 |
|
| 4 |
-
|
| 5 |
-
qualitative research and survey-based quantitative research.
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
qualitative framework, while an explicit user selection between the two supported
|
| 10 |
-
designs remains authoritative for the current Title + Keywords signature.
|
| 11 |
|
| 12 |
This module never selects providers/models and never rewrites Title/Keywords.
|
| 13 |
"""
|
|
@@ -17,7 +15,7 @@ import os
|
|
| 17 |
import re
|
| 18 |
from typing import Any, Iterable
|
| 19 |
|
| 20 |
-
METHOD_RESOLVER_VERSION = "smartpaper-
|
| 21 |
METHOD_CAPABILITY_REGISTRY_VERSION = "smartpaper-method-capability-registry-v3"
|
| 22 |
|
| 23 |
# Reader-visible / task-owning method families. Order is intentional:
|
|
@@ -176,51 +174,23 @@ def resolve_method_family(
|
|
| 176 |
*,
|
| 177 |
materials: Iterable[Any] | None = None,
|
| 178 |
) -> dict[str, Any]:
|
| 179 |
-
"""
|
| 180 |
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
|
|
|
| 184 |
"""
|
| 185 |
-
|
| 186 |
-
source_keywords = _keyword_items(keywords)
|
| 187 |
-
text = " ; ".join([source_title] + source_keywords)
|
| 188 |
descriptors = _material_descriptors(materials)
|
| 189 |
-
|
| 190 |
-
specialized_hits = _pattern_hits(text, _SPECIALIZED_METHOD_PATTERNS)
|
| 191 |
-
if specialized_hits:
|
| 192 |
-
capability = method_capability("qualitative")
|
| 193 |
-
return {
|
| 194 |
-
"resolver_version": METHOD_RESOLVER_VERSION,
|
| 195 |
-
"shadow_only": False,
|
| 196 |
-
"method_family": "qualitative",
|
| 197 |
-
"confidence": "SPECIALIZED_METHOD_REDIRECT",
|
| 198 |
-
"reason_codes": ["specialized_method_cue_detected", "redirect_to_qualitative"],
|
| 199 |
-
"title_keyword_hits": [],
|
| 200 |
-
"specialized_method_detected": True,
|
| 201 |
-
"specialized_method_families": [row["method_family"] for row in specialized_hits],
|
| 202 |
-
"specialized_method_hits": specialized_hits,
|
| 203 |
-
"material_hint_families": [],
|
| 204 |
-
"material_count": len(descriptors),
|
| 205 |
-
"derived_policy_lane": capability.get("legacy_policy_lane"),
|
| 206 |
-
"capability": capability,
|
| 207 |
-
}
|
| 208 |
-
|
| 209 |
-
supported_hits = _pattern_hits(text, _SUPPORTED_METHOD_PATTERNS)
|
| 210 |
-
chosen = str((supported_hits[0] if supported_hits else {}).get("method_family") or "qualitative")
|
| 211 |
-
confidence = "AUTO_DETECTED" if supported_hits else "DEFAULT_QUALITATIVE"
|
| 212 |
-
reason_codes = ["explicit_title_keyword_method_cue"] if supported_hits else ["no_explicit_method_cue", "default_qualitative"]
|
| 213 |
-
if len(supported_hits) > 1:
|
| 214 |
-
reason_codes.append("lower_priority_method_cues_present")
|
| 215 |
-
|
| 216 |
-
capability = method_capability(chosen)
|
| 217 |
return {
|
| 218 |
"resolver_version": METHOD_RESOLVER_VERSION,
|
| 219 |
"shadow_only": False,
|
| 220 |
-
"method_family":
|
| 221 |
-
"confidence":
|
| 222 |
-
"reason_codes":
|
| 223 |
-
"title_keyword_hits":
|
| 224 |
"specialized_method_detected": False,
|
| 225 |
"specialized_method_families": [],
|
| 226 |
"specialized_method_hits": [],
|
|
@@ -230,7 +200,6 @@ def resolve_method_family(
|
|
| 230 |
"capability": capability,
|
| 231 |
}
|
| 232 |
|
| 233 |
-
|
| 234 |
def compare_shadow_to_legacy_lane(resolution: dict[str, Any], selected_lane: Any) -> dict[str, Any]:
|
| 235 |
"""Compare inferred design with a legacy AMJ/ASQ lane."""
|
| 236 |
selected = str(selected_lane or "").strip().casefold()
|
|
@@ -252,25 +221,24 @@ def resolve_generation_preflight(
|
|
| 252 |
) -> dict[str, Any]:
|
| 253 |
"""Resolve the two supported designs before any task/quota creation.
|
| 254 |
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
supported production designs is authoritative for the current topic.
|
| 259 |
"""
|
| 260 |
resolution = resolve_method_family(title, keywords, materials=materials)
|
| 261 |
-
family =
|
| 262 |
|
| 263 |
confirmed = str(confirmed_method_family or "").strip().casefold()
|
| 264 |
-
if confirmed in METHOD_FAMILIES
|
| 265 |
family = confirmed
|
| 266 |
capability = method_capability(family)
|
| 267 |
resolution = dict(resolution)
|
| 268 |
resolution.update({
|
| 269 |
"method_family": family,
|
| 270 |
-
"confidence": "
|
| 271 |
"derived_policy_lane": capability.get("legacy_policy_lane"),
|
| 272 |
"capability": capability,
|
| 273 |
-
"reason_codes":
|
| 274 |
})
|
| 275 |
|
| 276 |
capability = method_capability(family)
|
|
@@ -293,3 +261,4 @@ def resolve_generation_preflight(
|
|
| 293 |
"legacy_policy_lane": lane,
|
| 294 |
"capability": capability,
|
| 295 |
}
|
|
|
|
|
|
| 1 |
# -*- coding: utf-8 -*-
|
| 2 |
+
"""Deterministic two-design manual selector and capability preflight for SmartPaper.
|
| 3 |
|
| 4 |
+
Production research design is intentionally limited to two supported paths:
|
| 5 |
+
qualitative research and survey-based quantitative research. New tasks default to
|
| 6 |
+
qualitative research, and the user may explicitly adjust the design before task
|
| 7 |
+
creation. Title, Keywords, and uploaded Research Materials never auto-select or
|
| 8 |
+
change the research design.
|
|
|
|
|
|
|
| 9 |
|
| 10 |
This module never selects providers/models and never rewrites Title/Keywords.
|
| 11 |
"""
|
|
|
|
| 15 |
import re
|
| 16 |
from typing import Any, Iterable
|
| 17 |
|
| 18 |
+
METHOD_RESOLVER_VERSION = "smartpaper-manual-method-selector-v1"
|
| 19 |
METHOD_CAPABILITY_REGISTRY_VERSION = "smartpaper-method-capability-registry-v3"
|
| 20 |
|
| 21 |
# Reader-visible / task-owning method families. Order is intentional:
|
|
|
|
| 174 |
*,
|
| 175 |
materials: Iterable[Any] | None = None,
|
| 176 |
) -> dict[str, Any]:
|
| 177 |
+
"""Return the fixed default design for a new task.
|
| 178 |
|
| 179 |
+
Automatic research-design detection is intentionally disabled. Title,
|
| 180 |
+
Keywords, and Research Materials are accepted for API compatibility only and
|
| 181 |
+
never change the default. New tasks start from qualitative research unless the
|
| 182 |
+
user explicitly selects survey-based quantitative research in preflight.
|
| 183 |
"""
|
| 184 |
+
_ = title, keywords
|
|
|
|
|
|
|
| 185 |
descriptors = _material_descriptors(materials)
|
| 186 |
+
capability = method_capability("qualitative")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 187 |
return {
|
| 188 |
"resolver_version": METHOD_RESOLVER_VERSION,
|
| 189 |
"shadow_only": False,
|
| 190 |
+
"method_family": "qualitative",
|
| 191 |
+
"confidence": "DEFAULT_QUALITATIVE",
|
| 192 |
+
"reason_codes": ["manual_design_control", "default_qualitative"],
|
| 193 |
+
"title_keyword_hits": [],
|
| 194 |
"specialized_method_detected": False,
|
| 195 |
"specialized_method_families": [],
|
| 196 |
"specialized_method_hits": [],
|
|
|
|
| 200 |
"capability": capability,
|
| 201 |
}
|
| 202 |
|
|
|
|
| 203 |
def compare_shadow_to_legacy_lane(resolution: dict[str, Any], selected_lane: Any) -> dict[str, Any]:
|
| 204 |
"""Compare inferred design with a legacy AMJ/ASQ lane."""
|
| 205 |
selected = str(selected_lane or "").strip().casefold()
|
|
|
|
| 221 |
) -> dict[str, Any]:
|
| 222 |
"""Resolve the two supported designs before any task/quota creation.
|
| 223 |
|
| 224 |
+
The default is qualitative research. If the user explicitly selects one of
|
| 225 |
+
the two supported production designs, that selection is authoritative.
|
| 226 |
+
Title, Keywords, and Research Materials never alter the chosen design.
|
|
|
|
| 227 |
"""
|
| 228 |
resolution = resolve_method_family(title, keywords, materials=materials)
|
| 229 |
+
family = "qualitative"
|
| 230 |
|
| 231 |
confirmed = str(confirmed_method_family or "").strip().casefold()
|
| 232 |
+
if confirmed in METHOD_FAMILIES:
|
| 233 |
family = confirmed
|
| 234 |
capability = method_capability(family)
|
| 235 |
resolution = dict(resolution)
|
| 236 |
resolution.update({
|
| 237 |
"method_family": family,
|
| 238 |
+
"confidence": "USER_SELECTION",
|
| 239 |
"derived_policy_lane": capability.get("legacy_policy_lane"),
|
| 240 |
"capability": capability,
|
| 241 |
+
"reason_codes": ["manual_design_control", "user_selected_method_family"],
|
| 242 |
})
|
| 243 |
|
| 244 |
capability = method_capability(family)
|
|
|
|
| 261 |
"legacy_policy_lane": lane,
|
| 262 |
"capability": capability,
|
| 263 |
}
|
| 264 |
+
|
i18n.py
CHANGED
|
@@ -278,14 +278,14 @@ TEXTS: dict[str, dict[str, str]] = {
|
|
| 278 |
"download_asq_template": "📥 一键下载 TXT 访谈模板",
|
| 279 |
"start_asq": "🚀 启动 ASQ 模式生成",
|
| 280 |
"research_materials_label": "研究资料(可选)",
|
| 281 |
-
"research_materials_help": "支持 PDF、TXT、DOC、DOCX、CSV、XLS、XLSX。上传资料用于辅助论文生成
|
| 282 |
"drop_research_materials": "将研究资料拖到这里",
|
| 283 |
"limit_research_materials": "每个文件最大 1 GB · PDF, TXT, DOC, DOCX, CSV, XLS, XLSX",
|
| 284 |
"material_document_use_label": "如何使用上传的 PDF/DOC/DOCX 文件?",
|
| 285 |
"material_use_reference": "作为参考文献资料",
|
| 286 |
"material_use_research": "作为研究资料",
|
| 287 |
-
"detected_method_label": "研究设计(
|
| 288 |
-
"method_detection_explanation": "
|
| 289 |
"method_confirm_label": "调整研究设计",
|
| 290 |
"method_confirm_placeholder": "请选择研究设计",
|
| 291 |
"method_confirmation_required": "研究设计状态异常,请重新选择研究设计。",
|
|
@@ -519,14 +519,14 @@ TEXTS: dict[str, dict[str, str]] = {
|
|
| 519 |
"download_asq_template": "📥 Download TXT Interview Template",
|
| 520 |
"start_asq": "🚀 Start ASQ Generation",
|
| 521 |
"research_materials_label": "Research Materials (Optional)",
|
| 522 |
-
"research_materials_help": "Supports PDF, TXT, DOC, DOCX, CSV, XLS, and XLSX. Uploaded files support paper generation
|
| 523 |
"drop_research_materials": "Drag research materials here",
|
| 524 |
"limit_research_materials": "Up to 1 GB per file · PDF, TXT, DOC, DOCX, CSV, XLS, XLSX",
|
| 525 |
"material_document_use_label": "How should SmartPaper use the uploaded PDF/DOC/DOCX files?",
|
| 526 |
"material_use_reference": "Use as reference literature",
|
| 527 |
"material_use_research": "Use as research materials",
|
| 528 |
-
"detected_method_label": "Research Design (
|
| 529 |
-
"method_detection_explanation": "
|
| 530 |
"method_confirm_label": "Adjust Research Design",
|
| 531 |
"method_confirm_placeholder": "Select a Research Design",
|
| 532 |
"method_confirmation_required": "The Research Design state is invalid. Please select a Research Design again.",
|
|
@@ -760,14 +760,14 @@ TEXTS: dict[str, dict[str, str]] = {
|
|
| 760 |
"download_asq_template": "📥 Скачать TXT-шаблон интервью",
|
| 761 |
"start_asq": "🚀 Запустить формирование в режиме ASQ",
|
| 762 |
"research_materials_label": "Материалы исследования (необязательно)",
|
| 763 |
-
"research_materials_help": "Поддерживаются PDF, TXT, DOC, DOCX, CSV, XLS и XLSX. Загруженные файлы используются как дополнительные исследовательские или справочные материалы
|
| 764 |
"drop_research_materials": "Перетащите исследовательские материалы сюда",
|
| 765 |
"limit_research_materials": "До 1 ГБ на файл · PDF, TXT, DOC, DOCX, CSV, XLS, XLSX",
|
| 766 |
"material_document_use_label": "Как использовать загруженные файлы PDF/DOC/DOCX?",
|
| 767 |
"material_use_reference": "Как научные источники",
|
| 768 |
"material_use_research": "Как исследовательские материалы",
|
| 769 |
-
"detected_method_label": "Дизайн исследования (
|
| 770 |
-
"method_detection_explanation": "
|
| 771 |
"method_confirm_label": "Изменить дизайн исследования",
|
| 772 |
"method_confirm_placeholder": "Выберите дизайн исследования",
|
| 773 |
"method_confirmation_required": "Некорректное состояние дизайна исследования. Выберите дизайн исследования повторно.",
|
|
@@ -1001,14 +1001,14 @@ TEXTS: dict[str, dict[str, str]] = {
|
|
| 1001 |
"download_asq_template": "📥 TXT сұхбат үлгісін жүктеу",
|
| 1002 |
"start_asq": "🚀 ASQ режимінде дайындауды бастау",
|
| 1003 |
"research_materials_label": "Зерттеу материалдары (міндетті емес)",
|
| 1004 |
-
"research_materials_help": "PDF, TXT, DOC, DOCX, CSV, XLS және XLSX форматтары қолдау табады. Жүктелген файлдар қосымша зерттеу немесе анықтамалық материал ретінде пайдаланылады
|
| 1005 |
"drop_research_materials": "Зерттеу материалдарын осы жерге сүйреп әкеліңіз",
|
| 1006 |
"limit_research_materials": "Әр файлға 1 ГБ дейін · PDF, TXT, DOC, DOCX, CSV, XLS, XLSX",
|
| 1007 |
"material_document_use_label": "Жүктелген PDF/DOC/DOCX файлдарын қалай пайдалану керек?",
|
| 1008 |
"material_use_reference": "Ғылыми дереккөз ретінде",
|
| 1009 |
"material_use_research": "Зерттеу материалы ретінде",
|
| 1010 |
-
"detected_method_label": "Зерттеу дизайны (
|
| 1011 |
-
"method_detection_explanation": "
|
| 1012 |
"method_confirm_label": "Зерттеу дизайнын өзгерту",
|
| 1013 |
"method_confirm_placeholder": "Зерттеу дизайнын таңдаңыз",
|
| 1014 |
"method_confirmation_required": "Зерттеу дизайнының күйі жарамсыз. Зерттеу дизайнын қайта таңдаңыз.",
|
|
|
|
| 278 |
"download_asq_template": "📥 一键下载 TXT 访谈模板",
|
| 279 |
"start_asq": "🚀 启动 ASQ 模式生成",
|
| 280 |
"research_materials_label": "研究资料(可选)",
|
| 281 |
+
"research_materials_help": "支持 PDF、TXT、DOC、DOCX、CSV、XLS、XLSX。上传资料用于辅助论文生成。研究设计默认为质性研究,可根据需要调整为问卷量化研究。",
|
| 282 |
"drop_research_materials": "将研究资料拖到这里",
|
| 283 |
"limit_research_materials": "每个文件最大 1 GB · PDF, TXT, DOC, DOCX, CSV, XLS, XLSX",
|
| 284 |
"material_document_use_label": "如何使用上传的 PDF/DOC/DOCX 文件?",
|
| 285 |
"material_use_reference": "作为参考文献资料",
|
| 286 |
"material_use_research": "作为研究资料",
|
| 287 |
+
"detected_method_label": "研究设计(可调整)",
|
| 288 |
+
"method_detection_explanation": "默认为质性研究;生成前可根据需要调整为问卷量化研究。",
|
| 289 |
"method_confirm_label": "调整研究设计",
|
| 290 |
"method_confirm_placeholder": "请选择研究设计",
|
| 291 |
"method_confirmation_required": "研究设计状态异常,请重新选择研究设计。",
|
|
|
|
| 519 |
"download_asq_template": "📥 Download TXT Interview Template",
|
| 520 |
"start_asq": "🚀 Start ASQ Generation",
|
| 521 |
"research_materials_label": "Research Materials (Optional)",
|
| 522 |
+
"research_materials_help": "Supports PDF, TXT, DOC, DOCX, CSV, XLS, and XLSX. Uploaded files support paper generation. Research Design defaults to Qualitative Research and can be adjusted to Survey-Based Quantitative Research.",
|
| 523 |
"drop_research_materials": "Drag research materials here",
|
| 524 |
"limit_research_materials": "Up to 1 GB per file · PDF, TXT, DOC, DOCX, CSV, XLS, XLSX",
|
| 525 |
"material_document_use_label": "How should SmartPaper use the uploaded PDF/DOC/DOCX files?",
|
| 526 |
"material_use_reference": "Use as reference literature",
|
| 527 |
"material_use_research": "Use as research materials",
|
| 528 |
+
"detected_method_label": "Research Design (Adjustable)",
|
| 529 |
+
"method_detection_explanation": "Qualitative Research is selected by default. Before generation, you can adjust the Research Design to Survey-Based Quantitative Research.",
|
| 530 |
"method_confirm_label": "Adjust Research Design",
|
| 531 |
"method_confirm_placeholder": "Select a Research Design",
|
| 532 |
"method_confirmation_required": "The Research Design state is invalid. Please select a Research Design again.",
|
|
|
|
| 760 |
"download_asq_template": "📥 Скачать TXT-шаблон интервью",
|
| 761 |
"start_asq": "🚀 Запустить формирование в режиме ASQ",
|
| 762 |
"research_materials_label": "Материалы исследования (необязательно)",
|
| 763 |
+
"research_materials_help": "Поддерживаются PDF, TXT, DOC, DOCX, CSV, XLS и XLSX. Загруженные файлы используются как дополнительные исследовательские или справочные материалы. По умолчанию выбрано качественное исследование; при необхо��имости дизайн можно изменить на количественное исследование на основе опроса.",
|
| 764 |
"drop_research_materials": "Перетащите исследовательские материалы сюда",
|
| 765 |
"limit_research_materials": "До 1 ГБ на файл · PDF, TXT, DOC, DOCX, CSV, XLS, XLSX",
|
| 766 |
"material_document_use_label": "Как использовать загруженные файлы PDF/DOC/DOCX?",
|
| 767 |
"material_use_reference": "Как научные источники",
|
| 768 |
"material_use_research": "Как исследовательские материалы",
|
| 769 |
+
"detected_method_label": "Дизайн исследования (можно изменить)",
|
| 770 |
+
"method_detection_explanation": "По умолчанию выбрано качественное исследование. До начала генерации дизайн можно изменить на количественное исследование на основе опроса.",
|
| 771 |
"method_confirm_label": "Изменить дизайн исследования",
|
| 772 |
"method_confirm_placeholder": "Выберите дизайн исследования",
|
| 773 |
"method_confirmation_required": "Некорректное состояние дизайна исследования. Выберите дизайн исследования повторно.",
|
|
|
|
| 1001 |
"download_asq_template": "📥 TXT сұхбат үлгісін жүктеу",
|
| 1002 |
"start_asq": "🚀 ASQ режимінде дайындауды бастау",
|
| 1003 |
"research_materials_label": "Зерттеу материалдары (міндетті емес)",
|
| 1004 |
+
"research_materials_help": "PDF, TXT, DOC, DOCX, CSV, XLS және XLSX форматтары қолдау табады. Жүктелген файлдар қосымша зерттеу немесе анықтамалық материал ретінде пайдаланылады. Әдепкі бойынша сапалық зерттеу таңдалады; қажет болса, дизайнды сауалнамаға негізделген сандық зерттеуге өзгертуге болады.",
|
| 1005 |
"drop_research_materials": "Зерттеу материалдарын осы жерге сүйреп әкеліңіз",
|
| 1006 |
"limit_research_materials": "Әр файлға 1 ГБ дейін · PDF, TXT, DOC, DOCX, CSV, XLS, XLSX",
|
| 1007 |
"material_document_use_label": "Жүктелген PDF/DOC/DOCX файлдарын қалай пайдалану керек?",
|
| 1008 |
"material_use_reference": "Ғылыми дереккөз ретінде",
|
| 1009 |
"material_use_research": "Зерттеу материалы ретінде",
|
| 1010 |
+
"detected_method_label": "Зерттеу дизайны (өзгертуге болады)",
|
| 1011 |
+
"method_detection_explanation": "Әдепкі бойынша сапалық зерттеу таңдалады. Гене��ацияны бастамас бұрын зерттеу дизайнын сауалнамаға негізделген сандық зерттеуге өзгертуге болады.",
|
| 1012 |
"method_confirm_label": "Зерттеу дизайнын өзгерту",
|
| 1013 |
"method_confirm_placeholder": "Зерттеу дизайнын таңдаңыз",
|
| 1014 |
"method_confirmation_required": "Зерттеу дизайнының күйі жарамсыз. Зерттеу дизайнын қайта таңдаңыз.",
|