Spaces:
Sleeping
Sleeping
Commit ·
f19d5b6
1
Parent(s): 7b40dcf
all agents
Browse files- .env +2 -0
- README.md +6 -5
- __pycache__/agent.cpython-312.pyc +0 -0
- __pycache__/tools.cpython-312.pyc +0 -0
- agent.py +137 -0
- app.py +562 -0
- chart_abstract_bars.html +7 -0
- chart_abstract_heatmap.html +7 -0
- chart_abstract_hierarchy.html +7 -0
- chart_abstract_intertopic.html +7 -0
- emb_abstract.npy +3 -0
- error.txt +494 -0
- gitattributes +35 -0
- labels_abstract.json +962 -0
- loaded_data.csv +0 -0
- requirements (2).txt +14 -0
- summaries_abstract.json +0 -0
- tools.py +606 -0
.env
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
MISTRAL_API_KEY=sQPLT99qJXMprBGXkn11xJQWsZiMN61T
|
README.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
sdk: gradio
|
| 7 |
-
sdk_version: 6.
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
|
|
|
| 10 |
---
|
| 11 |
|
| 12 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 1 |
---
|
| 2 |
+
title: RQ5
|
| 3 |
+
emoji: 🏢
|
| 4 |
+
colorFrom: pink
|
| 5 |
+
colorTo: blue
|
| 6 |
sdk: gradio
|
| 7 |
+
sdk_version: 6.12.0
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
+
license: mit
|
| 11 |
---
|
| 12 |
|
| 13 |
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
__pycache__/agent.cpython-312.pyc
ADDED
|
Binary file (5.25 kB). View file
|
|
|
__pycache__/tools.cpython-312.pyc
ADDED
|
Binary file (36.2 kB). View file
|
|
|
agent.py
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# agent.py — Intelligent Thematic Analysis Orchestrator
|
| 2 |
+
# Implements a ReAct (Reasoning and Acting) agent powered by Mistral AI.
|
| 3 |
+
# Adheres to the Braun & Clarke (2006) protocol for qualitative data analysis.
|
| 4 |
+
|
| 5 |
+
from dotenv import load_dotenv
|
| 6 |
+
load_dotenv()
|
| 7 |
+
|
| 8 |
+
from langchain_mistralai import ChatMistralAI
|
| 9 |
+
from langgraph.prebuilt import create_react_agent
|
| 10 |
+
from langgraph.checkpoint.memory import MemorySaver
|
| 11 |
+
from tools import (
|
| 12 |
+
load_scopus_csv,
|
| 13 |
+
run_bertopic_discovery,
|
| 14 |
+
label_topics_with_llm,
|
| 15 |
+
consolidate_into_themes,
|
| 16 |
+
compare_with_taxonomy,
|
| 17 |
+
generate_comparison_csv,
|
| 18 |
+
export_narrative,
|
| 19 |
+
)
|
| 20 |
+
|
| 21 |
+
# --- Agent Behavior Definition ---
|
| 22 |
+
|
| 23 |
+
AGENT_CORE_PROTOCOL = """
|
| 24 |
+
================================================================================
|
| 25 |
+
IDENTITY: Qualitative Research Assistant (Agentic)
|
| 26 |
+
================================================================================
|
| 27 |
+
You are an expert in computational thematic analysis, specifically trained to
|
| 28 |
+
execute the Braun & Clarke (2006) six-phase framework. You analyze academic
|
| 29 |
+
corpora from Scopus to identify trends, codes, and themes.
|
| 30 |
+
|
| 31 |
+
Your environment is a Gradio interface with:
|
| 32 |
+
1. A persistent chat window for step-by-step guidance.
|
| 33 |
+
2. A Review Table for manual researcher validation of codes and themes.
|
| 34 |
+
3. Visualization tabs for inter-topic distance and hierarchy.
|
| 35 |
+
4. Download capabilities for official reports.
|
| 36 |
+
|
| 37 |
+
================================================================================
|
| 38 |
+
OPERATIONAL DIRECTIVES
|
| 39 |
+
================================================================================
|
| 40 |
+
|
| 41 |
+
DIRECTIVE 1: SEQUENTIAL EXECUTION
|
| 42 |
+
Analyze one phase at a time. Do not skip steps or combine tools from
|
| 43 |
+
different phases into a single response.
|
| 44 |
+
|
| 45 |
+
DIRECTIVE 2: MANDATORY VALIDATION GATES (4 TOTAL)
|
| 46 |
+
You MUST stop and wait for researcher confirmation at these points:
|
| 47 |
+
- GATE 1: After Phase 2 (Generation of initial codes)
|
| 48 |
+
- GATE 2: After Phase 3 (Synthesis of broader themes)
|
| 49 |
+
- GATE 3: After Phase 4 (Saturation and coverage check)
|
| 50 |
+
- GATE 4: After Phase 5.5 (Taxonomy alignment)
|
| 51 |
+
|
| 52 |
+
Explicitly announce "⛔ VALIDATION GATE [N]" when reaching these stops.
|
| 53 |
+
|
| 54 |
+
DIRECTIVE 3: HUMAN-IN-THE-LOOP (REVIEW TABLE)
|
| 55 |
+
All decisions regarding renaming, approving, or discarding findings occur
|
| 56 |
+
in the 'Review Table'. Never ask for approvals directly in chat text.
|
| 57 |
+
|
| 58 |
+
DIRECTIVE 4: DATA INTEGRITY
|
| 59 |
+
Use only tool-generated outputs. Do not speculate on paper counts or
|
| 60 |
+
topic names that are not backed by the underlying data structures.
|
| 61 |
+
|
| 62 |
+
DIRECTIVE 5: COLUMN EXCLUSION
|
| 63 |
+
Only perform clustering on the 'Abstract' or 'Title' columns.
|
| 64 |
+
Keywords and citation data are to be ignored for BERTopic clustering.
|
| 65 |
+
|
| 66 |
+
================================================================================
|
| 67 |
+
TOOL ARSENAL
|
| 68 |
+
================================================================================
|
| 69 |
+
|
| 70 |
+
1. load_scopus_csv: Initial data ingestion and cleanup. (Phase 1)
|
| 71 |
+
2. run_bertopic_discovery: Semantic clustering and chart generation. (Phase 2)
|
| 72 |
+
3. label_topics_with_llm: Automated induction of concept labels. (Phase 2)
|
| 73 |
+
4. consolidate_into_themes: High-level synthesis of related topics. (Phase 3)
|
| 74 |
+
5. compare_with_taxonomy: Alignment with the PAJAIS framework (25 categories). (Phase 5.5)
|
| 75 |
+
6. generate_comparison_csv: Cross-run validation (Abstract vs Title). (Phase 6)
|
| 76 |
+
7. export_narrative: Composition of the final Section 7 Discussion draft. (Phase 6)
|
| 77 |
+
|
| 78 |
+
================================================================================
|
| 79 |
+
EXECUTION PHASES (BRAUN & CLARKE 2006)
|
| 80 |
+
================================================================================
|
| 81 |
+
|
| 82 |
+
- Phase 1: Familiarize with data. Run 'load_scopus_csv'. Ask for the 'run_key' (abstract/title).
|
| 83 |
+
- Phase 2: Generating initial codes. Run 'run_bertopic_discovery' then 'label_topics_with_llm'.
|
| 84 |
+
* STOP GATE 1: Wait for Review Table submission.
|
| 85 |
+
- Phase 3: Searching for themes. Run 'consolidate_into_themes'.
|
| 86 |
+
* STOP GATE 2: Validate theme groupings.
|
| 87 |
+
- Phase 4: Reviewing themes. Perform saturation check.
|
| 88 |
+
* STOP GATE 3: Confirm coverage.
|
| 89 |
+
- Phase 5: Defining and naming. Write definitions for each theme.
|
| 90 |
+
- Phase 5.5: PAJAIS Mapping. Run 'compare_with_taxonomy'. Identify NOVEL gaps.
|
| 91 |
+
* STOP GATE 4: Final verification of mapping.
|
| 92 |
+
- Phase 6: Producing the report. Run 'generate_comparison_csv' and 'export_narrative'.
|
| 93 |
+
|
| 94 |
+
================================================================================
|
| 95 |
+
VERBAL STYLE
|
| 96 |
+
================================================================================
|
| 97 |
+
- Be scholarly, structured, and helpful.
|
| 98 |
+
- Use emojis (🔬, 📊, 🎯, ⛔) to demarcate status updates.
|
| 99 |
+
- Always include a progress line in the format:
|
| 100 |
+
PHASE_STATUS: 1=✅,2=⬜,3=⬜,4=⬜,5=⬜,5.5=⬜,6=⬜
|
| 101 |
+
|
| 102 |
+
================================================================================
|
| 103 |
+
END OF PROTOCOL
|
| 104 |
+
================================================================================
|
| 105 |
+
"""
|
| 106 |
+
|
| 107 |
+
# --- Component Initialization ---
|
| 108 |
+
|
| 109 |
+
# Primary LLM instance for cognitive task processing
|
| 110 |
+
mistral_model_instance = ChatMistralAI(
|
| 111 |
+
model="mistral-large-latest",
|
| 112 |
+
temperature=0.2,
|
| 113 |
+
)
|
| 114 |
+
|
| 115 |
+
# Collection of specialized tools accessible to the agent
|
| 116 |
+
analysis_tool_suite = [
|
| 117 |
+
load_scopus_csv,
|
| 118 |
+
run_bertopic_discovery,
|
| 119 |
+
label_topics_with_llm,
|
| 120 |
+
consolidate_into_themes,
|
| 121 |
+
compare_with_taxonomy,
|
| 122 |
+
generate_comparison_csv,
|
| 123 |
+
export_narrative,
|
| 124 |
+
]
|
| 125 |
+
|
| 126 |
+
# State-aware memory handler for multi-turn conversations
|
| 127 |
+
session_memory_handler = MemorySaver()
|
| 128 |
+
|
| 129 |
+
# Final agent object construction
|
| 130 |
+
agent = create_react_agent(
|
| 131 |
+
model=mistral_model_instance,
|
| 132 |
+
tools=analysis_tool_suite,
|
| 133 |
+
checkpointer=session_memory_handler,
|
| 134 |
+
prompt=AGENT_CORE_PROTOCOL,
|
| 135 |
+
)
|
| 136 |
+
|
| 137 |
+
# Documentation Verification: 4 Mandatory gates verified.
|
app.py
ADDED
|
@@ -0,0 +1,562 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# app.py — Thematic Analysis Dashboard
|
| 2 |
+
# A specialized Gradio interface for BERTopic-based research.
|
| 3 |
+
# Supports light-theme aesthetics and Braun & Clarke (2006) workflow.
|
| 4 |
+
|
| 5 |
+
import sys
|
| 6 |
+
import gradio as gr
|
| 7 |
+
import json
|
| 8 |
+
import os
|
| 9 |
+
import uuid
|
| 10 |
+
import glob
|
| 11 |
+
import pandas as pd
|
| 12 |
+
import traceback
|
| 13 |
+
import datetime
|
| 14 |
+
import time
|
| 15 |
+
from agent import agent
|
| 16 |
+
|
| 17 |
+
# --- Output Configuration ---
|
| 18 |
+
# Ensures emoji and special characters display correctly on all platforms.
|
| 19 |
+
try:
|
| 20 |
+
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
| 21 |
+
sys.stderr.reconfigure(encoding="utf-8", errors="replace")
|
| 22 |
+
except AttributeError:
|
| 23 |
+
pass
|
| 24 |
+
|
| 25 |
+
# --- Constants & Data Schemas ---
|
| 26 |
+
|
| 27 |
+
COLUMNS_FOR_REVIEW = [
|
| 28 |
+
"#", "Topic Label", "Top Evidence Sentence", "Reasoning",
|
| 29 |
+
"Sent.", "Papers", "Approve", "Rename To",
|
| 30 |
+
]
|
| 31 |
+
|
| 32 |
+
TEMPLATE_EMPTY_DF = pd.DataFrame(
|
| 33 |
+
columns=COLUMNS_FOR_REVIEW,
|
| 34 |
+
data=[["", "", "", "", 0, 0, False, ""]],
|
| 35 |
+
)
|
| 36 |
+
|
| 37 |
+
SYSTEM_DOWNLOAD_FILES = [
|
| 38 |
+
"narrative.txt", "comparison.csv", "themes.json",
|
| 39 |
+
"taxonomy_map.json", "labels_abstract.json", "labels_title.json",
|
| 40 |
+
]
|
| 41 |
+
|
| 42 |
+
STORAGE_FILES_TO_PURGE = [
|
| 43 |
+
"loaded_data.csv",
|
| 44 |
+
"summaries_abstract.json", "summaries_title.json",
|
| 45 |
+
"emb_abstract.npy", "emb_title.npy",
|
| 46 |
+
"labels_abstract.json", "labels_title.json",
|
| 47 |
+
"themes.json", "themes_abstract.json", "themes_title.json",
|
| 48 |
+
"taxonomy_map.json", "comparison.csv", "narrative.txt",
|
| 49 |
+
"chart_abstract_intertopic.html", "chart_abstract_bars.html",
|
| 50 |
+
"chart_abstract_hierarchy.html", "chart_abstract_heatmap.html",
|
| 51 |
+
"chart_title_intertopic.html", "chart_title_bars.html",
|
| 52 |
+
"chart_title_hierarchy.html", "chart_title_heatmap.html",
|
| 53 |
+
]
|
| 54 |
+
|
| 55 |
+
VISUALIZATION_GALLERY = [
|
| 56 |
+
("Intertopic Map — Abstract", "chart_abstract_intertopic.html"),
|
| 57 |
+
("Frequency Bars — Abstract", "chart_abstract_bars.html"),
|
| 58 |
+
("Hierarchy / Treemap — Abstract", "chart_abstract_hierarchy.html"),
|
| 59 |
+
("Similarity Heatmap — Abstract", "chart_abstract_heatmap.html"),
|
| 60 |
+
("Intertopic Map — Title", "chart_title_intertopic.html"),
|
| 61 |
+
("Frequency Bars — Title", "chart_title_bars.html"),
|
| 62 |
+
("Hierarchy / Treemap — Title", "chart_title_hierarchy.html"),
|
| 63 |
+
("Similarity Heatmap — Title", "chart_title_heatmap.html"),
|
| 64 |
+
]
|
| 65 |
+
|
| 66 |
+
WORKFLOW_STEPS = [
|
| 67 |
+
("1","① Load"), ("2","② Codes"), ("3","③ Themes"),
|
| 68 |
+
("4","④ Review"), ("5","⑤ Names"), ("5.5","⑤½ PAJAIS"), ("6","⑥ Report"),
|
| 69 |
+
]
|
| 70 |
+
|
| 71 |
+
# Patterns representing potential state corruption
|
| 72 |
+
ERROR_SIGNATURES = [
|
| 73 |
+
"INVALID_CHAT_HISTORY",
|
| 74 |
+
"ToolMessage",
|
| 75 |
+
"tool_calls that do not have a corresponding",
|
| 76 |
+
]
|
| 77 |
+
|
| 78 |
+
# --- Modern Dashboard SaaS Theme (CSS) ---
|
| 79 |
+
PREMIUM_SAAS_STYLE = """
|
| 80 |
+
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap');
|
| 81 |
+
|
| 82 |
+
body, .gradio-container {
|
| 83 |
+
background-color: #f3f5f8 !important; /* Soft premium gray-blue background */
|
| 84 |
+
font-family: 'Plus Jakarta Sans', sans-serif !important;
|
| 85 |
+
color: #1a1d20 !important;
|
| 86 |
+
}
|
| 87 |
+
.gradio-container {
|
| 88 |
+
max-width: 1440px !important;
|
| 89 |
+
margin: 20px auto !important;
|
| 90 |
+
padding: 0 20px !important;
|
| 91 |
+
}
|
| 92 |
+
.header-bar {
|
| 93 |
+
background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
|
| 94 |
+
color: #ffffff !important;
|
| 95 |
+
padding: 24px 32px;
|
| 96 |
+
border-radius: 16px;
|
| 97 |
+
margin-bottom: 24px;
|
| 98 |
+
box-shadow: 0 10px 25px -5px rgba(15, 23, 42, 0.2);
|
| 99 |
+
display: flex;
|
| 100 |
+
justify-content: space-between;
|
| 101 |
+
align-items: center;
|
| 102 |
+
}
|
| 103 |
+
.header-bar h1 {
|
| 104 |
+
color: #ffffff !important;
|
| 105 |
+
font-size: 1.8rem !important;
|
| 106 |
+
font-weight: 800 !important;
|
| 107 |
+
margin: 0 !important;
|
| 108 |
+
letter-spacing: -0.02em;
|
| 109 |
+
}
|
| 110 |
+
.header-bar p {
|
| 111 |
+
color: #94a3b8 !important;
|
| 112 |
+
margin: 4px 0 0 0 !important;
|
| 113 |
+
font-size: 0.95rem;
|
| 114 |
+
}
|
| 115 |
+
.dashboard-panel {
|
| 116 |
+
background: #ffffff;
|
| 117 |
+
border-radius: 16px;
|
| 118 |
+
border: 1px solid #e2e8f0;
|
| 119 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -2px rgba(0, 0, 0, 0.025);
|
| 120 |
+
padding: 24px;
|
| 121 |
+
margin-bottom: 24px;
|
| 122 |
+
}
|
| 123 |
+
.section-title {
|
| 124 |
+
color: #475569 !important;
|
| 125 |
+
font-weight: 700 !important;
|
| 126 |
+
font-size: 0.75rem !important;
|
| 127 |
+
letter-spacing: 0.1em;
|
| 128 |
+
text-transform: uppercase;
|
| 129 |
+
margin-bottom: 16px;
|
| 130 |
+
border-bottom: 2px solid #f1f5f9;
|
| 131 |
+
padding-bottom: 8px;
|
| 132 |
+
}
|
| 133 |
+
.action-btn-primary {
|
| 134 |
+
background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%) !important;
|
| 135 |
+
border: none !important;
|
| 136 |
+
color: white !important;
|
| 137 |
+
font-weight: 600 !important;
|
| 138 |
+
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3) !important;
|
| 139 |
+
transition: transform 0.2s, box-shadow 0.2s !important;
|
| 140 |
+
}
|
| 141 |
+
.action-btn-primary:hover {
|
| 142 |
+
transform: translateY(-2px) !important;
|
| 143 |
+
box-shadow: 0 6px 16px rgba(37, 99, 235, 0.4) !important;
|
| 144 |
+
}
|
| 145 |
+
.action-btn-success {
|
| 146 |
+
background: linear-gradient(135deg, #10b981 0%, #059669 100%) !important;
|
| 147 |
+
border: none !important;
|
| 148 |
+
color: white !important;
|
| 149 |
+
font-weight: 700 !important;
|
| 150 |
+
}
|
| 151 |
+
/* Chatbot custom styling */
|
| 152 |
+
.bubble-wrap { border-radius: 12px !important; }
|
| 153 |
+
.message.user { background-color: #f1f5f9 !important; color: #1e293b !important; border-radius: 12px 12px 0 12px !important; }
|
| 154 |
+
.message.bot { background-color: #eff6ff !important; border: 1px solid #bfdbfe !important; color: #1e293b !important; border-radius: 12px 12px 12px 0 !important; }
|
| 155 |
+
/* Review Table Styling */
|
| 156 |
+
.review-table { min-height: 400px !important; }
|
| 157 |
+
.review-table table { border-collapse: collapse !important; width: 100% !important; }
|
| 158 |
+
.review-table td, .review-table th {
|
| 159 |
+
padding: 12px !important;
|
| 160 |
+
word-wrap: break-word !important;
|
| 161 |
+
word-break: break-word !important;
|
| 162 |
+
white-space: normal !important;
|
| 163 |
+
text-align: left !important;
|
| 164 |
+
}
|
| 165 |
+
.review-table th { background-color: #f1f5f9 !important; font-weight: 700 !important; color: #1e293b !important; }
|
| 166 |
+
.review-table td { border-bottom: 1px solid #e2e8f0 !important; }
|
| 167 |
+
footer { display: none !important; }
|
| 168 |
+
"""
|
| 169 |
+
|
| 170 |
+
# --- Helper Functions ---
|
| 171 |
+
|
| 172 |
+
def create_message_object(role_name: str, text_payload: str) -> dict:
|
| 173 |
+
"""Builds a schema-compliant message for Gradio 6+."""
|
| 174 |
+
return {"role": role_name, "content": str(text_payload)}
|
| 175 |
+
|
| 176 |
+
def update_exchange_history(logs: list, user_input: str, agent_output: str) -> list:
|
| 177 |
+
"""Appends a new conversation turn to the logs."""
|
| 178 |
+
return logs + [create_message_object("user", user_input), create_message_object("assistant", agent_output)]
|
| 179 |
+
|
| 180 |
+
def record_system_failure(error_msg: str, operation_context: str = "") -> None:
|
| 181 |
+
"""Logs errors to an external file for persistent debugging."""
|
| 182 |
+
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
| 183 |
+
with open("error.txt", "a", encoding="utf-8") as storage_file:
|
| 184 |
+
storage_file.write(f"\n{'-'*60}\nTS: {timestamp}\nCTX: {operation_context}\n"
|
| 185 |
+
f"MSG: {error_msg}\nTRACE:\n{traceback.format_exc()}\n")
|
| 186 |
+
try:
|
| 187 |
+
print(f"❌ [Error] {operation_context}: {str(error_msg)[:100]}")
|
| 188 |
+
except:
|
| 189 |
+
pass
|
| 190 |
+
|
| 191 |
+
def format_output_safely(raw_component) -> str:
|
| 192 |
+
"""Ensures complex agent outputs are converted to clean strings."""
|
| 193 |
+
if raw_component is None: return ""
|
| 194 |
+
if isinstance(raw_component, str): return raw_component
|
| 195 |
+
if isinstance(raw_component, list):
|
| 196 |
+
return "\n".join([format_output_safely(item) for item in raw_component])
|
| 197 |
+
if isinstance(raw_component, dict):
|
| 198 |
+
return str(raw_component.get("content", str(raw_component)))
|
| 199 |
+
if hasattr(raw_component, "content"):
|
| 200 |
+
return format_output_safely(raw_component.content)
|
| 201 |
+
return str(raw_component)
|
| 202 |
+
|
| 203 |
+
def _enrich_with_ai_council(agent_response: str) -> str:
|
| 204 |
+
"""Extracts and displays AI Council reasoning from labels JSON files."""
|
| 205 |
+
reasoning_data = []
|
| 206 |
+
|
| 207 |
+
# Try to load reasoning from labels files
|
| 208 |
+
for scenario in ("abstract", "title"):
|
| 209 |
+
label_file = f"labels_{scenario}.json"
|
| 210 |
+
if os.path.exists(label_file):
|
| 211 |
+
try:
|
| 212 |
+
with open(label_file, encoding="utf-8") as f:
|
| 213 |
+
labels = json.load(f)
|
| 214 |
+
for item in labels[:5]: # Show top 5 topics
|
| 215 |
+
if item.get("reasoning"):
|
| 216 |
+
reasoning_data.append({
|
| 217 |
+
"label": item.get("label", ""),
|
| 218 |
+
"reasoning": item.get("reasoning", ""),
|
| 219 |
+
"confidence": item.get("confidence", 0),
|
| 220 |
+
})
|
| 221 |
+
except:
|
| 222 |
+
pass
|
| 223 |
+
|
| 224 |
+
if reasoning_data:
|
| 225 |
+
reasoning_section = "\n\n🧠 **AI COUNCIL REASONING** (Multi-Perspective Analysis):\n\n"
|
| 226 |
+
for idx, item in enumerate(reasoning_data, 1):
|
| 227 |
+
reasoning_section += f"**Topic {idx}: {item['label']}** (Confidence: {item['confidence']:.2f})\n"
|
| 228 |
+
reasoning_section += f"└─ {item['reasoning']}\n\n"
|
| 229 |
+
return agent_response + reasoning_section
|
| 230 |
+
return agent_response
|
| 231 |
+
|
| 232 |
+
def check_analysis_milestones() -> dict:
|
| 233 |
+
"""Probes the filesystem to determine which analysis phases are finished."""
|
| 234 |
+
return {
|
| 235 |
+
"1": os.path.exists("loaded_data.csv"),
|
| 236 |
+
"2": os.path.exists("labels_abstract.json") or os.path.exists("labels_title.json"),
|
| 237 |
+
"3": os.path.exists("themes.json"),
|
| 238 |
+
"4": os.path.exists("themes.json"),
|
| 239 |
+
"5": os.path.exists("themes.json"),
|
| 240 |
+
"5.5": os.path.exists("taxonomy_map.json"),
|
| 241 |
+
"6": os.path.exists("narrative.txt"),
|
| 242 |
+
}
|
| 243 |
+
|
| 244 |
+
def generate_progress_indicator(state_map: dict) -> str:
|
| 245 |
+
"""Renders a visual progress bar based on completed milestones."""
|
| 246 |
+
element_html = ""
|
| 247 |
+
for identifier, title in WORKFLOW_STEPS:
|
| 248 |
+
is_finished = state_map.get(identifier, False)
|
| 249 |
+
bg_fill = "#3b82f6" if is_finished else "#f8fafc"
|
| 250 |
+
txt_color = "#ffffff" if is_finished else "#64748b"
|
| 251 |
+
border_clr = "#3b82f6" if is_finished else "#cbd5e1"
|
| 252 |
+
shadow = "box-shadow: 0 2px 4px rgba(59,130,246,0.3);" if is_finished else ""
|
| 253 |
+
element_html += (
|
| 254 |
+
f'<span style="display:inline-block;padding:6px 16px;margin:4px;'
|
| 255 |
+
f'background:{bg_fill};border:1px solid {border_clr};border-radius:8px;'
|
| 256 |
+
f'font-size:0.85rem;font-weight:600;color:{txt_color};{shadow} transition:all 0.3s;"> '
|
| 257 |
+
f'{"✓ " if is_finished else ""}{title}</span>'
|
| 258 |
+
)
|
| 259 |
+
return (
|
| 260 |
+
f'<div style="background:#ffffff;padding:16px 20px;border-radius:12px;'
|
| 261 |
+
f'border:1px solid #e2e8f0;margin-bottom:24px;box-shadow:0 1px 3px rgba(0,0,0,0.05);">'
|
| 262 |
+
f'<div style="color:#94a3b8;font-size:0.7rem;font-weight:800;letter-spacing:1px;margin-bottom:8px;text-transform:uppercase;">Analysis Progress</div>'
|
| 263 |
+
f'<div style="display:flex;flex-wrap:wrap;">{element_html}</div></div>'
|
| 264 |
+
)
|
| 265 |
+
|
| 266 |
+
def extract_milestones_from_text(feedback_text, existing_map: dict) -> dict:
|
| 267 |
+
"""Parses agent responses for 'PHASE_STATUS' markers to update the UI."""
|
| 268 |
+
clean_text = format_output_safely(feedback_text)
|
| 269 |
+
updated_tracker = dict(existing_map)
|
| 270 |
+
for row in clean_text.splitlines():
|
| 271 |
+
if "PHASE_STATUS:" in row:
|
| 272 |
+
payload = row.split("PHASE_STATUS:", 1)[1].strip()
|
| 273 |
+
for chunk in payload.split(","):
|
| 274 |
+
if "=" in chunk:
|
| 275 |
+
p_id, p_val = chunk.split("=", 1)
|
| 276 |
+
updated_tracker[p_id.strip()] = "✅" in p_val
|
| 277 |
+
for k, v in check_analysis_milestones().items():
|
| 278 |
+
updated_tracker[k] = updated_tracker.get(k, False) or v
|
| 279 |
+
return updated_tracker
|
| 280 |
+
|
| 281 |
+
# --- Data Loading Logic ---
|
| 282 |
+
|
| 283 |
+
def refresh_review_component() -> pd.DataFrame:
|
| 284 |
+
"""Populates the Review Table based on the latest JSON artifacts."""
|
| 285 |
+
if os.path.exists("taxonomy_map.json"):
|
| 286 |
+
raw_map = json.loads(open("taxonomy_map.json", encoding="utf-8").read())
|
| 287 |
+
rows_gen = []
|
| 288 |
+
for i, node in enumerate(raw_map):
|
| 289 |
+
note = (f"→ NOVEL" if node.get("is_novel", False)
|
| 290 |
+
else f"→ PAJAIS: {node.get('pajais_match','')}")
|
| 291 |
+
rows_gen.append({"#": i, "Topic Label": node.get("theme_name", ""),
|
| 292 |
+
"Top Evidence Sentence": note, "Reasoning": node.get("reasoning", ""),
|
| 293 |
+
"Sent.": 0, "Papers": 0, "Approve": True, "Rename To": ""})
|
| 294 |
+
return pd.DataFrame(rows_gen, columns=COLUMNS_FOR_REVIEW) if rows_gen else TEMPLATE_EMPTY_DF
|
| 295 |
+
|
| 296 |
+
if os.path.exists("themes.json"):
|
| 297 |
+
theme_set = json.loads(open("themes.json", encoding="utf-8").read())
|
| 298 |
+
rows_gen = []
|
| 299 |
+
for i, th in enumerate(theme_set):
|
| 300 |
+
count_val = th.get("total_sentences", 0)
|
| 301 |
+
rows_gen.append({"#": i, "Topic Label": th.get("theme_name", ""),
|
| 302 |
+
"Top Evidence Sentence": (th.get("representative_sentences", [""])[0][:110] if th.get("representative_sentences") else ""),
|
| 303 |
+
"Reasoning": th.get("reasoning", ""),
|
| 304 |
+
"Sent.": count_val, "Papers": max(1, count_val // 10), "Approve": False, "Rename To": ""})
|
| 305 |
+
return pd.DataFrame(rows_gen, columns=COLUMNS_FOR_REVIEW) if rows_gen else TEMPLATE_EMPTY_DF
|
| 306 |
+
|
| 307 |
+
for scenario in ("abstract", "title"):
|
| 308 |
+
label_file = f"labels_{scenario}.json"
|
| 309 |
+
if os.path.exists(label_file):
|
| 310 |
+
label_data = json.loads(open(label_file, encoding="utf-8").read())
|
| 311 |
+
rows_gen = []
|
| 312 |
+
for item in label_data:
|
| 313 |
+
sc = item.get("count", 0)
|
| 314 |
+
rows_gen.append({"#": item.get("topic_id", 0), "Topic Label": item.get("label", "Concept"),
|
| 315 |
+
"Top Evidence Sentence": (item.get("nearest_sentences", [""])[0][:110] if item.get("nearest_sentences") else ""),
|
| 316 |
+
"Reasoning": item.get("reasoning", ""),
|
| 317 |
+
"Sent.": sc, "Papers": max(1, sc // 10), "Approve": False, "Rename To": ""})
|
| 318 |
+
return pd.DataFrame(rows_gen, columns=COLUMNS_FOR_REVIEW) if rows_gen else TEMPLATE_EMPTY_DF
|
| 319 |
+
return TEMPLATE_EMPTY_DF
|
| 320 |
+
|
| 321 |
+
def fetch_available_downloads():
|
| 322 |
+
"""Identifies generated report files for the download box."""
|
| 323 |
+
active_files = [f for f in SYSTEM_DOWNLOAD_FILES if os.path.exists(f)]
|
| 324 |
+
return active_files if active_files else None
|
| 325 |
+
|
| 326 |
+
def get_available_charts() -> list:
|
| 327 |
+
"""Returns list of available chart files that have been generated."""
|
| 328 |
+
available = []
|
| 329 |
+
for chart_name, chart_file in VISUALIZATION_GALLERY:
|
| 330 |
+
if os.path.exists(chart_file):
|
| 331 |
+
available.append(chart_name)
|
| 332 |
+
return available if available else ["No charts available yet"]
|
| 333 |
+
|
| 334 |
+
def refresh_charts_display() -> tuple[list, str]:
|
| 335 |
+
"""Refresh chart selector with available charts and return first chart for display."""
|
| 336 |
+
available_charts = get_available_charts()
|
| 337 |
+
first_chart = available_charts[0] if available_charts[0] != "No charts available yet" else None
|
| 338 |
+
|
| 339 |
+
# Find matching file
|
| 340 |
+
chart_file = None
|
| 341 |
+
if first_chart:
|
| 342 |
+
for name, file in VISUALIZATION_GALLERY:
|
| 343 |
+
if name == first_chart:
|
| 344 |
+
chart_file = file
|
| 345 |
+
break
|
| 346 |
+
|
| 347 |
+
display_html = embed_thematic_chart(chart_file) if chart_file else embed_thematic_chart(None)
|
| 348 |
+
return available_charts, display_html
|
| 349 |
+
|
| 350 |
+
def embed_thematic_chart(file_name: str) -> str:
|
| 351 |
+
"""Creates a sandboxed iframe for Plotly charts."""
|
| 352 |
+
if not file_name or not os.path.exists(file_name):
|
| 353 |
+
return "<div style='color:#b2bec3;padding:50px;text-align:center;font-weight:bold;'>📊 No charts generated yet. Complete Phase 2 to unlock visualizations.</div>"
|
| 354 |
+
try:
|
| 355 |
+
with open(file_name, encoding="utf-8") as f:
|
| 356 |
+
raw_html = f.read()
|
| 357 |
+
sanitized = raw_html.replace("&", "&").replace('"', """).replace("'", "'")
|
| 358 |
+
return (f'<iframe srcdoc="{sanitized}" style="width:100%;height:600px;border:1px solid #e2e8f0;border-radius:10px;" '
|
| 359 |
+
f'sandbox="allow-scripts allow-same-origin"></iframe>')
|
| 360 |
+
except Exception as e:
|
| 361 |
+
return f"<div style='color:red;padding:20px;'>Error loading chart: {str(e)}</div>"
|
| 362 |
+
|
| 363 |
+
# --- Interaction Core ---
|
| 364 |
+
|
| 365 |
+
def invoke_analysis_agent(user_query: str, session_uid: str, retry_limit: int = 3) -> tuple[str, str]:
|
| 366 |
+
"""Communication bridge between UI and LangGraph Agent. Enriches output with AI Council reasoning."""
|
| 367 |
+
working_uid = session_uid
|
| 368 |
+
for attempt in range(retry_limit):
|
| 369 |
+
try:
|
| 370 |
+
runtime_config = {"configurable": {"thread_id": working_uid}}
|
| 371 |
+
agent_result = agent.invoke({"messages": [{"role": "user", "content": user_query}]}, config=runtime_config)
|
| 372 |
+
base_response = ""
|
| 373 |
+
|
| 374 |
+
for response_node in reversed(agent_result.get("messages", [])):
|
| 375 |
+
if hasattr(response_node, "type") and response_node.type == "ai":
|
| 376 |
+
base_response = format_output_safely(response_node.content)
|
| 377 |
+
break
|
| 378 |
+
if isinstance(response_node, dict) and response_node.get("role") in ("assistant", "ai"):
|
| 379 |
+
base_response = format_output_safely(response_node.get("content", ""))
|
| 380 |
+
break
|
| 381 |
+
|
| 382 |
+
# Enrich with AI Council reasoning if available
|
| 383 |
+
enriched_response = _enrich_with_ai_council(base_response)
|
| 384 |
+
return enriched_response if enriched_response else (base_response or "Agent standby."), working_uid
|
| 385 |
+
except Exception as failure:
|
| 386 |
+
trace_str = str(failure)
|
| 387 |
+
if any(sig in trace_str for sig in ERROR_SIGNATURES):
|
| 388 |
+
new_uid = str(uuid.uuid4())
|
| 389 |
+
record_system_failure(trace_str, f"Session Migration [{working_uid[:6]} -> {new_uid[:6]}]")
|
| 390 |
+
working_uid = new_uid
|
| 391 |
+
time.sleep(1)
|
| 392 |
+
continue
|
| 393 |
+
if "429" in trace_str or "limit" in trace_str.lower():
|
| 394 |
+
backoff_time = 35 * (attempt + 1)
|
| 395 |
+
time.sleep(backoff_time)
|
| 396 |
+
continue
|
| 397 |
+
record_system_failure(trace_str, "Agent Link Failure")
|
| 398 |
+
return f"Service Error: {trace_str}", working_uid
|
| 399 |
+
return "Connection timeout.", working_uid
|
| 400 |
+
|
| 401 |
+
# --- Event Callback Handlers ---
|
| 402 |
+
|
| 403 |
+
def handle_file_upload(file_data, chat_log, session_id, progress_data):
|
| 404 |
+
"""Processes Scopus CSV upload and initializes Phase 1."""
|
| 405 |
+
if file_data is None:
|
| 406 |
+
return chat_log, session_id, progress_data, generate_progress_indicator(progress_data), refresh_review_component(), fetch_available_downloads(), gr.update(choices=get_available_charts()), embed_thematic_chart(None)
|
| 407 |
+
try:
|
| 408 |
+
local_path = file_data.name if hasattr(file_data, "name") else str(file_data)
|
| 409 |
+
init_query = (f"System: Data source uploaded at {local_path}. "
|
| 410 |
+
"Execute Phase 1: Summary Statistics and Column Profiling.")
|
| 411 |
+
bot_reply, updated_id = invoke_analysis_agent(init_query, session_id)
|
| 412 |
+
new_history = update_exchange_history(chat_log, "Dataset Uploaded", bot_reply)
|
| 413 |
+
new_progress = extract_milestones_from_text(bot_reply, progress_data)
|
| 414 |
+
available_charts, chart_html = refresh_charts_display()
|
| 415 |
+
return new_history, updated_id, new_progress, generate_progress_indicator(new_progress), refresh_review_component(), fetch_available_downloads(), gr.update(choices=available_charts), chart_html
|
| 416 |
+
except Exception as err:
|
| 417 |
+
record_system_failure(str(err), "OnUpload")
|
| 418 |
+
return chat_log, session_id, progress_data, generate_progress_indicator(progress_data), refresh_review_component(), fetch_available_downloads(), gr.update(choices=get_available_charts()), embed_thematic_chart(None)
|
| 419 |
+
|
| 420 |
+
def handle_text_submission(user_text, chat_log, session_id, progress_data):
|
| 421 |
+
"""Handles standard researcher queries and stage transitions."""
|
| 422 |
+
if not user_text.strip():
|
| 423 |
+
available_charts, chart_html = refresh_charts_display()
|
| 424 |
+
return chat_log, "", session_id, progress_data, generate_progress_indicator(progress_data), refresh_review_component(), fetch_available_downloads(), gr.update(choices=available_charts), chart_html
|
| 425 |
+
try:
|
| 426 |
+
bot_reply, updated_id = invoke_analysis_agent(user_text, session_id)
|
| 427 |
+
new_history = update_exchange_history(chat_log, user_text, bot_reply)
|
| 428 |
+
new_progress = extract_milestones_from_text(bot_reply, progress_data)
|
| 429 |
+
available_charts, chart_html = refresh_charts_display()
|
| 430 |
+
return new_history, "", updated_id, new_progress, generate_progress_indicator(new_progress), refresh_review_component(), fetch_available_downloads(), gr.update(choices=available_charts), chart_html
|
| 431 |
+
except Exception as err:
|
| 432 |
+
record_system_failure(str(err), "OnTextSubmit")
|
| 433 |
+
available_charts, chart_html = refresh_charts_display()
|
| 434 |
+
return chat_log, "", session_id, progress_data, generate_progress_indicator(progress_data), refresh_review_component(), fetch_available_downloads(), gr.update(choices=available_charts), chart_html
|
| 435 |
+
|
| 436 |
+
def handle_table_submission(review_data, chat_log, session_id, progress_data):
|
| 437 |
+
"""Processes decisions made by the researcher in the Review Table."""
|
| 438 |
+
try:
|
| 439 |
+
current_df = review_data if isinstance(review_data, pd.DataFrame) else pd.DataFrame(review_data)
|
| 440 |
+
validated_rows = current_df[current_df["Approve"].astype(bool)]
|
| 441 |
+
override_map = {str(r["#"]): r["Rename To"] for _, r in validated_rows.iterrows() if str(r["Rename To"]).strip()}
|
| 442 |
+
summary_msg = f"Researcher Decision: {len(validated_rows)} rows verified. Overrides: {list(override_map.values())[:3]}"
|
| 443 |
+
|
| 444 |
+
agent_instruction = (f"The researcher has finalized decisions on the Review Table.\n"
|
| 445 |
+
f"Manual Overrides: {json.dumps(override_map)}\n"
|
| 446 |
+
"Transitioning to the next analysis phase.")
|
| 447 |
+
bot_reply, updated_id = invoke_analysis_agent(agent_instruction, session_id)
|
| 448 |
+
new_history = update_exchange_history(chat_log, "[Table Interaction]", bot_reply)
|
| 449 |
+
new_progress = extract_milestones_from_text(bot_reply, progress_data)
|
| 450 |
+
available_charts, chart_html = refresh_charts_display()
|
| 451 |
+
return new_history, updated_id, new_progress, generate_progress_indicator(new_progress), refresh_review_component(), fetch_available_downloads(), gr.update(choices=available_charts), chart_html
|
| 452 |
+
except Exception as err:
|
| 453 |
+
record_system_failure(str(err), "OnTableSubmit")
|
| 454 |
+
return chat_log, session_id, progress_data, generate_progress_indicator(progress_data), refresh_review_component(), fetch_available_downloads(), gr.update(choices=get_available_charts()), embed_thematic_chart(None)
|
| 455 |
+
|
| 456 |
+
def handle_clear_session(session_id):
|
| 457 |
+
"""Purges all caches and restarts the unique session."""
|
| 458 |
+
for artifact in STORAGE_FILES_TO_PURGE:
|
| 459 |
+
if os.path.exists(artifact):
|
| 460 |
+
try: os.remove(artifact)
|
| 461 |
+
except: pass
|
| 462 |
+
fresh_id = str(uuid.uuid4())
|
| 463 |
+
default_progress = {k: False for k in ["1", "2", "3", "4", "5", "5.5", "6"]}
|
| 464 |
+
return [], fresh_id, default_progress, generate_progress_indicator(default_progress)
|
| 465 |
+
|
| 466 |
+
# --- UI Construction ---
|
| 467 |
+
|
| 468 |
+
START_PROGRESS = {k: False for k in ["1","2","3","4","5","5.5","6"]}
|
| 469 |
+
|
| 470 |
+
with gr.Blocks(title="Nexus Workspace") as thematic_app:
|
| 471 |
+
|
| 472 |
+
# State Holders
|
| 473 |
+
current_session_id = gr.State(str(uuid.uuid4()))
|
| 474 |
+
session_history = gr.State([])
|
| 475 |
+
session_progress = gr.State(START_PROGRESS)
|
| 476 |
+
|
| 477 |
+
# Header Bar
|
| 478 |
+
with gr.Column(elem_classes="header-bar"):
|
| 479 |
+
gr.Markdown("# 🔬 Nexus Research Workspace\nAgentic Analysis & Taxonomy Generation Engine")
|
| 480 |
+
|
| 481 |
+
# Progress Indicator (Full width now)
|
| 482 |
+
stage_bar_component = gr.HTML(value=generate_progress_indicator(START_PROGRESS))
|
| 483 |
+
|
| 484 |
+
# Two column layout: Left Sidebar (Controls) | Right Main Panel (Chat & Tables)
|
| 485 |
+
with gr.Row():
|
| 486 |
+
|
| 487 |
+
# LEFT SIDEBAR
|
| 488 |
+
with gr.Column(scale=1, min_width=320, elem_classes="dashboard-panel"):
|
| 489 |
+
gr.HTML('<div class="section-title">1. Data Source Config</div>')
|
| 490 |
+
scopus_uploader = gr.File(label="Upload Dataset (.csv)", file_types=[".csv"], height=130)
|
| 491 |
+
gr.Markdown("*Uploading file immediately triggers Data Profiling (Phase 1).*")
|
| 492 |
+
|
| 493 |
+
gr.HTML('<div style="margin-top:24px;" class="section-title">Session Management</div>')
|
| 494 |
+
wipe_session_btn = gr.Button("🗑️ Restart Analysis Session", variant="secondary")
|
| 495 |
+
|
| 496 |
+
gr.HTML('<div style="margin-top:24px;" class="section-title">System Artifacts</div>')
|
| 497 |
+
download_handler = gr.File(value=fetch_available_downloads(), label="Generated Reports & Export", file_count="multiple", interactive=False, height=180)
|
| 498 |
+
|
| 499 |
+
# RIGHT MAIN PANEL
|
| 500 |
+
with gr.Column(scale=3):
|
| 501 |
+
|
| 502 |
+
with gr.Tabs():
|
| 503 |
+
with gr.Tab("💬 AI Workspace & Command Center", elem_classes="dashboard-panel"):
|
| 504 |
+
chat_display = gr.Chatbot(label="Agent Dialogue", height=450, show_label=False, avatar_images=(None, "https://huggingface.co/front/assets/huggingface_logo-noborder.svg"))
|
| 505 |
+
with gr.Row():
|
| 506 |
+
chat_input_box = gr.Textbox(placeholder="Prompt the agent (e.g., 'run abstract', 'continue')...", scale=5, container=False)
|
| 507 |
+
chat_send_btn = gr.Button("Execute Task 🚀", variant="primary", scale=1, elem_classes="action-btn-primary")
|
| 508 |
+
|
| 509 |
+
with gr.Tab("📋 Data Verification & Results", elem_classes="dashboard-panel"):
|
| 510 |
+
with gr.Group():
|
| 511 |
+
gr.Markdown("#### Review & Approve Topics with AI Council Reasoning")
|
| 512 |
+
interactive_review_table = gr.Dataframe(
|
| 513 |
+
value=refresh_review_component(),
|
| 514 |
+
headers=COLUMNS_FOR_REVIEW,
|
| 515 |
+
datatype=["number", "str", "str", "str", "number", "number", "bool", "str"],
|
| 516 |
+
interactive=True, wrap=True, row_count=(10, "dynamic"),
|
| 517 |
+
column_widths=["5%", "15%", "20%", "30%", "8%", "8%", "7%", "15%"],
|
| 518 |
+
elem_classes="review-table"
|
| 519 |
+
)
|
| 520 |
+
table_submit_btn = gr.Button("✅ Confirm Selections & Proceed", variant="primary", size="lg", elem_classes="action-btn-success")
|
| 521 |
+
|
| 522 |
+
with gr.Tab("📈 Intelligence Visuals", elem_classes="dashboard-panel"):
|
| 523 |
+
visual_selector = gr.Dropdown(choices=[v[0] for v in VISUALIZATION_GALLERY], label="Select Chart View")
|
| 524 |
+
visual_frame = gr.HTML("<div style='color:#94a3b8;padding:60px;text-align:center;font-size:1.1rem;'>No visualizations generated yet.<br/>Complete Phase 2 to unlock interactive charts.</div>")
|
| 525 |
+
|
| 526 |
+
# --- Communication Links (Logic Binding) ---
|
| 527 |
+
|
| 528 |
+
scopus_uploader.change(
|
| 529 |
+
fn=handle_file_upload,
|
| 530 |
+
inputs=[scopus_uploader, session_history, current_session_id, session_progress],
|
| 531 |
+
outputs=[chat_display, current_session_id, session_progress, stage_bar_component, interactive_review_table, download_handler, visual_selector, visual_frame]
|
| 532 |
+
)
|
| 533 |
+
|
| 534 |
+
chat_send_btn.click(
|
| 535 |
+
fn=handle_text_submission,
|
| 536 |
+
inputs=[chat_input_box, session_history, current_session_id, session_progress],
|
| 537 |
+
outputs=[chat_display, chat_input_box, current_session_id, session_progress, stage_bar_component, interactive_review_table, download_handler, visual_selector, visual_frame]
|
| 538 |
+
)
|
| 539 |
+
|
| 540 |
+
chat_input_box.submit(
|
| 541 |
+
fn=handle_text_submission,
|
| 542 |
+
inputs=[chat_input_box, session_history, current_session_id, session_progress],
|
| 543 |
+
outputs=[chat_display, chat_input_box, current_session_id, session_progress, stage_bar_component, interactive_review_table, download_handler, visual_selector, visual_frame]
|
| 544 |
+
)
|
| 545 |
+
|
| 546 |
+
table_submit_btn.click(
|
| 547 |
+
fn=handle_table_submission,
|
| 548 |
+
inputs=[interactive_review_table, session_history, current_session_id, session_progress],
|
| 549 |
+
outputs=[chat_display, current_session_id, session_progress, stage_bar_component, interactive_review_table, download_handler, visual_selector, visual_frame]
|
| 550 |
+
)
|
| 551 |
+
|
| 552 |
+
visual_selector.change(
|
| 553 |
+
fn=lambda chart_name: embed_thematic_chart(next((f for n, f in VISUALIZATION_GALLERY if n == chart_name), None)),
|
| 554 |
+
inputs=visual_selector,
|
| 555 |
+
outputs=visual_frame
|
| 556 |
+
)
|
| 557 |
+
|
| 558 |
+
wipe_session_btn.click(fn=handle_clear_session, inputs=[current_session_id], outputs=[chat_display, current_session_id, session_progress, stage_bar_component])
|
| 559 |
+
|
| 560 |
+
# --- Execution ---
|
| 561 |
+
if __name__ == "__main__":
|
| 562 |
+
thematic_app.launch(ssr_mode=False, show_error=True, css=PREMIUM_SAAS_STYLE, theme=gr.themes.Default(primary_hue="blue"))
|
chart_abstract_bars.html
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<html>
|
| 2 |
+
<head><meta charset="utf-8" /></head>
|
| 3 |
+
<body>
|
| 4 |
+
<div> <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>
|
| 5 |
+
<script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.2.min.js"></script> <div id="8221104b-c6ca-4a4c-aae9-3666ddcd8f40" class="plotly-graph-div" style="height:100%; width:100%;"></div> <script type="text/javascript"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById("8221104b-c6ca-4a4c-aae9-3666ddcd8f40")) { Plotly.newPlot( "8221104b-c6ca-4a4c-aae9-3666ddcd8f40", [{"alignmentgroup":"True","hovertemplate":"Theme ID=%{x}\u003cbr\u003eSentence Count=%{y}\u003cbr\u003ecolor=%{marker.color}\u003cextra\u003e\u003c\u002fextra\u003e","legendgroup":"","marker":{"color":[7,7,16,8,10,9,21,11,12,12,9,256,7,22,4,14,75,10,35,8,6,5,2,9,42,26,105,13,8,14],"coloraxis":"coloraxis","pattern":{"shape":""}},"name":"","offsetgroup":"","orientation":"v","showlegend":false,"textposition":"auto","x":["Topic 0","Topic 1","Topic 2","Topic 3","Topic 4","Topic 5","Topic 6","Topic 7","Topic 8","Topic 9","Topic 10","Topic 11","Topic 12","Topic 13","Topic 14","Topic 15","Topic 16","Topic 17","Topic 18","Topic 19","Topic 20","Topic 21","Topic 22","Topic 23","Topic 24","Topic 25","Topic 26","Topic 27","Topic 28","Topic 29"],"xaxis":"x","y":[7,7,16,8,10,9,21,11,12,12,9,256,7,22,4,14,75,10,35,8,6,5,2,9,42,26,105,13,8,14],"yaxis":"y","type":"bar"}], {"template":{"data":{"barpolar":[{"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"contour"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"heatmapgl"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"heatmap"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"histogram2dcontour"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"histogram2d"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"white","showlakes":true,"showland":true,"subunitcolor":"#C8D4E3"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"white","polar":{"angularaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""},"bgcolor":"white","radialaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"yaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"zaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"baxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"bgcolor":"white","caxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"Theme ID"}},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"Sentence Count"}},"coloraxis":{"colorbar":{"title":{"text":"color"}},"colorscale":[[0.0,"rgb(36, 86, 104)"],[0.16666666666666666,"rgb(15, 114, 121)"],[0.3333333333333333,"rgb(13, 143, 129)"],[0.5,"rgb(57, 171, 126)"],[0.6666666666666666,"rgb(110, 197, 116)"],[0.8333333333333334,"rgb(169, 220, 103)"],[1.0,"rgb(237, 239, 93)"]]},"legend":{"tracegroupgap":0},"title":{"text":"Thematic Weight Distribution (abstract) — Top 30"},"barmode":"relative"}, {"responsive": true} ) }; </script> </div>
|
| 6 |
+
</body>
|
| 7 |
+
</html>
|
chart_abstract_heatmap.html
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<html>
|
| 2 |
+
<head><meta charset="utf-8" /></head>
|
| 3 |
+
<body>
|
| 4 |
+
<div> <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>
|
| 5 |
+
<script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.2.min.js"></script> <div id="cec3a5de-21fd-4ded-a2be-d9fc5359a14c" class="plotly-graph-div" style="height:100%; width:100%;"></div> <script type="text/javascript"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById("cec3a5de-21fd-4ded-a2be-d9fc5359a14c")) { Plotly.newPlot( "cec3a5de-21fd-4ded-a2be-d9fc5359a14c", [{"colorscale":[[0.0,"rgb(255,255,217)"],[0.125,"rgb(237,248,177)"],[0.25,"rgb(199,233,180)"],[0.375,"rgb(127,205,187)"],[0.5,"rgb(65,182,196)"],[0.625,"rgb(29,145,192)"],[0.75,"rgb(34,94,168)"],[0.875,"rgb(37,52,148)"],[1.0,"rgb(8,29,88)"]],"x":["T0","T1","T2","T3","T4","T5","T6","T7","T8","T9","T10","T11","T12","T13","T14","T15","T16","T17","T18","T19"],"y":["T0","T1","T2","T3","T4","T5","T6","T7","T8","T9","T10","T11","T12","T13","T14","T15","T16","T17","T18","T19"],"z":[[1.0000000000000004,0.23619725141574188,0.22321015455237514,0.2721920355600348,0.3129303539691807,0.2979841043094167,0.25269311381314796,0.19288502530975268,0.1581836593155168,0.13695810713828993,0.2786916780968524,0.33902669678518726,0.22550123759725324,0.32655976507033335,0.12857102144233257,0.1601217806595722,0.21638481280105598,0.16665322766482477,0.10745650390489864,0.15295764778254456],[0.23619725141574188,0.9999999999999996,0.3509560204509583,0.35933989792429216,0.4221020560554452,0.2125657249959742,0.4990186179461911,0.32245454022416037,0.3394333710625305,0.12519434537464608,0.4564395674049032,0.5772388947864888,0.4002668531861741,0.20046069715730458,0.3682835733022637,0.5161533746226681,0.5592308519026437,0.22087164654032637,0.42690729507047587,0.21973544915616233],[0.22321015455237514,0.3509560204509583,0.9999999999999993,0.2570475709139104,0.19690769625857754,0.1010235734393243,0.5213621928967852,0.23630358991551087,0.5006335980639872,0.4065633274312057,0.3824612062651696,0.37452455275514995,0.08962041708943136,0.47880748840015097,-0.004497864929305797,0.319087042167529,0.22873109067310338,0.0920758369693352,0.21040229403751357,0.026909613264496028],[0.2721920355600348,0.35933989792429216,0.2570475709139104,1.0000000000000007,0.37870821278715044,0.23898730910039775,0.3948858723628516,0.2964088046393456,0.20680688033886577,0.3155060865730671,0.4383149739096737,0.38734603222355046,0.29091421902292713,0.35276009048052304,0.291202468213809,0.3077564237052307,0.42783677691239463,0.31859468408650216,0.43405459240822153,0.3357830806868503],[0.3129303539691807,0.4221020560554452,0.19690769625857754,0.37870821278715044,1.0000000000000007,0.17656501814718284,0.4619205445167655,0.47518804517595126,0.1720961577310822,0.12538532183270065,0.33933953859381677,0.5270764614106644,0.5048983221820891,0.2208914527772245,0.426901790286459,0.51226420715263,0.611461469389913,0.3470475761730012,0.6099177463580671,0.5179972611610987],[0.2979841043094167,0.2125657249959742,0.1010235734393243,0.23898730910039775,0.17656501814718284,1.0000000000000007,0.1362306062242101,-0.01949782311666156,0.14417979488177277,0.012107702133946248,0.1920146344807704,0.18980231968451217,0.005225699151622696,0.14808492637135023,0.08747125130298207,0.006281529929985929,0.1843523337254387,0.08775351462296473,0.08127507301766307,0.07686730452459807],[0.25269311381314796,0.4990186179461911,0.5213621928967852,0.3948858723628516,0.4619205445167655,0.1362306062242101,1.0000000000000002,0.353423424249897,0.36192756203794707,0.28596620598078093,0.5319067872396102,0.49061116364421764,0.27555970836847765,0.49573096385564724,0.2050053838442417,0.568490967020995,0.4688153010694191,0.25370638756593716,0.45204766400304264,0.23633353677437033],[0.19288502530975268,0.32245454022416037,0.23630358991551087,0.2964088046393456,0.47518804517595126,-0.01949782311666156,0.353423424249897,1.000000000000001,0.11813130798989904,0.07630458970329217,0.341128631163864,0.40481375710338224,0.4172356790301816,0.24724812954308834,0.2341591798124463,0.35546519666212356,0.3201691230187853,0.40465780640305354,0.4242581024348122,0.41362474682541983],[0.1581836593155168,0.3394333710625305,0.5006335980639872,0.20680688033886577,0.1720961577310822,0.14417979488177277,0.36192756203794707,0.11813130798989904,1.0000000000000004,0.3129767494787584,0.40393130759450213,0.39532429631408944,0.09705746006595296,0.20632856161680221,0.08296386459705486,0.22284144129424233,0.2568952824298002,0.12991509743915813,0.13021607341265912,0.034276636324565624],[0.13695810713828993,0.12519434537464608,0.4065633274312057,0.3155060865730671,0.12538532183270065,0.012107702133946248,0.28596620598078093,0.07630458970329217,0.3129767494787584,1.0000000000000002,0.3248258986955962,0.10887679889667526,-0.034918746938326334,0.4221134396403942,0.038962665038420406,0.19429328090104572,0.14006304197763678,0.26968633393254915,0.15500647808269052,0.07812737711677208],[0.2786916780968524,0.4564395674049032,0.3824612062651696,0.4383149739096737,0.33933953859381677,0.1920146344807704,0.5319067872396102,0.341128631163864,0.40393130759450213,0.3248258986955962,1.0000000000000007,0.559039622456517,0.20617632829760085,0.43804680644235056,0.18693476705581494,0.36257447463262427,0.3397340102466211,0.35399804326340356,0.42985166704234457,0.21544928198615756],[0.33902669678518726,0.5772388947864888,0.37452455275514995,0.38734603222355046,0.5270764614106644,0.18980231968451217,0.49061116364421764,0.40481375710338224,0.39532429631408944,0.10887679889667526,0.559039622456517,1.0000000000000004,0.40368038190672173,0.33594664579278194,0.32694118434768676,0.4619652039790795,0.5039051346774421,0.2687856210549698,0.57279038407541,0.37743793490669575],[0.22550123759725324,0.4002668531861741,0.08962041708943136,0.29091421902292713,0.5048983221820891,0.005225699151622696,0.27555970836847765,0.4172356790301816,0.09705746006595296,-0.034918746938326334,0.20617632829760085,0.40368038190672173,1.0000000000000024,0.09628172042967911,0.4875621101251404,0.3877647199543583,0.6104214594624793,0.22204567342289885,0.44300832767088344,0.4135411004676654],[0.32655976507033335,0.20046069715730458,0.47880748840015097,0.35276009048052304,0.2208914527772245,0.14808492637135023,0.49573096385564724,0.24724812954308834,0.20632856161680221,0.4221134396403942,0.43804680644235056,0.33594664579278194,0.09628172042967911,1.0000000000000009,0.08163490110085982,0.15071435665176566,0.1753838200260897,0.21664013521988712,0.24140822564084327,0.18133542056010082],[0.12857102144233257,0.3682835733022637,-0.004497864929305797,0.291202468213809,0.426901790286459,0.08747125130298207,0.2050053838442417,0.2341591798124463,0.08296386459705486,0.038962665038420406,0.18693476705581494,0.32694118434768676,0.4875621101251404,0.08163490110085982,1.000000000000001,0.2680433194066457,0.5231503427791034,0.28009322502875467,0.4969089811349746,0.4360214853800436],[0.1601217806595722,0.5161533746226681,0.319087042167529,0.3077564237052307,0.51226420715263,0.006281529929985929,0.568490967020995,0.35546519666212356,0.22284144129424233,0.19429328090104572,0.36257447463262427,0.4619652039790795,0.3877647199543583,0.15071435665176566,0.2680433194066457,1.0000000000000002,0.5756062750068166,0.28711183723490086,0.5654570053879202,0.25499501708805483],[0.21638481280105598,0.5592308519026437,0.22873109067310338,0.42783677691239463,0.611461469389913,0.1843523337254387,0.4688153010694191,0.3201691230187853,0.2568952824298002,0.14006304197763678,0.3397340102466211,0.5039051346774421,0.6104214594624793,0.1753838200260897,0.5231503427791034,0.5756062750068166,1.0000000000000013,0.29930338301663306,0.5954201177156471,0.43759552265480856],[0.16665322766482477,0.22087164654032637,0.0920758369693352,0.31859468408650216,0.3470475761730012,0.08775351462296473,0.25370638756593716,0.40465780640305354,0.12991509743915813,0.26968633393254915,0.35399804326340356,0.2687856210549698,0.22204567342289885,0.21664013521988712,0.28009322502875467,0.28711183723490086,0.29930338301663306,1.0000000000000009,0.3656474556569358,0.47661223990615315],[0.10745650390489864,0.42690729507047587,0.21040229403751357,0.43405459240822153,0.6099177463580671,0.08127507301766307,0.45204766400304264,0.4242581024348122,0.13021607341265912,0.15500647808269052,0.42985166704234457,0.57279038407541,0.44300832767088344,0.24140822564084327,0.4969089811349746,0.5654570053879202,0.5954201177156471,0.3656474556569358,1.0000000000000009,0.5363662913884306],[0.15295764778254456,0.21973544915616233,0.026909613264496028,0.3357830806868503,0.5179972611610987,0.07686730452459807,0.23633353677437033,0.41362474682541983,0.034276636324565624,0.07812737711677208,0.21544928198615756,0.37743793490669575,0.4135411004676654,0.18133542056010082,0.4360214853800436,0.25499501708805483,0.43759552265480856,0.47661223990615315,0.5363662913884306,1.0000000000000009]],"type":"heatmap"}], {"template":{"data":{"barpolar":[{"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"contour"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"heatmapgl"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"heatmap"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"histogram2dcontour"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"histogram2d"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"white","showlakes":true,"showland":true,"subunitcolor":"#C8D4E3"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"white","polar":{"angularaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""},"bgcolor":"white","radialaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"yaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"zaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"baxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"bgcolor":"white","caxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2}}},"title":{"text":"Semantic Proximity Heatmap (abstract)"}}, {"responsive": true} ) }; </script> </div>
|
| 6 |
+
</body>
|
| 7 |
+
</html>
|
chart_abstract_hierarchy.html
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<html>
|
| 2 |
+
<head><meta charset="utf-8" /></head>
|
| 3 |
+
<body>
|
| 4 |
+
<div> <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>
|
| 5 |
+
<script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.2.min.js"></script> <div id="247649d8-c9c5-46ee-8e9c-d36485f2a5d9" class="plotly-graph-div" style="height:100%; width:100%;"></div> <script type="text/javascript"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById("247649d8-c9c5-46ee-8e9c-d36485f2a5d9")) { Plotly.newPlot( "247649d8-c9c5-46ee-8e9c-d36485f2a5d9", [{"domain":{"x":[0.0,1.0],"y":[0.0,1.0]},"hovertemplate":"label=%{label}\u003cbr\u003evalue=%{value}\u003cbr\u003eparent=%{parent}\u003cextra\u003e\u003c\u002fextra\u003e","labels":["ID:0","ID:1","ID:2","ID:3","ID:4","ID:5","ID:6","ID:7","ID:8","ID:9","ID:10","ID:11","ID:12","ID:13","ID:14","ID:15","ID:16","ID:17","ID:18","ID:19","ID:20","ID:21","ID:22","ID:23","ID:24","ID:25","ID:26","ID:27","ID:28","ID:29","ID:30","ID:31","ID:32","ID:33","ID:34","ID:35","ID:36","ID:37","ID:38","ID:39","ID:40","ID:41","ID:42","ID:43","ID:44","ID:45","ID:46","ID:47","ID:48","ID:49","ID:50","ID:51","ID:52","ID:53","ID:54","ID:55","ID:56","ID:57","ID:58","ID:59","ID:60","ID:61","ID:62","ID:63","ID:64","ID:65","ID:66","ID:67","ID:68","ID:69","ID:70","ID:71","ID:72","ID:73","ID:74","ID:75","ID:76","ID:77","ID:78","ID:79","ID:80","ID:81","ID:82","ID:83","ID:84","ID:85","ID:86","ID:87","ID:88","ID:89","ID:90","ID:91","ID:92","ID:93","ID:94","ID:95","ID:96","ID:97","ID:98","ID:99","ID:100","ID:101","ID:102","ID:103","ID:104","ID:105","ID:106","ID:107","ID:108","ID:109","ID:110","ID:111","ID:112","ID:113","ID:114","ID:115","ID:116","ID:117","ID:118","ID:119","ID:120","ID:121","ID:122","ID:123","ID:124","ID:125","ID:126","ID:127","ID:128","ID:129","ID:130","ID:131","ID:132","ID:133","ID:134","ID:135","ID:136","ID:137","ID:138","ID:139","ID:140","ID:141","ID:142","ID:143","ID:144","ID:145","ID:146","ID:147","ID:148","ID:149","ID:150","ID:151","ID:152","ID:153","ID:154","ID:155","ID:156","ID:157","ID:158","ID:159","ID:160","ID:161","ID:162","ID:163","ID:164","ID:165","ID:166","ID:167","ID:168","ID:169","ID:170","ID:171","ID:172","ID:173","ID:174","ID:175","ID:176","ID:177","ID:178","ID:179","ID:180","ID:181","ID:182","ID:183","ID:184","ID:185","ID:186","ID:187","ID:188","ID:189","ID:190","ID:191","ID:192","ID:193","ID:194","ID:195","ID:196","ID:197","ID:198","ID:199","ID:200","ID:201","ID:202","ID:203","ID:204","ID:205","ID:206","ID:207","ID:208","ID:209","ID:210","ID:211","ID:212","ID:213","ID:214","ID:215","ID:216","ID:217","ID:218","ID:219","ID:220","ID:221","ID:222","ID:223","ID:224","ID:225","ID:226","ID:227","ID:228","ID:229","ID:230","ID:231","ID:232","ID:233","ID:234","ID:235","ID:236","ID:237","ID:238","ID:239","ID:240","ID:241","ID:242","ID:243","ID:244","ID:245"],"name":"","parents":["Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus","Corpus"],"values":[7,7,16,8,10,9,21,11,12,12,9,256,7,22,4,14,75,10,35,8,6,5,2,9,42,26,105,13,8,14,11,19,33,8,36,17,9,15,16,3,16,15,20,3,3,19,6,45,59,9,3,7,2,6,16,59,9,6,6,20,25,21,9,8,5,24,13,12,12,6,4,2,30,4,12,4,2,21,63,16,10,2,41,9,3,10,86,5,21,7,35,4,5,11,80,32,13,5,6,4,5,21,4,3,50,6,30,15,4,3,12,5,26,4,8,23,7,15,6,58,7,3,17,14,12,3,10,1,4,2,12,4,6,3,40,4,3,9,3,12,8,6,2,1,4,5,3,1,6,11,7,2,6,1,3,1,5,2,10,1,4,1,1,1,1,38,6,4,10,3,2,2,2,5,6,6,5,9,2,2,4,14,18,11,12,18,3,3,3,5,26,4,7,2,7,2,5,12,6,4,3,3,3,10,7,17,5,1,1,1,3,6,4,7,11,21,9,3,2,3,5,2,2,6,4,2,3,2,3,7,6,1,2,2,5,5,7,1,3,1,1,2,4,5,1,2],"type":"treemap"}], {"template":{"data":{"barpolar":[{"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"contour"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"heatmapgl"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"heatmap"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"histogram2dcontour"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"histogram2d"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"white","showlakes":true,"showland":true,"subunitcolor":"#C8D4E3"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"white","polar":{"angularaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""},"bgcolor":"white","radialaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"yaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"zaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"baxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"bgcolor":"white","caxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2}}},"legend":{"tracegroupgap":0},"title":{"text":"Topological Hierarchy (abstract)"}}, {"responsive": true} ) }; </script> </div>
|
| 6 |
+
</body>
|
| 7 |
+
</html>
|
chart_abstract_intertopic.html
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<html>
|
| 2 |
+
<head><meta charset="utf-8" /></head>
|
| 3 |
+
<body>
|
| 4 |
+
<div> <script type="text/javascript">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>
|
| 5 |
+
<script charset="utf-8" src="https://cdn.plot.ly/plotly-2.35.2.min.js"></script> <div id="c08326d9-7f80-4d6a-a531-03148b76bcc2" class="plotly-graph-div" style="height:100%; width:100%;"></div> <script type="text/javascript"> window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById("c08326d9-7f80-4d6a-a531-03148b76bcc2")) { Plotly.newPlot( "c08326d9-7f80-4d6a-a531-03148b76bcc2", [{"hovertemplate":"Factor 1=%{x}\u003cbr\u003eFactor 2=%{y}\u003cbr\u003esize=%{marker.size}\u003cbr\u003etext=%{text}\u003cbr\u003ecolor=%{marker.color}\u003cextra\u003e\u003c\u002fextra\u003e","legendgroup":"","marker":{"color":[7,7,16,8,10,9,21,11,12,12,9,256,7,22,4,14,75,10,35,8,6,5,2,9,42,26,105,13,8,14,11,19,33,8,36,17,9,15,16,3,16,15,20,3,3,19,6,45,59,9,3,7,2,6,16,59,9,6,6,20,25,21,9,8,5,24,13,12,12,6,4,2,30,4,12,4,2,21,63,16,10,2,41,9,3,10,86,5,21,7,35,4,5,11,80,32,13,5,6,4,5,21,4,3,50,6,30,15,4,3,12,5,26,4,8,23,7,15,6,58,7,3,17,14,12,3,10,1,4,2,12,4,6,3,40,4,3,9,3,12,8,6,2,1,4,5,3,1,6,11,7,2,6,1,3,1,5,2,10,1,4,1,1,1,1,38,6,4,10,3,2,2,2,5,6,6,5,9,2,2,4,14,18,11,12,18,3,3,3,5,26,4,7,2,7,2,5,12,6,4,3,3,3,10,7,17,5,1,1,1,3,6,4,7,11,21,9,3,2,3,5,2,2,6,4,2,3,2,3,7,6,1,2,2,5,5,7,1,3,1,1,2,4,5,1,2],"coloraxis":"coloraxis","size":[7,7,16,8,10,9,21,11,12,12,9,256,7,22,4,14,75,10,35,8,6,5,2,9,42,26,105,13,8,14,11,19,33,8,36,17,9,15,16,3,16,15,20,3,3,19,6,45,59,9,3,7,2,6,16,59,9,6,6,20,25,21,9,8,5,24,13,12,12,6,4,2,30,4,12,4,2,21,63,16,10,2,41,9,3,10,86,5,21,7,35,4,5,11,80,32,13,5,6,4,5,21,4,3,50,6,30,15,4,3,12,5,26,4,8,23,7,15,6,58,7,3,17,14,12,3,10,1,4,2,12,4,6,3,40,4,3,9,3,12,8,6,2,1,4,5,3,1,6,11,7,2,6,1,3,1,5,2,10,1,4,1,1,1,1,38,6,4,10,3,2,2,2,5,6,6,5,9,2,2,4,14,18,11,12,18,3,3,3,5,26,4,7,2,7,2,5,12,6,4,3,3,3,10,7,17,5,1,1,1,3,6,4,7,11,21,9,3,2,3,5,2,2,6,4,2,3,2,3,7,6,1,2,2,5,5,7,1,3,1,1,2,4,5,1,2],"sizemode":"area","sizeref":0.16,"symbol":"circle"},"mode":"markers+text","name":"","orientation":"v","showlegend":false,"text":["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119","120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136","137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","238","239","240","241","242","243","244","245"],"x":[0.08017840064175705,-0.11816175655955849,0.1301589868578332,-0.07674082079637373,-0.20651133712594158,0.12488578958168353,0.0735413850445553,-0.14254990831229883,0.22999814698998688,0.26087244783947,0.0988065819799002,-0.09790757449850267,-0.24278345099264043,0.17123185158463183,-0.2684460153304293,-0.13280636665312529,-0.23659949792602047,-0.065726139857726,-0.23698224135886217,-0.20384987458789122,0.015819387656734355,-0.04618817557894238,0.1435200630353205,-0.2678265763100326,-0.2889752641275947,-0.27350216452814674,-0.23829749730394864,-0.13731596337253874,-0.03023737172418812,-0.2505196387300205,-0.055977878119388036,0.08399102941760433,0.3331843954091619,0.19901733355855364,-0.20475046589844667,0.3612668720152304,0.011609099479633764,-0.2570531165283981,-0.14886779330199215,0.0566388700138287,-0.18157639641896528,-0.2493782452570734,-0.12738292164150472,0.2279821780432262,-0.12215935978215417,-0.10578496009851508,0.20079621000992662,-0.14617557183586175,-0.21936933901115077,-0.17514204919054913,0.16886834328527614,-0.015099877724715233,-0.17355968609175715,0.0912545557257526,0.19078718170547834,-0.12291325919523415,-0.28000077203676144,-0.0595851297343496,0.011015152419078892,0.2653373303228549,-0.2790312800694209,-0.022797669159754886,0.13873208140074345,-0.1400574330610287,0.10061362285096676,-0.15107442150411635,-0.07669181084735499,-0.05697362664116026,-0.1684474478390249,0.10935037370979032,-0.1869691388194916,0.21270749394242744,-0.21616516353952253,-0.2573636219212597,-0.2117029421848132,-0.1277270554919417,-0.039361184817771254,-0.24136591833900342,-0.009643639672481845,-0.25065668188919316,-0.20727105464259088,0.28830552749838334,-0.09593090042327392,0.14442925271863977,-0.12737533930213402,-0.21306197005447494,-0.1967041787992681,0.22952388307668087,-0.0878037781413389,0.17252700954463585,0.07860174952099817,0.1155212717269036,-0.006532383725347736,-0.07123763423498837,-0.033661233820279336,-0.12897824907966884,-0.10796302188707382,-0.10412984127412611,0.33999037698507717,0.16524778194033482,-0.015547533085372588,-0.07469845007376846,0.15267720075706642,0.3203442492519855,-0.06682670877640466,0.11418730331722027,-0.18099866370403841,-0.2484274135145318,0.07696674196940755,0.128932658622262,-0.22755495206255574,0.0671967296817234,-0.22629303642945667,-0.09032628384373045,0.18073270098504632,-0.21844540816662222,0.10267113419825565,-0.13387147659350912,-0.07762999419755923,-0.1406094875633518,-0.12350388949023171,-0.2005430325390247,-0.21159805161224252,-0.2582460678273279,-0.1641134303524541,-0.06191141182827912,0.10179689448813012,0.29126451274666426,-0.15948531758641488,-0.1843110385430791,-0.2504854364588199,0.1284011068418316,0.19930122647096235,-0.04970331323919201,-0.08381186607719711,0.04063378425460721,0.16309329593199315,0.27837510227298956,0.23032344280040604,-0.12282068399533216,0.10992669948789308,0.013371435999587542,0.2526792370726217,-0.032707998069756154,0.07173413366210458,-0.2916503445654581,-0.1331492864879205,0.24821198654080642,-0.027724987007552954,0.33244111533948445,-0.21463817537904692,-0.18192250204148974,0.06472441653183633,0.17885225822446377,-0.14788768980627348,0.3008266737953601,0.1618114472848734,0.08662604566068273,-0.19734952800368116,0.010641153029632021,-0.03838569931724813,0.24558895727705118,0.0986095107797701,0.1497697244825048,-0.023859237625261247,-0.004474664516362341,-0.14850915581131918,-0.16539309356421333,0.2050573692035942,-0.05222136339577962,0.07810380609895472,0.1400439634639765,0.1617742345525562,0.13748358527961685,0.25042078376927696,-0.1317365099981114,-0.0541135525216009,-0.03684517242119437,0.24218064857039176,0.07136381926668438,0.3460200987412854,0.2573943449639931,-0.22109210695052214,-0.22105627754009857,-0.013979332676636915,0.33265533481125253,0.061272759836974264,0.33889923428822205,-0.06365126449731748,0.3398148194417263,0.039042621730482785,0.1922984371648442,-0.25666585429863736,0.14246588108494251,-0.18581095753678212,-0.052812623808695856,0.03291995848305282,0.19510883843563143,-0.07165186731543546,-0.05066814189985807,-0.196034390867486,-0.1728301713414627,0.16403466051983834,-0.2010919437155654,0.020862267267386683,0.07931680069657454,0.26691512131489603,-0.046172957263158856,0.03307857171554207,0.10837791382972904,-0.043846585442568205,0.29446140369587004,-0.23566900717483955,0.13650907354125774,0.15047427733583593,0.27044101893483297,-0.17475157312365983,-0.01333053809041978,0.031377137723797695,0.3094505980670758,0.12793107637597617,0.3687434691125911,0.1003502505797374,-0.2728591342956211,-0.21407320135206825,-0.03772155118313526,0.228088348560038,0.3389417576707581,-0.057609262969437,-0.17683359681912114,-0.13632769718121263,0.21920299503419027,0.28101182297694227,0.1820990080196051,-0.07361929067730497,0.14146507830359725,-0.18624966270641857,0.010007954096537566,-0.12891287529762335,0.2601728154876963,0.14934103410057173,0.43418762661667043,0.11991373949457558,0.08872905534387612,-0.028781079645763142,0.0029876195913760045],"xaxis":"x","y":[0.07945356253311085,-0.2142775584600222,-0.009655088276912287,0.08044592180386088,0.043169746796318874,-0.15482949199716095,-0.005904353107232783,0.10620106814330588,-0.1671982160008796,0.09833753545476269,0.0986283046446456,0.014260950177935548,0.01654826624465381,0.17036731059126686,-0.08409036725103954,0.006060018507848101,-0.13802102864942423,0.08749176916777139,0.07977568366602436,0.09177805928263473,0.032272900558181807,0.14762796738448697,-0.014712890332470379,0.12135654914324241,-0.0662439715642559,0.05446345921479689,0.16692231048226555,0.01802465330306474,-0.1082370855670612,0.00810021524369618,-0.14675030222227356,-0.15124801790289066,-0.08231387422730141,-0.12395982040439896,0.12622400073122875,0.07707276910202716,-0.08170264243322774,-0.046259911050841346,0.1322714280087064,-0.005473968427671016,0.01607698629037024,-0.0020987643433425,-0.1492179668155085,0.0612976221849792,-0.21166504752678694,-0.036995408641512295,-0.17387220238073384,-0.11399068907328681,-0.06612662022483205,-0.17123646311191643,-0.0019002818457260447,-0.01495534108034002,-0.0328354019165139,-0.1298076951866281,0.0036936921586392265,-0.05504185721811024,0.0496784107940299,-0.015269679328515666,0.03771902499585958,-0.07835498811753852,-0.0020533076120057875,0.09373205245918637,0.3341500495732626,0.07394168553233954,0.3150057695139646,0.06889650991653537,-0.053639086372982356,0.2218607526124794,-0.041508582528324955,0.10923158426816397,-0.08497972790198201,0.18801668000619856,0.03125440892051024,-0.14269972037567055,0.12207651174664542,-0.15930778017855665,-0.010845930479696574,-0.0956772471644634,0.15955280487567988,-0.11021275156198547,0.10331320583322266,0.055612316822432305,-0.13238196705115754,-0.043084996213992456,-0.2794380554972678,0.1095432312908649,-0.05155890413176667,0.0879383745872664,0.24593465342478657,0.01118624387689011,-0.17552479830194634,-0.10725907700175405,-0.0921873219340026,0.0864134946750173,-0.11698197709057959,0.1319739190264044,0.07399051597112873,-0.07346369258727965,0.04038249986863196,-0.09901601335378846,0.032548423014749875,-0.1300622489631079,-0.1150262689667154,-0.13323728182550945,0.23592948123028112,-0.018369408397279373,0.16432249618446684,0.03962467447356865,-0.2340781597884221,-0.23066363801678408,0.1763917505806354,0.2910205958817678,0.06965350514907684,0.08530459696904549,-0.005387598782042454,0.119273694080851,0.2724518638268425,-0.03460001983138367,-0.13995124562367398,0.08178902146268523,-0.009014358359078361,0.1976885873936442,-0.01626824714560945,0.02049150706232557,0.10834021450859545,-0.17100584764033375,-0.21138888836017006,0.028360640554615842,-0.11704525240272463,-0.05788722055990274,0.061166930461654716,0.12654003953473414,-0.2906054382818316,-0.012536887016253783,0.334322542870766,-0.07967608449898728,-0.07394222891888351,0.032638294217506164,-0.2874759692058729,-0.0805750516909433,-0.2483730581146472,0.2054942813961642,-0.24832201496300493,-0.17300375625460954,0.36375622060202,-0.034804240516954355,-0.004501615227753631,-0.05877645364532482,0.22924018204748028,-0.11030532654583244,-0.2933015009933106,-0.16258480450666532,0.042158839747233015,0.27897492738643154,-0.12744024155848138,0.0653642170638417,-0.08333269024244325,0.13729523901819987,-0.16717035285550172,-0.15710360407350593,0.04740802170930709,0.11853398668945712,-0.058850135172645736,-0.23955464613721975,-0.13041412753293002,0.2912398261777548,-0.08685087328467134,-0.037393847979802206,-0.028562854786361457,0.1440725186765171,0.061390817934183294,0.15286715262212053,-0.08304000650997083,-0.13245280571254414,0.05725046575888287,-0.0779998699717087,-0.03742682396337228,0.018424615733731657,-0.04949600709021923,0.012721259865379675,-0.09529577068432112,-0.2303665142811934,-0.03196039417385036,0.13126161972348205,-0.1316292112961614,-0.1509910339600262,0.07561046327270593,-0.11138311481865948,-0.22079407307729215,0.28274439951198826,-0.10783418910910812,-0.025736411561010725,-0.08932237457511555,0.3199177871230661,-0.07066275919557653,0.03235924958452635,-0.28275315713729593,0.02597067502807549,-0.05607290062192064,-0.03676217430001833,0.20399213353603055,0.04536241663143963,0.37574479635513813,-0.048306931551094355,0.24821003071862874,0.3291948963506131,0.2802100761535134,-0.12163089428400385,-0.11572487722333676,-0.09964233664453181,-0.15008443987589068,-0.03961162023164465,-0.15119270977658258,0.13665527862058574,-0.15734998173194026,0.09450848328159087,0.2559754812402286,-0.1691947711789564,0.12462938159046268,-0.04035086978340975,-0.2767845969618531,-0.12257144543058938,-0.060613116790602654,-0.06384936462700985,-0.1746510997473537,-0.17244305021856404,-0.05968694569984677,0.025310356180471328,-0.14567933094134267,0.21238140581487713,0.15180560526149944,0.11479313215973815,-0.045619707637578714,0.3358216779179389,-0.10068422715970989,0.02366831569139489,-0.06629638639245096,0.2923423750538856,0.07189936067885878,0.11990900436425042,0.16550288874893088,-0.06490110050959286,-0.06787837171934759,0.23800822795271603,-0.13463207123088378,0.1897028582357345],"yaxis":"y","type":"scatter","textposition":"top center"}], {"template":{"data":{"barpolar":[{"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"barpolar"}],"bar":[{"error_x":{"color":"#2a3f5f"},"error_y":{"color":"#2a3f5f"},"marker":{"line":{"color":"white","width":0.5},"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"bar"}],"carpet":[{"aaxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"baxis":{"endlinecolor":"#2a3f5f","gridcolor":"#C8D4E3","linecolor":"#C8D4E3","minorgridcolor":"#C8D4E3","startlinecolor":"#2a3f5f"},"type":"carpet"}],"choropleth":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"choropleth"}],"contourcarpet":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"contourcarpet"}],"contour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"contour"}],"heatmapgl":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"heatmapgl"}],"heatmap":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"heatmap"}],"histogram2dcontour":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"histogram2dcontour"}],"histogram2d":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"histogram2d"}],"histogram":[{"marker":{"pattern":{"fillmode":"overlay","size":10,"solidity":0.2}},"type":"histogram"}],"mesh3d":[{"colorbar":{"outlinewidth":0,"ticks":""},"type":"mesh3d"}],"parcoords":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"parcoords"}],"pie":[{"automargin":true,"type":"pie"}],"scatter3d":[{"line":{"colorbar":{"outlinewidth":0,"ticks":""}},"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatter3d"}],"scattercarpet":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattercarpet"}],"scattergeo":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergeo"}],"scattergl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattergl"}],"scattermapbox":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scattermapbox"}],"scatterpolargl":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolargl"}],"scatterpolar":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterpolar"}],"scatter":[{"fillpattern":{"fillmode":"overlay","size":10,"solidity":0.2},"type":"scatter"}],"scatterternary":[{"marker":{"colorbar":{"outlinewidth":0,"ticks":""}},"type":"scatterternary"}],"surface":[{"colorbar":{"outlinewidth":0,"ticks":""},"colorscale":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"type":"surface"}],"table":[{"cells":{"fill":{"color":"#EBF0F8"},"line":{"color":"white"}},"header":{"fill":{"color":"#C8D4E3"},"line":{"color":"white"}},"type":"table"}]},"layout":{"annotationdefaults":{"arrowcolor":"#2a3f5f","arrowhead":0,"arrowwidth":1},"autotypenumbers":"strict","coloraxis":{"colorbar":{"outlinewidth":0,"ticks":""}},"colorscale":{"diverging":[[0,"#8e0152"],[0.1,"#c51b7d"],[0.2,"#de77ae"],[0.3,"#f1b6da"],[0.4,"#fde0ef"],[0.5,"#f7f7f7"],[0.6,"#e6f5d0"],[0.7,"#b8e186"],[0.8,"#7fbc41"],[0.9,"#4d9221"],[1,"#276419"]],"sequential":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]],"sequentialminus":[[0.0,"#0d0887"],[0.1111111111111111,"#46039f"],[0.2222222222222222,"#7201a8"],[0.3333333333333333,"#9c179e"],[0.4444444444444444,"#bd3786"],[0.5555555555555556,"#d8576b"],[0.6666666666666666,"#ed7953"],[0.7777777777777778,"#fb9f3a"],[0.8888888888888888,"#fdca26"],[1.0,"#f0f921"]]},"colorway":["#636efa","#EF553B","#00cc96","#ab63fa","#FFA15A","#19d3f3","#FF6692","#B6E880","#FF97FF","#FECB52"],"font":{"color":"#2a3f5f"},"geo":{"bgcolor":"white","lakecolor":"white","landcolor":"white","showlakes":true,"showland":true,"subunitcolor":"#C8D4E3"},"hoverlabel":{"align":"left"},"hovermode":"closest","mapbox":{"style":"light"},"paper_bgcolor":"white","plot_bgcolor":"white","polar":{"angularaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""},"bgcolor":"white","radialaxis":{"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":""}},"scene":{"xaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"yaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"},"zaxis":{"backgroundcolor":"white","gridcolor":"#DFE8F3","gridwidth":2,"linecolor":"#EBF0F8","showbackground":true,"ticks":"","zerolinecolor":"#EBF0F8"}},"shapedefaults":{"line":{"color":"#2a3f5f"}},"ternary":{"aaxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"baxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""},"bgcolor":"white","caxis":{"gridcolor":"#DFE8F3","linecolor":"#A2B1C6","ticks":""}},"title":{"x":0.05},"xaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2},"yaxis":{"automargin":true,"gridcolor":"#EBF0F8","linecolor":"#EBF0F8","ticks":"","title":{"standoff":15},"zerolinecolor":"#EBF0F8","zerolinewidth":2}}},"xaxis":{"anchor":"y","domain":[0.0,1.0],"title":{"text":"Factor 1"}},"yaxis":{"anchor":"x","domain":[0.0,1.0],"title":{"text":"Factor 2"}},"coloraxis":{"colorbar":{"title":{"text":"color"}},"colorscale":[[0.0,"#440154"],[0.1111111111111111,"#482878"],[0.2222222222222222,"#3e4989"],[0.3333333333333333,"#31688e"],[0.4444444444444444,"#26828e"],[0.5555555555555556,"#1f9e89"],[0.6666666666666666,"#35b779"],[0.7777777777777778,"#6ece58"],[0.8888888888888888,"#b5de2b"],[1.0,"#fde725"]]},"legend":{"tracegroupgap":0,"itemsizing":"constant"},"title":{"text":"Thematic Landscape (abstract)"}}, {"responsive": true} ) }; </script> </div>
|
| 6 |
+
</body>
|
| 7 |
+
</html>
|
emb_abstract.npy
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d4f449331d9b8d62db72d9c44dc317ee0a221d312b46571aaf67ab68da8560bb
|
| 3 |
+
size 4608128
|
error.txt
ADDED
|
@@ -0,0 +1,494 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
------------------------------------------------------------
|
| 3 |
+
TS: 2026-04-26 10:35:27
|
| 4 |
+
CTX: Agent Link Failure
|
| 5 |
+
MSG: Error response 401 while fetching https://api.mistral.ai/v1/chat/completions: {"detail":"Unauthorized"}
|
| 6 |
+
TRACE:
|
| 7 |
+
Traceback (most recent call last):
|
| 8 |
+
File "C:\Users\Reyansh\OneDrive\Desktop\project_sp\app.py", line 299, in invoke_analysis_agent
|
| 9 |
+
agent_result = agent.invoke({"messages": [{"role": "user", "content": user_query}]}, config=runtime_config)
|
| 10 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 11 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 3309, in invoke
|
| 12 |
+
for chunk in self.stream(
|
| 13 |
+
^^^^^^^^^^^^
|
| 14 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 2736, in stream
|
| 15 |
+
for _ in runner.tick(
|
| 16 |
+
^^^^^^^^^^^^
|
| 17 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_runner.py", line 167, in tick
|
| 18 |
+
run_with_retry(
|
| 19 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_retry.py", line 126, in run_with_retry
|
| 20 |
+
return task.proc.invoke(task.input, config)
|
| 21 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 22 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 656, in invoke
|
| 23 |
+
input = context.run(step.invoke, input, config, **kwargs)
|
| 24 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 25 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 393, in invoke
|
| 26 |
+
ret = context.run(self.func, *args, **kwargs)
|
| 27 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 28 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\chat_agent_executor.py", line 679, in call_model
|
| 29 |
+
response = cast(AIMessage, static_model.invoke(model_input, config)) # type: ignore[union-attr]
|
| 30 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 31 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\runnables\base.py", line 3157, in invoke
|
| 32 |
+
input_ = context.run(step.invoke, input_, config)
|
| 33 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 34 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\runnables\base.py", line 5695, in invoke
|
| 35 |
+
return self.bound.invoke(
|
| 36 |
+
^^^^^^^^^^^^^^^^^^
|
| 37 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 454, in invoke
|
| 38 |
+
self.generate_prompt(
|
| 39 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 1185, in generate_prompt
|
| 40 |
+
return self.generate(prompt_messages, stop=stop, callbacks=callbacks, **kwargs)
|
| 41 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 42 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 995, in generate
|
| 43 |
+
self._generate_with_cache(
|
| 44 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 1297, in _generate_with_cache
|
| 45 |
+
result = self._generate(
|
| 46 |
+
^^^^^^^^^^^^^^^
|
| 47 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 666, in _generate
|
| 48 |
+
response = self.completion_with_retry(
|
| 49 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 50 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 583, in completion_with_retry
|
| 51 |
+
return _completion_with_retry(**kwargs)
|
| 52 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 53 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 338, in wrapped_f
|
| 54 |
+
return copy(f, *args, **kw)
|
| 55 |
+
^^^^^^^^^^^^^^^^^^^^
|
| 56 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 477, in __call__
|
| 57 |
+
do = self.iter(retry_state=retry_state)
|
| 58 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 59 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 378, in iter
|
| 60 |
+
result = action(retry_state)
|
| 61 |
+
^^^^^^^^^^^^^^^^^^^
|
| 62 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 400, in <lambda>
|
| 63 |
+
self._add_action_func(lambda rs: rs.outcome.result())
|
| 64 |
+
^^^^^^^^^^^^^^^^^^^
|
| 65 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 449, in result
|
| 66 |
+
return self.__get_result()
|
| 67 |
+
^^^^^^^^^^^^^^^^^^^
|
| 68 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 401, in __get_result
|
| 69 |
+
raise self._exception
|
| 70 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 480, in __call__
|
| 71 |
+
result = fn(*args, **kwargs)
|
| 72 |
+
^^^^^^^^^^^^^^^^^^^
|
| 73 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 580, in _completion_with_retry
|
| 74 |
+
_raise_on_error(response)
|
| 75 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 186, in _raise_on_error
|
| 76 |
+
raise httpx.HTTPStatusError(
|
| 77 |
+
httpx.HTTPStatusError: Error response 401 while fetching https://api.mistral.ai/v1/chat/completions: {"detail":"Unauthorized"}
|
| 78 |
+
During task with name 'agent' and id 'a356d83a-1c7e-a11b-16dd-abfb8e9bec66'
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
------------------------------------------------------------
|
| 82 |
+
TS: 2026-04-26 10:36:04
|
| 83 |
+
CTX: Agent Link Failure
|
| 84 |
+
MSG: Error response 401 while fetching https://api.mistral.ai/v1/chat/completions: {"detail":"Unauthorized"}
|
| 85 |
+
TRACE:
|
| 86 |
+
Traceback (most recent call last):
|
| 87 |
+
File "C:\Users\Reyansh\OneDrive\Desktop\project_sp\app.py", line 299, in invoke_analysis_agent
|
| 88 |
+
agent_result = agent.invoke({"messages": [{"role": "user", "content": user_query}]}, config=runtime_config)
|
| 89 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 90 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 3309, in invoke
|
| 91 |
+
for chunk in self.stream(
|
| 92 |
+
^^^^^^^^^^^^
|
| 93 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 2736, in stream
|
| 94 |
+
for _ in runner.tick(
|
| 95 |
+
^^^^^^^^^^^^
|
| 96 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_runner.py", line 167, in tick
|
| 97 |
+
run_with_retry(
|
| 98 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_retry.py", line 126, in run_with_retry
|
| 99 |
+
return task.proc.invoke(task.input, config)
|
| 100 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 101 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 656, in invoke
|
| 102 |
+
input = context.run(step.invoke, input, config, **kwargs)
|
| 103 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 104 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 393, in invoke
|
| 105 |
+
ret = context.run(self.func, *args, **kwargs)
|
| 106 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 107 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\chat_agent_executor.py", line 679, in call_model
|
| 108 |
+
response = cast(AIMessage, static_model.invoke(model_input, config)) # type: ignore[union-attr]
|
| 109 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 110 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\runnables\base.py", line 3157, in invoke
|
| 111 |
+
input_ = context.run(step.invoke, input_, config)
|
| 112 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 113 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\runnables\base.py", line 5695, in invoke
|
| 114 |
+
return self.bound.invoke(
|
| 115 |
+
^^^^^^^^^^^^^^^^^^
|
| 116 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 454, in invoke
|
| 117 |
+
self.generate_prompt(
|
| 118 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 1185, in generate_prompt
|
| 119 |
+
return self.generate(prompt_messages, stop=stop, callbacks=callbacks, **kwargs)
|
| 120 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 121 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 995, in generate
|
| 122 |
+
self._generate_with_cache(
|
| 123 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 1297, in _generate_with_cache
|
| 124 |
+
result = self._generate(
|
| 125 |
+
^^^^^^^^^^^^^^^
|
| 126 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 666, in _generate
|
| 127 |
+
response = self.completion_with_retry(
|
| 128 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 129 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 583, in completion_with_retry
|
| 130 |
+
return _completion_with_retry(**kwargs)
|
| 131 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 132 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 338, in wrapped_f
|
| 133 |
+
return copy(f, *args, **kw)
|
| 134 |
+
^^^^^^^^^^^^^^^^^^^^
|
| 135 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 477, in __call__
|
| 136 |
+
do = self.iter(retry_state=retry_state)
|
| 137 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 138 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 378, in iter
|
| 139 |
+
result = action(retry_state)
|
| 140 |
+
^^^^^^^^^^^^^^^^^^^
|
| 141 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 400, in <lambda>
|
| 142 |
+
self._add_action_func(lambda rs: rs.outcome.result())
|
| 143 |
+
^^^^^^^^^^^^^^^^^^^
|
| 144 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 449, in result
|
| 145 |
+
return self.__get_result()
|
| 146 |
+
^^^^^^^^^^^^^^^^^^^
|
| 147 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 401, in __get_result
|
| 148 |
+
raise self._exception
|
| 149 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 480, in __call__
|
| 150 |
+
result = fn(*args, **kwargs)
|
| 151 |
+
^^^^^^^^^^^^^^^^^^^
|
| 152 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 580, in _completion_with_retry
|
| 153 |
+
_raise_on_error(response)
|
| 154 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 186, in _raise_on_error
|
| 155 |
+
raise httpx.HTTPStatusError(
|
| 156 |
+
httpx.HTTPStatusError: Error response 401 while fetching https://api.mistral.ai/v1/chat/completions: {"detail":"Unauthorized"}
|
| 157 |
+
During task with name 'agent' and id '219ec02f-c83a-73b0-984b-94d004b55aa6'
|
| 158 |
+
|
| 159 |
+
|
| 160 |
+
------------------------------------------------------------
|
| 161 |
+
TS: 2026-04-26 10:36:48
|
| 162 |
+
CTX: Agent Link Failure
|
| 163 |
+
MSG: Error response 401 while fetching https://api.mistral.ai/v1/chat/completions: {"detail":"Unauthorized"}
|
| 164 |
+
TRACE:
|
| 165 |
+
Traceback (most recent call last):
|
| 166 |
+
File "C:\Users\Reyansh\OneDrive\Desktop\project_sp\app.py", line 299, in invoke_analysis_agent
|
| 167 |
+
agent_result = agent.invoke({"messages": [{"role": "user", "content": user_query}]}, config=runtime_config)
|
| 168 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 169 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 3309, in invoke
|
| 170 |
+
for chunk in self.stream(
|
| 171 |
+
^^^^^^^^^^^^
|
| 172 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 2736, in stream
|
| 173 |
+
for _ in runner.tick(
|
| 174 |
+
^^^^^^^^^^^^
|
| 175 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_runner.py", line 167, in tick
|
| 176 |
+
run_with_retry(
|
| 177 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_retry.py", line 126, in run_with_retry
|
| 178 |
+
return task.proc.invoke(task.input, config)
|
| 179 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 180 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 656, in invoke
|
| 181 |
+
input = context.run(step.invoke, input, config, **kwargs)
|
| 182 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 183 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 393, in invoke
|
| 184 |
+
ret = context.run(self.func, *args, **kwargs)
|
| 185 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 186 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\chat_agent_executor.py", line 679, in call_model
|
| 187 |
+
response = cast(AIMessage, static_model.invoke(model_input, config)) # type: ignore[union-attr]
|
| 188 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 189 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\runnables\base.py", line 3157, in invoke
|
| 190 |
+
input_ = context.run(step.invoke, input_, config)
|
| 191 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 192 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\runnables\base.py", line 5695, in invoke
|
| 193 |
+
return self.bound.invoke(
|
| 194 |
+
^^^^^^^^^^^^^^^^^^
|
| 195 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 454, in invoke
|
| 196 |
+
self.generate_prompt(
|
| 197 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 1185, in generate_prompt
|
| 198 |
+
return self.generate(prompt_messages, stop=stop, callbacks=callbacks, **kwargs)
|
| 199 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 200 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 995, in generate
|
| 201 |
+
self._generate_with_cache(
|
| 202 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\language_models\chat_models.py", line 1297, in _generate_with_cache
|
| 203 |
+
result = self._generate(
|
| 204 |
+
^^^^^^^^^^^^^^^
|
| 205 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 666, in _generate
|
| 206 |
+
response = self.completion_with_retry(
|
| 207 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 208 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 583, in completion_with_retry
|
| 209 |
+
return _completion_with_retry(**kwargs)
|
| 210 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 211 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 338, in wrapped_f
|
| 212 |
+
return copy(f, *args, **kw)
|
| 213 |
+
^^^^^^^^^^^^^^^^^^^^
|
| 214 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 477, in __call__
|
| 215 |
+
do = self.iter(retry_state=retry_state)
|
| 216 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 217 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 378, in iter
|
| 218 |
+
result = action(retry_state)
|
| 219 |
+
^^^^^^^^^^^^^^^^^^^
|
| 220 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 400, in <lambda>
|
| 221 |
+
self._add_action_func(lambda rs: rs.outcome.result())
|
| 222 |
+
^^^^^^^^^^^^^^^^^^^
|
| 223 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 449, in result
|
| 224 |
+
return self.__get_result()
|
| 225 |
+
^^^^^^^^^^^^^^^^^^^
|
| 226 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 401, in __get_result
|
| 227 |
+
raise self._exception
|
| 228 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\tenacity\__init__.py", line 480, in __call__
|
| 229 |
+
result = fn(*args, **kwargs)
|
| 230 |
+
^^^^^^^^^^^^^^^^^^^
|
| 231 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 580, in _completion_with_retry
|
| 232 |
+
_raise_on_error(response)
|
| 233 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_mistralai\chat_models.py", line 186, in _raise_on_error
|
| 234 |
+
raise httpx.HTTPStatusError(
|
| 235 |
+
httpx.HTTPStatusError: Error response 401 while fetching https://api.mistral.ai/v1/chat/completions: {"detail":"Unauthorized"}
|
| 236 |
+
During task with name 'agent' and id '1bb0306f-1ae0-c605-167a-f4e469090b8f'
|
| 237 |
+
|
| 238 |
+
|
| 239 |
+
------------------------------------------------------------
|
| 240 |
+
TS: 2026-04-26 14:58:38
|
| 241 |
+
CTX: Agent Link Failure
|
| 242 |
+
MSG: [Errno 2] No such file or directory: 'labels_abstract.json'
|
| 243 |
+
TRACE:
|
| 244 |
+
Traceback (most recent call last):
|
| 245 |
+
File "C:\Users\Reyansh\OneDrive\Desktop\project_sp\app.py", line 302, in invoke_analysis_agent
|
| 246 |
+
agent_result = agent.invoke({"messages": [{"role": "user", "content": user_query}]}, config=runtime_config)
|
| 247 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 248 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 3309, in invoke
|
| 249 |
+
for chunk in self.stream(
|
| 250 |
+
^^^^^^^^^^^^
|
| 251 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 2736, in stream
|
| 252 |
+
for _ in runner.tick(
|
| 253 |
+
^^^^^^^^^^^^
|
| 254 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_runner.py", line 167, in tick
|
| 255 |
+
run_with_retry(
|
| 256 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_retry.py", line 126, in run_with_retry
|
| 257 |
+
return task.proc.invoke(task.input, config)
|
| 258 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 259 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 656, in invoke
|
| 260 |
+
input = context.run(step.invoke, input, config, **kwargs)
|
| 261 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 262 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 400, in invoke
|
| 263 |
+
ret = self.func(*args, **kwargs)
|
| 264 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 265 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 818, in _func
|
| 266 |
+
outputs = list(
|
| 267 |
+
^^^^^
|
| 268 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 619, in result_iterator
|
| 269 |
+
yield _result_or_cancel(fs.pop())
|
| 270 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 271 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 317, in _result_or_cancel
|
| 272 |
+
return fut.result(timeout)
|
| 273 |
+
^^^^^^^^^^^^^^^^^^^
|
| 274 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 449, in result
|
| 275 |
+
return self.__get_result()
|
| 276 |
+
^^^^^^^^^^^^^^^^^^^
|
| 277 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 401, in __get_result
|
| 278 |
+
raise self._exception
|
| 279 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\thread.py", line 59, in run
|
| 280 |
+
result = self.fn(*self.args, **self.kwargs)
|
| 281 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 282 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\runnables\config.py", line 579, in _wrapped_fn
|
| 283 |
+
return contexts.pop().run(fn, *args)
|
| 284 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 285 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 1031, in _run_one
|
| 286 |
+
return self._execute_tool_sync(tool_request, input_type, config)
|
| 287 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 288 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 980, in _execute_tool_sync
|
| 289 |
+
content = _handle_tool_error(e, flag=self._handle_tool_errors)
|
| 290 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 291 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 432, in _handle_tool_error
|
| 292 |
+
content = flag(e) # type: ignore [assignment, call-arg]
|
| 293 |
+
^^^^^^^
|
| 294 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 389, in _default_handle_tool_errors
|
| 295 |
+
raise e
|
| 296 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 937, in _execute_tool_sync
|
| 297 |
+
response = tool.invoke(call_args, config)
|
| 298 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 299 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\tools\base.py", line 642, in invoke
|
| 300 |
+
return self.run(tool_input, **kwargs)
|
| 301 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 302 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\tools\base.py", line 1001, in run
|
| 303 |
+
raise error_to_raise
|
| 304 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\tools\base.py", line 967, in run
|
| 305 |
+
response = context.run(self._run, *tool_args, **tool_kwargs)
|
| 306 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 307 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\tools\structured.py", line 97, in _run
|
| 308 |
+
return self.func(*args, **kwargs)
|
| 309 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 310 |
+
File "C:\Users\Reyansh\OneDrive\Desktop\project_sp\tools.py", line 405, in consolidate_into_themes
|
| 311 |
+
with open(f"labels_{run_key}.json", encoding="utf-8") as raw_data:
|
| 312 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 313 |
+
FileNotFoundError: [Errno 2] No such file or directory: 'labels_abstract.json'
|
| 314 |
+
During task with name 'tools' and id 'b8ed4fbe-5f8d-f3f8-0811-2a0c22a5faca'
|
| 315 |
+
|
| 316 |
+
|
| 317 |
+
------------------------------------------------------------
|
| 318 |
+
TS: 2026-04-26 14:58:58
|
| 319 |
+
CTX: Session Migration [ee5baf -> 781d0d]
|
| 320 |
+
MSG: Found AIMessages with tool_calls that do not have a corresponding ToolMessage. Here are the first few of those tool calls: [{'name': 'consolidate_into_themes', 'args': {'run_key': 'abstract'}, 'id': 'qhuJma4xp', 'type': 'tool_call'}].
|
| 321 |
+
|
| 322 |
+
Every tool call (LLM requesting to call a tool) in the message history MUST have a corresponding ToolMessage (result of a tool invocation to return to the LLM) - this is required by most LLM providers.
|
| 323 |
+
For troubleshooting, visit: https://docs.langchain.com/oss/python/langgraph/errors/INVALID_CHAT_HISTORY
|
| 324 |
+
TRACE:
|
| 325 |
+
Traceback (most recent call last):
|
| 326 |
+
File "C:\Users\Reyansh\OneDrive\Desktop\project_sp\app.py", line 302, in invoke_analysis_agent
|
| 327 |
+
agent_result = agent.invoke({"messages": [{"role": "user", "content": user_query}]}, config=runtime_config)
|
| 328 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 329 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 3309, in invoke
|
| 330 |
+
for chunk in self.stream(
|
| 331 |
+
^^^^^^^^^^^^
|
| 332 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 2736, in stream
|
| 333 |
+
for _ in runner.tick(
|
| 334 |
+
^^^^^^^^^^^^
|
| 335 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_runner.py", line 167, in tick
|
| 336 |
+
run_with_retry(
|
| 337 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_retry.py", line 126, in run_with_retry
|
| 338 |
+
return task.proc.invoke(task.input, config)
|
| 339 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 340 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 656, in invoke
|
| 341 |
+
input = context.run(step.invoke, input, config, **kwargs)
|
| 342 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 343 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 393, in invoke
|
| 344 |
+
ret = context.run(self.func, *args, **kwargs)
|
| 345 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 346 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\chat_agent_executor.py", line 672, in call_model
|
| 347 |
+
model_input = _get_model_input_state(state)
|
| 348 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 349 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\chat_agent_executor.py", line 651, in _get_model_input_state
|
| 350 |
+
_validate_chat_history(messages)
|
| 351 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\chat_agent_executor.py", line 271, in _validate_chat_history
|
| 352 |
+
raise ValueError(error_message)
|
| 353 |
+
ValueError: Found AIMessages with tool_calls that do not have a corresponding ToolMessage. Here are the first few of those tool calls: [{'name': 'consolidate_into_themes', 'args': {'run_key': 'abstract'}, 'id': 'qhuJma4xp', 'type': 'tool_call'}].
|
| 354 |
+
|
| 355 |
+
Every tool call (LLM requesting to call a tool) in the message history MUST have a corresponding ToolMessage (result of a tool invocation to return to the LLM) - this is required by most LLM providers.
|
| 356 |
+
For troubleshooting, visit: https://docs.langchain.com/oss/python/langgraph/errors/INVALID_CHAT_HISTORY
|
| 357 |
+
During task with name 'agent' and id 'e2431c16-6dfe-2585-df7a-f14a1cd06bb3'
|
| 358 |
+
|
| 359 |
+
|
| 360 |
+
------------------------------------------------------------
|
| 361 |
+
TS: 2026-04-26 14:59:38
|
| 362 |
+
CTX: Agent Link Failure
|
| 363 |
+
MSG: [Errno 2] No such file or directory: 'scopus_data.csv'
|
| 364 |
+
TRACE:
|
| 365 |
+
Traceback (most recent call last):
|
| 366 |
+
File "C:\Users\Reyansh\OneDrive\Desktop\project_sp\app.py", line 302, in invoke_analysis_agent
|
| 367 |
+
agent_result = agent.invoke({"messages": [{"role": "user", "content": user_query}]}, config=runtime_config)
|
| 368 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 369 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 3309, in invoke
|
| 370 |
+
for chunk in self.stream(
|
| 371 |
+
^^^^^^^^^^^^
|
| 372 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 2736, in stream
|
| 373 |
+
for _ in runner.tick(
|
| 374 |
+
^^^^^^^^^^^^
|
| 375 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_runner.py", line 167, in tick
|
| 376 |
+
run_with_retry(
|
| 377 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_retry.py", line 126, in run_with_retry
|
| 378 |
+
return task.proc.invoke(task.input, config)
|
| 379 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 380 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 656, in invoke
|
| 381 |
+
input = context.run(step.invoke, input, config, **kwargs)
|
| 382 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 383 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 400, in invoke
|
| 384 |
+
ret = self.func(*args, **kwargs)
|
| 385 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 386 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 818, in _func
|
| 387 |
+
outputs = list(
|
| 388 |
+
^^^^^
|
| 389 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 619, in result_iterator
|
| 390 |
+
yield _result_or_cancel(fs.pop())
|
| 391 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 392 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 317, in _result_or_cancel
|
| 393 |
+
return fut.result(timeout)
|
| 394 |
+
^^^^^^^^^^^^^^^^^^^
|
| 395 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 449, in result
|
| 396 |
+
return self.__get_result()
|
| 397 |
+
^^^^^^^^^^^^^^^^^^^
|
| 398 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 401, in __get_result
|
| 399 |
+
raise self._exception
|
| 400 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\thread.py", line 59, in run
|
| 401 |
+
result = self.fn(*self.args, **self.kwargs)
|
| 402 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 403 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\runnables\config.py", line 579, in _wrapped_fn
|
| 404 |
+
return contexts.pop().run(fn, *args)
|
| 405 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 406 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 1031, in _run_one
|
| 407 |
+
return self._execute_tool_sync(tool_request, input_type, config)
|
| 408 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 409 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 980, in _execute_tool_sync
|
| 410 |
+
content = _handle_tool_error(e, flag=self._handle_tool_errors)
|
| 411 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 412 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 432, in _handle_tool_error
|
| 413 |
+
content = flag(e) # type: ignore [assignment, call-arg]
|
| 414 |
+
^^^^^^^
|
| 415 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 389, in _default_handle_tool_errors
|
| 416 |
+
raise e
|
| 417 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\tool_node.py", line 937, in _execute_tool_sync
|
| 418 |
+
response = tool.invoke(call_args, config)
|
| 419 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 420 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\tools\base.py", line 642, in invoke
|
| 421 |
+
return self.run(tool_input, **kwargs)
|
| 422 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 423 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\tools\base.py", line 1001, in run
|
| 424 |
+
raise error_to_raise
|
| 425 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\tools\base.py", line 967, in run
|
| 426 |
+
response = context.run(self._run, *tool_args, **tool_kwargs)
|
| 427 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 428 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langchain_core\tools\structured.py", line 97, in _run
|
| 429 |
+
return self.func(*args, **kwargs)
|
| 430 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 431 |
+
File "C:\Users\Reyansh\OneDrive\Desktop\project_sp\tools.py", line 177, in load_scopus_csv
|
| 432 |
+
source_df = pd.read_csv(
|
| 433 |
+
^^^^^^^^^^^^
|
| 434 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\io\parsers\readers.py", line 1026, in read_csv
|
| 435 |
+
return _read(filepath_or_buffer, kwds)
|
| 436 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 437 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\io\parsers\readers.py", line 620, in _read
|
| 438 |
+
parser = TextFileReader(filepath_or_buffer, **kwds)
|
| 439 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 440 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\io\parsers\readers.py", line 1620, in __init__
|
| 441 |
+
self._engine = self._make_engine(f, self.engine)
|
| 442 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 443 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\io\parsers\readers.py", line 1880, in _make_engine
|
| 444 |
+
self.handles = get_handle(
|
| 445 |
+
^^^^^^^^^^^
|
| 446 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\pandas\io\common.py", line 873, in get_handle
|
| 447 |
+
handle = open(
|
| 448 |
+
^^^^^
|
| 449 |
+
FileNotFoundError: [Errno 2] No such file or directory: 'scopus_data.csv'
|
| 450 |
+
During task with name 'tools' and id '9a34b14d-032f-5f7a-d90b-fbde4de60766'
|
| 451 |
+
|
| 452 |
+
|
| 453 |
+
------------------------------------------------------------
|
| 454 |
+
TS: 2026-04-26 14:59:46
|
| 455 |
+
CTX: Session Migration [781d0d -> 80a60b]
|
| 456 |
+
MSG: Found AIMessages with tool_calls that do not have a corresponding ToolMessage. Here are the first few of those tool calls: [{'name': 'load_scopus_csv', 'args': {'file_path': 'scopus_data.csv'}, 'id': 'JrfgG54k6', 'type': 'tool_call'}].
|
| 457 |
+
|
| 458 |
+
Every tool call (LLM requesting to call a tool) in the message history MUST have a corresponding ToolMessage (result of a tool invocation to return to the LLM) - this is required by most LLM providers.
|
| 459 |
+
For troubleshooting, visit: https://docs.langchain.com/oss/python/langgraph/errors/INVALID_CHAT_HISTORY
|
| 460 |
+
TRACE:
|
| 461 |
+
Traceback (most recent call last):
|
| 462 |
+
File "C:\Users\Reyansh\OneDrive\Desktop\project_sp\app.py", line 302, in invoke_analysis_agent
|
| 463 |
+
agent_result = agent.invoke({"messages": [{"role": "user", "content": user_query}]}, config=runtime_config)
|
| 464 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 465 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 3309, in invoke
|
| 466 |
+
for chunk in self.stream(
|
| 467 |
+
^^^^^^^^^^^^
|
| 468 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\main.py", line 2736, in stream
|
| 469 |
+
for _ in runner.tick(
|
| 470 |
+
^^^^^^^^^^^^
|
| 471 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_runner.py", line 167, in tick
|
| 472 |
+
run_with_retry(
|
| 473 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\pregel\_retry.py", line 126, in run_with_retry
|
| 474 |
+
return task.proc.invoke(task.input, config)
|
| 475 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 476 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 656, in invoke
|
| 477 |
+
input = context.run(step.invoke, input, config, **kwargs)
|
| 478 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 479 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\_internal\_runnable.py", line 393, in invoke
|
| 480 |
+
ret = context.run(self.func, *args, **kwargs)
|
| 481 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 482 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\chat_agent_executor.py", line 672, in call_model
|
| 483 |
+
model_input = _get_model_input_state(state)
|
| 484 |
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| 485 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\chat_agent_executor.py", line 651, in _get_model_input_state
|
| 486 |
+
_validate_chat_history(messages)
|
| 487 |
+
File "C:\Users\Reyansh\AppData\Local\Programs\Python\Python312\Lib\site-packages\langgraph\prebuilt\chat_agent_executor.py", line 271, in _validate_chat_history
|
| 488 |
+
raise ValueError(error_message)
|
| 489 |
+
ValueError: Found AIMessages with tool_calls that do not have a corresponding ToolMessage. Here are the first few of those tool calls: [{'name': 'load_scopus_csv', 'args': {'file_path': 'scopus_data.csv'}, 'id': 'JrfgG54k6', 'type': 'tool_call'}].
|
| 490 |
+
|
| 491 |
+
Every tool call (LLM requesting to call a tool) in the message history MUST have a corresponding ToolMessage (result of a tool invocation to return to the LLM) - this is required by most LLM providers.
|
| 492 |
+
For troubleshooting, visit: https://docs.langchain.com/oss/python/langgraph/errors/INVALID_CHAT_HISTORY
|
| 493 |
+
During task with name 'agent' and id 'b1607601-ef5c-ab3b-44dc-b00f1969baf2'
|
| 494 |
+
|
gitattributes
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
labels_abstract.json
ADDED
|
@@ -0,0 +1,962 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"topic_id": 0,
|
| 4 |
+
"count": 7,
|
| 5 |
+
"nearest_sentences": [
|
| 6 |
+
"We apply our solution in the healthcare domain in a COVID-19 detection scenario over IoT devices.",
|
| 7 |
+
"The COVID-19 pandemic has highlighted the critical need for advanced technology in healthcare.",
|
| 8 |
+
"Experiments conducted on a real-world COVID-19 dataset reveal that our solution achieves a good trade-off between detection accuracy and model execution time compared to existing approaches.",
|
| 9 |
+
"On the other hand, the UK\u2019s NHS COVID-19 application has exhibited limited success in fighting the virus despite relatively abiding by these requirements.",
|
| 10 |
+
"In the considered scenario, edge servers collaborate with IoT devices to train a COVID-19 detection model using FL without having to share any raw confidential data."
|
| 11 |
+
],
|
| 12 |
+
"label": "AI in COVID-19 Healthcare Detection",
|
| 13 |
+
"category": "application",
|
| 14 |
+
"confidence": 0.92,
|
| 15 |
+
"reasoning": "Method: Focuses on the deployment of AI-driven solutions in healthcare, specifically for COVID-19 detection using IoT devices. | Data: Sentences highlight the application of technology in pandemic scenarios and the critical need for advanced healthcare solutions. | Impact: Demonstrates the potential of AI to address urgent healthcare challenges and improve diagnostic capabilities in real-world settings.",
|
| 16 |
+
"niche": false
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"topic_id": 1,
|
| 20 |
+
"count": 7,
|
| 21 |
+
"nearest_sentences": [
|
| 22 |
+
"The present study proposes a hybrid ML framework by integrating established predictive and explainable ML approaches for decision support systems involving the prediction of human decisions and designing individualized interventions accordingly.",
|
| 23 |
+
"Particularly, given the complex decision-making process of humans, using insights obtained from group-level interpretation of ML models for designing individual interventions may lead to mixed results.",
|
| 24 |
+
"The proposed framework is aimed at providing actionable insights for designing individualized interventions.",
|
| 25 |
+
"This study refines social support theory and establishes a foundation for decision aids and emotion-sensitive AI systems to deliver personalized social support tailored to users\u2019 informational and emotional needs.",
|
| 26 |
+
"A comparison of feature importance scores at the group- vs. individual-level revealed that while group-level insights might be useful for adjusting long-term strategies, using them as a one-size-fits-all strategy to design and implement individual interventions is subject to suboptimal outcomes."
|
| 27 |
+
],
|
| 28 |
+
"label": "Hybrid ML for Decision Support Systems",
|
| 29 |
+
"category": "methodology",
|
| 30 |
+
"confidence": 0.88,
|
| 31 |
+
"reasoning": "Method: Integrates predictive and explainable machine learning approaches to enhance decision support systems, particularly for individualized interventions. | Data: Sentences emphasize the complexity of human decision-making and the need for tailored ML frameworks to improve outcomes. | Impact: Advances the development of interpretable AI systems that can adapt to individual decision-making processes, with implications for personalized interventions.",
|
| 32 |
+
"niche": false
|
| 33 |
+
},
|
| 34 |
+
{
|
| 35 |
+
"topic_id": 2,
|
| 36 |
+
"count": 16,
|
| 37 |
+
"nearest_sentences": [
|
| 38 |
+
"The existing related work mainly focuses on Text-to-SQL tasks, and there is no available semantic parsing method and data set for the graph database.",
|
| 39 |
+
"This solution uses the Adapter pre-trained by \u201cthe linking of GraphQL schemas and the corresponding utterances\u201d as an external knowledge introduction plug-in.",
|
| 40 |
+
"This enables the model to copy objects' tokens from utterances, generate corresponding GraphQL statements for graph database retrieval, and builds an adjustment mechanism to improve the final output.",
|
| 41 |
+
"Text-to-GraphQL (Text2GraphQL) is a task that converts the user's questions into Graph + QL (Query Language) when a graph database is given.",
|
| 42 |
+
"In order to fill the gaps in this field to serve the medical Human\u2013Robot Interactions (HRI) better, we propose this task and a pipeline solution for the Text2GraphQL task."
|
| 43 |
+
],
|
| 44 |
+
"label": "Semantic Parsing for Graph Databases",
|
| 45 |
+
"category": "methodology",
|
| 46 |
+
"confidence": 0.9,
|
| 47 |
+
"reasoning": "Method: Addresses the gap in semantic parsing methods for graph databases, leveraging pre-trained adapters for GraphQL schemas. | Data: Sentences highlight the lack of existing datasets and methods for graph database semantic parsing, proposing a novel solution. | Impact: Paves the way for more efficient and scalable graph-based data querying, with applications in knowledge graphs and database management.",
|
| 48 |
+
"niche": true
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"topic_id": 3,
|
| 52 |
+
"count": 8,
|
| 53 |
+
"nearest_sentences": [
|
| 54 |
+
"To reduce such costs, companies often engage in master data management (MDM) initiatives to improve their DQ.",
|
| 55 |
+
"Such trade-offs have not received much attention in the academic literature, and conceptualizations of the strategies for implementing MDM are sparse.",
|
| 56 |
+
"MDM is, however, not a silver bullet that solves all data quality issues, but typically there are trade-offs between different data management strategies.",
|
| 57 |
+
"Thus, with the aim of conceptualizing MDM strategies and understanding their consequences, this paper conducts a longitudinal case study at a large international hearing healthcare company in which an MDM initiative was implemented.",
|
| 58 |
+
"The analysis identifies consequences of centralized and decentralized MDM approaches, on which basis four distinct strategies for data management are defined."
|
| 59 |
+
],
|
| 60 |
+
"label": "Master Data Management Strategies",
|
| 61 |
+
"category": "theory",
|
| 62 |
+
"confidence": 0.85,
|
| 63 |
+
"reasoning": "Method: Explores conceptualizations and strategies for implementing Master Data Management (MDM) to improve data quality (DQ). | Data: Sentences discuss trade-offs in MDM and the sparse academic literature on its implementation strategies. | Impact: Provides a foundation for future research on MDM frameworks and their role in organizational data governance.",
|
| 64 |
+
"niche": false
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
"topic_id": 4,
|
| 68 |
+
"count": 10,
|
| 69 |
+
"nearest_sentences": [
|
| 70 |
+
"Existing research provides fragmented insights into how different technological interventions impact diverse groups.",
|
| 71 |
+
"We filled this gap in the literature by identifying eleven barriers and categorized them, using the Technology-Organization-Environment framework, into three categories.",
|
| 72 |
+
"Nevertheless, there is still ambiguity on the success of such disruptive technologies.",
|
| 73 |
+
"Solutions for overcoming the barriers and challenges are discussed.",
|
| 74 |
+
"We collected data from seven experts and used the analytical hierarchy process to evaluate the importance of the barriers."
|
| 75 |
+
],
|
| 76 |
+
"label": "Technological Interventions and Barriers",
|
| 77 |
+
"category": "theory",
|
| 78 |
+
"confidence": 0.87,
|
| 79 |
+
"reasoning": "Method: Uses the Technology-Organization-Environment (TOE) framework to categorize barriers to technological interventions. | Data: Sentences identify fragmented insights in existing research and propose a structured categorization of barriers. | Impact: Offers a holistic view of technological adoption challenges, aiding policymakers and organizations in addressing implementation gaps.",
|
| 80 |
+
"niche": false
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"topic_id": 5,
|
| 84 |
+
"count": 9,
|
| 85 |
+
"nearest_sentences": [
|
| 86 |
+
"The stage of cancer emerges as a robust predictor, with its significance amplified by the number of metastatic lymph nodes.",
|
| 87 |
+
"Breast cancer represents one of the leading causes of death among women, with 1 in 39 (around 2.5%) of them losing their lives annually, at the global level.",
|
| 88 |
+
"Moreover, the impact of metastatic lymph nodes on survival prediction varies with the age of diagnosis, with diminished relevance observed in older patients.",
|
| 89 |
+
"Despite technological advances, there are still difficulties in identifying, characterizing, and accurately monitoring malignant tumors.",
|
| 90 |
+
"The main focus of this article is on the computerized diagnosis of breast cancer."
|
| 91 |
+
],
|
| 92 |
+
"label": "Predictive Modeling in Breast Cancer",
|
| 93 |
+
"category": "application",
|
| 94 |
+
"confidence": 0.91,
|
| 95 |
+
"reasoning": "Method: Focuses on predictive modeling for breast cancer outcomes, emphasizing the role of cancer stage and metastatic lymph nodes. | Data: Sentences highlight the global impact of breast cancer and the significance of robust predictors in clinical settings. | Impact: Contributes to early detection and personalized treatment strategies, improving patient outcomes in oncology.",
|
| 96 |
+
"niche": false
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"topic_id": 6,
|
| 100 |
+
"count": 21,
|
| 101 |
+
"nearest_sentences": [
|
| 102 |
+
"Our overall results led to a framework for classifying DSS research with four levels: decision environment, DS (decision support) artifact, DS application, and context.",
|
| 103 |
+
"The proliferation of the domain necessitates a more comprehensive categorization of DSS research towards a unified representation that can contribute to a shared understanding.",
|
| 104 |
+
"As the field of machine learning (ML) continues to develop, DSS researchers have been incorporating ML techniques into DSS artifacts and this trend is growing.",
|
| 105 |
+
"The domain of decision support systems (DSS), focusing on developing various systems to aid decision-making, is receiving increasing attention.",
|
| 106 |
+
"The findings provide insights into the most commonly used DW operations, solution patterns, redundancies, and reuse opportunities in data preparation."
|
| 107 |
+
],
|
| 108 |
+
"label": "Decision Support Systems Taxonomy",
|
| 109 |
+
"category": "theory",
|
| 110 |
+
"confidence": 0.89,
|
| 111 |
+
"reasoning": "Method: Proposes a four-level framework for classifying Decision Support Systems (DSS) research: decision environment, artifact, application, and context. | Data: Sentences emphasize the need for a unified representation of DSS research to foster shared understanding. | Impact: Provides a structured approach to DSS research, enabling better categorization and comparison of studies in the field.",
|
| 112 |
+
"niche": false
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"topic_id": 7,
|
| 116 |
+
"count": 11,
|
| 117 |
+
"nearest_sentences": [
|
| 118 |
+
"The paper provides implications for policymakers, social media managers, and sustainability advocates striving to foster environmentally friendly transportation solutions.",
|
| 119 |
+
"It highlights the importance of strategic, visually engaging, and data-driven communication to address consumer concerns, drive meaningful engagement, and ultimately promote the adoption of EVs.",
|
| 120 |
+
"Electric vehicles (EVs) have emerged as a key solution to these mobility problems globally.",
|
| 121 |
+
"This study makes particular contributions to the IS, marketing and transportation literature by offering a critical understanding of the social dynamics for shaping a big data-driven STS ecosystem.",
|
| 122 |
+
"We find that topics such as carbon emissions, charging infrastructure, EV finance and repair, and popular car features significantly impact user sentiment and engagement."
|
| 123 |
+
],
|
| 124 |
+
"label": "EV Adoption and Strategic Communication",
|
| 125 |
+
"category": "application",
|
| 126 |
+
"confidence": 0.86,
|
| 127 |
+
"reasoning": "Method: Examines the role of strategic communication in promoting environmentally friendly transportation solutions, such as electric vehicles (EVs). | Data: Sentences highlight the importance of data-driven and visually engaging communication for EV adoption. | Impact: Informs policymakers and sustainability advocates on effective strategies to drive consumer engagement and adoption of green technologies.",
|
| 128 |
+
"niche": false
|
| 129 |
+
},
|
| 130 |
+
{
|
| 131 |
+
"topic_id": 8,
|
| 132 |
+
"count": 12,
|
| 133 |
+
"nearest_sentences": [
|
| 134 |
+
"We also explore the use of RNN models in passphrase guessing.",
|
| 135 |
+
"We demonstrate that RNN models can predict complete passphrases given the initial word with rate up to 40%, which is twice better than other known approaches.",
|
| 136 |
+
"The experimental results show that the training MCNN model with different word embedding together performs better than the conventional machine-learning models and several other deep-learning models.",
|
| 137 |
+
"Recent advances in Large Language Models (LLMs) have paved the way for the emergence of Multimodal and Multitask LLMs (MMLLMs).",
|
| 138 |
+
"We use a long short-term memory recurrent neural network (LSTM) to predict the user\u2019s responses through a chatbot in the current work."
|
| 139 |
+
],
|
| 140 |
+
"label": "RNN for Passphrase Guessing",
|
| 141 |
+
"category": "methodology",
|
| 142 |
+
"confidence": 0.84,
|
| 143 |
+
"reasoning": "Method: Explores the use of Recurrent Neural Networks (RNNs) for passphrase guessing, demonstrating improved prediction rates. | Data: Sentences show that RNNs outperform existing approaches in predicting complete passphrases from initial words. | Impact: Advances cybersecurity research by highlighting vulnerabilities in passphrase-based authentication systems.",
|
| 144 |
+
"niche": true
|
| 145 |
+
},
|
| 146 |
+
{
|
| 147 |
+
"topic_id": 9,
|
| 148 |
+
"count": 12,
|
| 149 |
+
"nearest_sentences": [
|
| 150 |
+
"Furthermore, our results show that workloads with a generously sized cache that contain similar queries benefit from using our hybrid method, with an observed speed-up of 2x over sequential execution in the best case.",
|
| 151 |
+
"Multi-Query Optimization (MQO) addresses this challenge by devising a shared execution strategy across queries, with two generally used strategies: batched or cached.",
|
| 152 |
+
"Our hybrid-MQO system merges batched query results as well as caches the intermediate results, thereby any new query is given a path within the previous plan as well as reusing the results.",
|
| 153 |
+
"In this work we explore such a hybrid MQO, combining batching (Shared Sub-Expression) and caching (Materialized View Reuse) techniques.",
|
| 154 |
+
"Since caching is a key component for improving performance, we measure the impact of common caching techniques such as FIFO, LRU, MRU and LFU."
|
| 155 |
+
],
|
| 156 |
+
"label": "Multi-Query Optimization Techniques",
|
| 157 |
+
"category": "methodology",
|
| 158 |
+
"confidence": 0.88,
|
| 159 |
+
"reasoning": "Method: Addresses Multi-Query Optimization (MQO) by devising shared execution strategies for queries, such as batched or cached approaches. | Data: Sentences demonstrate a 2x speed-up in query execution using hybrid methods for workloads with similar queries. | Impact: Improves database performance and efficiency, particularly in large-scale data processing environments.",
|
| 160 |
+
"niche": true
|
| 161 |
+
},
|
| 162 |
+
{
|
| 163 |
+
"topic_id": 10,
|
| 164 |
+
"count": 9,
|
| 165 |
+
"nearest_sentences": [
|
| 166 |
+
"FL allows a group of users (often referred to as clients) to locally train a single machine learning model on their devices without sharing their raw data.",
|
| 167 |
+
"In the context of distributed machine learning, the concept of federated learning (FL) has emerged as a solution to the privacy concerns that users have about sharing their own data with a third-party server.",
|
| 168 |
+
"Results also suggest that traditional machine learning (ML) skills, typically expected in a data science profile, are also being sought after in a business analytics role.",
|
| 169 |
+
"This includes exploration of Machine Learning (ML), which when embedded in processes can augment or automate decisions.",
|
| 170 |
+
"With the emergence of novel methods for improving machine learning (ML) transparency, traditional decision-support-focused information systems seem to need an upgrade in their approach toward providing more actionable insights for practitioners."
|
| 171 |
+
],
|
| 172 |
+
"label": "Federated Learning for Privacy",
|
| 173 |
+
"category": "methodology",
|
| 174 |
+
"confidence": 0.93,
|
| 175 |
+
"reasoning": "Method: Focuses on federated learning (FL) as a privacy-preserving solution for distributed machine learning. | Data: Sentences highlight FL's ability to train models locally without sharing raw data, addressing privacy concerns. | Impact: Enables collaborative machine learning while safeguarding user data, with applications in healthcare, finance, and IoT.",
|
| 176 |
+
"niche": false
|
| 177 |
+
},
|
| 178 |
+
{
|
| 179 |
+
"topic_id": 11,
|
| 180 |
+
"count": 256,
|
| 181 |
+
"nearest_sentences": [
|
| 182 |
+
"Over the past few years, organizations are increasingly turning to AI in order to gain business value following a deluge of data and a strong increase in computational capacity.",
|
| 183 |
+
"To address these challenges, recent research suggests that organizations should develop specific capabilities for AI implementation.",
|
| 184 |
+
"This study provides a systematic literature review that attempts to explain how organizations can leverage AI technologies in their operations and elucidate the value-generating mechanisms.",
|
| 185 |
+
"Artificial Intelligence (AI) are a wide-ranging set of technologies that promise several advantages for organizations in terms off added business value.",
|
| 186 |
+
"This paper examines the evolving dynamics of human-AI interaction, emphasizing the ethical challenges and responsibility gaps that emerge as AI technologies become more autonomous and integrated into society and business."
|
| 187 |
+
],
|
| 188 |
+
"label": "Organizational AI Capabilities",
|
| 189 |
+
"category": "theory",
|
| 190 |
+
"confidence": 0.95,
|
| 191 |
+
"reasoning": "Method: Examines the development of organizational capabilities for AI implementation to derive business value from data and computational advancements. | Data: Sentences emphasize the increasing adoption of AI in organizations and the need for specific capabilities to address implementation challenges. | Impact: Guides organizations in building AI readiness and fostering innovation through structured capability development.",
|
| 192 |
+
"niche": false
|
| 193 |
+
},
|
| 194 |
+
{
|
| 195 |
+
"topic_id": 12,
|
| 196 |
+
"count": 7,
|
| 197 |
+
"nearest_sentences": [
|
| 198 |
+
"Our findings could furnish valuable perspectives for policymakers and stakeholders toward refining their strategies concerning infrastructure deployment, socio-economic development, and regulatory interventions.",
|
| 199 |
+
"The paper concludes with a synthesis of common themes, formulating propositions, and presenting implications for practice and policy.",
|
| 200 |
+
"To deal with offenders, solutions such as legislation and regulation are proposed.",
|
| 201 |
+
"Contributions for policymakers are offered in this paper.",
|
| 202 |
+
"If this problem can be successfully addressed, it could have a positive impact on various stakeholders."
|
| 203 |
+
],
|
| 204 |
+
"label": "Policy and Infrastructure Development",
|
| 205 |
+
"category": "context",
|
| 206 |
+
"confidence": 0.82,
|
| 207 |
+
"reasoning": "Method: Provides perspectives for policymakers on infrastructure deployment, socio-economic development, and regulatory interventions. | Data: Sentences synthesize common themes and propose actionable strategies for policy and practice. | Impact: Informs evidence-based policymaking and stakeholder engagement for sustainable development.",
|
| 208 |
+
"niche": false
|
| 209 |
+
},
|
| 210 |
+
{
|
| 211 |
+
"topic_id": 13,
|
| 212 |
+
"count": 22,
|
| 213 |
+
"nearest_sentences": [
|
| 214 |
+
"We designed and implemented a new scheme in Hadoop to efficiently identify data inconsistency between clouds.",
|
| 215 |
+
"As a result, the reliability of data kept on clouds could be greatly enhanced.",
|
| 216 |
+
"Practically, data inconsistency caused by human mistakes or accidents may exist between data duplicated across clouds, which could significantly reduce the data reliability.",
|
| 217 |
+
"Therefore, it is crucial to detect the inconsistency between duplicated data stored on different clouds to uphold the data reliability.",
|
| 218 |
+
"Data integration and discovery are open issues in Data Lakes potentially storing hundreds of data sources."
|
| 219 |
+
],
|
| 220 |
+
"label": "Cloud Data Consistency Management",
|
| 221 |
+
"category": "methodology",
|
| 222 |
+
"confidence": 0.87,
|
| 223 |
+
"reasoning": "Method: Proposes a scheme for identifying data inconsistency in cloud environments, enhancing data reliability. | Data: Sentences describe the implementation of a Hadoop-based solution to improve cloud data consistency. | Impact: Strengthens data integrity in cloud computing, critical for enterprise and large-scale applications.",
|
| 224 |
+
"niche": true
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"topic_id": 14,
|
| 228 |
+
"count": 4,
|
| 229 |
+
"nearest_sentences": [
|
| 230 |
+
"This study is performed using publicly available data from 115 countries and the research model is developed, drawing theoretical basis from the Protection Motivation Theory, Structuration Theory, and Endogenous Growth Theory.",
|
| 231 |
+
"Using a variant of the resource-based view and the antecedent-behaviour-consequence models, data was collected from a total of 643 employees in the United Kingdom (UK) and Ghana; and analysed using structural equation modelling (Study 1).",
|
| 232 |
+
"Nonetheless, this study also discusses the challenges of uneven benefit distribution, particularly the risk of \u201cbrain drain\u201d from developing nations.",
|
| 233 |
+
"To reach this aim, we carry out a longitudinal case study over 2016\u20132018 in Shijiazhuang, China.",
|
| 234 |
+
"Factors like efficiency, innovation, business research, product novelty, manual intervention, adaptability, emotion, support, personal growth, experiential learning, fear of failure and fear of upgradation have been identified based on an exploratory study and then a confirmatory study."
|
| 235 |
+
],
|
| 236 |
+
"label": "Theoretical Models in IS Research",
|
| 237 |
+
"category": "theory",
|
| 238 |
+
"confidence": 0.8,
|
| 239 |
+
"reasoning": "Method: Draws on Protection Motivation Theory, Structuration Theory, and Endogenous Growth Theory to develop research models. | Data: Sentences describe the use of structural equation modeling and resource-based views in empirical studies. | Impact: Advances theoretical frameworks in information systems research, enabling more robust and context-aware studies.",
|
| 240 |
+
"niche": true
|
| 241 |
+
},
|
| 242 |
+
{
|
| 243 |
+
"topic_id": 15,
|
| 244 |
+
"count": 14,
|
| 245 |
+
"nearest_sentences": [
|
| 246 |
+
"Following the Design Science Research paradigm, we formulate testable propositions, derive design requirements, and synthesize design principles.",
|
| 247 |
+
"Leveraging the Design Science Research (DSR) paradigm, we systematically constructed and assessed Service-Symphony.",
|
| 248 |
+
"Finally, we tested the acquired design knowledge with software developers, who rated the reusability of the proposed design principles as high.",
|
| 249 |
+
"We qualitatively and quantitatively evaluated various design options over three design cycles with a total of 641 participants.",
|
| 250 |
+
"The study outcomes include a conceptual framework, meta-requirements, design principles, and design features."
|
| 251 |
+
],
|
| 252 |
+
"label": "Design Science Research Paradigm",
|
| 253 |
+
"category": "methodology",
|
| 254 |
+
"confidence": 0.9,
|
| 255 |
+
"reasoning": "Method: Leverages the Design Science Research (DSR) paradigm to formulate testable propositions and derive design principles. | Data: Sentences describe the systematic construction and assessment of artifacts using DSR. | Impact: Provides a structured approach to developing and evaluating IT artifacts, bridging theory and practice.",
|
| 256 |
+
"niche": false
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"topic_id": 16,
|
| 260 |
+
"count": 75,
|
| 261 |
+
"nearest_sentences": [
|
| 262 |
+
"The implications for research and practice are discussed.",
|
| 263 |
+
"Our findings have implications for both research and practice, which are discussed.",
|
| 264 |
+
"Implications of our findings for research and practice are also discussed.",
|
| 265 |
+
"This study has implications for theory and practice.",
|
| 266 |
+
"The implications for research and practice are discussed in detail."
|
| 267 |
+
],
|
| 268 |
+
"label": "Research and Practice Implications",
|
| 269 |
+
"category": "context",
|
| 270 |
+
"confidence": 0.94,
|
| 271 |
+
"reasoning": "Method: Focuses on the implications of research findings for both academic and practical applications. | Data: Sentences emphasize the discussion of findings' relevance to research and practice. | Impact: Bridges the gap between academia and industry, ensuring research has tangible real-world applications.",
|
| 272 |
+
"niche": false
|
| 273 |
+
},
|
| 274 |
+
{
|
| 275 |
+
"topic_id": 17,
|
| 276 |
+
"count": 10,
|
| 277 |
+
"nearest_sentences": [
|
| 278 |
+
"In summary, we leverage data-driven decision-making and develop a robust methodology for pricing remanufactured laptops to extend their lifespan.",
|
| 279 |
+
"In this paper, we examine the remanufacturing process of end-of-life laptops for third-party remanufacturers and consider their pricing problem, which involves issues like a lack of reliable datasets, fluctuating costs of new components, and difficulties in benchmarking laptop prices, to name a few.",
|
| 280 |
+
"We develop a unique approach that uses machine learning algorithms to help price remanufactured laptops.",
|
| 281 |
+
"We consider depreciation and discount factors to account for the varying ages and conditions of laptops when estimating remanufactured laptop prices.",
|
| 282 |
+
"These market characteristics make retaining continued usage from customers a serious challenge."
|
| 283 |
+
],
|
| 284 |
+
"label": "Pricing Remanufactured Electronics",
|
| 285 |
+
"category": "application",
|
| 286 |
+
"confidence": 0.85,
|
| 287 |
+
"reasoning": "Method: Develops a data-driven methodology for pricing remanufactured laptops to extend their lifespan. | Data: Sentences address challenges in remanufacturing, such as lack of reliable datasets and fluctuating costs. | Impact: Promotes sustainable business practices by optimizing pricing strategies for remanufactured products.",
|
| 288 |
+
"niche": true
|
| 289 |
+
},
|
| 290 |
+
{
|
| 291 |
+
"topic_id": 18,
|
| 292 |
+
"count": 35,
|
| 293 |
+
"nearest_sentences": [
|
| 294 |
+
"In this paper, we focus on how an organization\u2019s absorptive capacity and its enterprise system practices develop and co-evolve over time.",
|
| 295 |
+
"The ability to access and use new knowledge is contingent on the organisational absorptive capacity (AC).",
|
| 296 |
+
"This research contributes to the field by providing an integrative theoretical understanding of how IT capabilities are formed.",
|
| 297 |
+
"Through the lens of signaling theory, we identified the presence of organizational, product, process, marketing, and social innovation operations in their SM posts.",
|
| 298 |
+
"However, without the development of absorptive capability during the socialization process, the acquired information may be considered as a superficial feature, rather than an essential nature for an effect on an inbound open innovation."
|
| 299 |
+
],
|
| 300 |
+
"label": "Absorptive Capacity and Enterprise Systems",
|
| 301 |
+
"category": "theory",
|
| 302 |
+
"confidence": 0.91,
|
| 303 |
+
"reasoning": "Method: Explores the co-evolution of organizational absorptive capacity (AC) and enterprise system practices over time. | Data: Sentences highlight the role of AC in accessing and using new knowledge within organizations. | Impact: Informs organizational strategies for knowledge management and digital transformation.",
|
| 304 |
+
"niche": false
|
| 305 |
+
},
|
| 306 |
+
{
|
| 307 |
+
"topic_id": 19,
|
| 308 |
+
"count": 8,
|
| 309 |
+
"nearest_sentences": [
|
| 310 |
+
"In addition, it is argued that turbulence in technology could negatively impact the adoption of these technologies and adversely impact the sustainability of the production system of the firm.",
|
| 311 |
+
"Apart from the monetary loss, they also disrupt service quality and damage the brand reputation of firms.",
|
| 312 |
+
"Against this backdrop, we present a modelling approach for analyzing the effects of IT threats on production processes.",
|
| 313 |
+
"However, the disruptive impact of these business models on society is not always judged favourably.",
|
| 314 |
+
"In contrast, ICT cost was negatively associated with it."
|
| 315 |
+
],
|
| 316 |
+
"label": "Technological Turbulence and Sustainability",
|
| 317 |
+
"category": "theory",
|
| 318 |
+
"confidence": 0.83,
|
| 319 |
+
"reasoning": "Method: Examines the impact of technological turbulence on the adoption of technologies and sustainability of production systems. | Data: Sentences discuss the negative effects of turbulence on technology adoption and firm reputation. | Impact: Guides firms in mitigating risks associated with technological disruptions and maintaining sustainable operations.",
|
| 320 |
+
"niche": false
|
| 321 |
+
},
|
| 322 |
+
{
|
| 323 |
+
"topic_id": 20,
|
| 324 |
+
"count": 6,
|
| 325 |
+
"nearest_sentences": [
|
| 326 |
+
"However, these tools are complex, contain an excessive number of questions, and require a significant amount of time to administer, leading to low participation and completion rates.",
|
| 327 |
+
"Unfortunately, these existing approaches suffer from two limitations.",
|
| 328 |
+
"However, unfortunately they suffer from consuming much time due to exploration in a large search space.",
|
| 329 |
+
"However, the fusion of these features remains a challenging task.",
|
| 330 |
+
"However, choosing a good decision takes much experience, which can be difficult when system operators are inexperienced or there are staff shortages."
|
| 331 |
+
],
|
| 332 |
+
"label": "Tool Complexity and Participation Rates",
|
| 333 |
+
"category": "application",
|
| 334 |
+
"confidence": 0.81,
|
| 335 |
+
"reasoning": "Method: Addresses the limitations of complex tools in research, such as low participation and completion rates. | Data: Sentences highlight the challenges posed by excessive questions and time requirements in existing tools. | Impact: Encourages the development of user-friendly tools to improve data collection and participant engagement.",
|
| 336 |
+
"niche": true
|
| 337 |
+
},
|
| 338 |
+
{
|
| 339 |
+
"topic_id": 21,
|
| 340 |
+
"count": 5,
|
| 341 |
+
"nearest_sentences": [
|
| 342 |
+
"The study concludes with 10 application areas in business that can benefit from these technologies.",
|
| 343 |
+
"Areas for future research in IT use are also recommended.",
|
| 344 |
+
"The results indicated that technology, as a category, is the most important.",
|
| 345 |
+
"In these ten years, numerous new and promising technologies and applications have been developed.",
|
| 346 |
+
"Due to the growing volume of e-waste in the world and its environmental impact, it is important to understand how to extend the useful life of electronic items."
|
| 347 |
+
],
|
| 348 |
+
"label": "IT Applications in Business",
|
| 349 |
+
"category": "application",
|
| 350 |
+
"confidence": 0.8,
|
| 351 |
+
"reasoning": "Method: Identifies application areas in business that can benefit from emerging IT technologies. | Data: Sentences recommend future research directions in IT use for business innovation. | Impact: Guides organizations in leveraging IT for competitive advantage and operational efficiency.",
|
| 352 |
+
"niche": false
|
| 353 |
+
},
|
| 354 |
+
{
|
| 355 |
+
"topic_id": 22,
|
| 356 |
+
"count": 2,
|
| 357 |
+
"nearest_sentences": [
|
| 358 |
+
"It represents the first artifact to enhance each ML development phase along each ESG dimension.",
|
| 359 |
+
"Significance is measured by a set of counts, where each count refers to the number of graph elements that remain stable, are created, or deleted, for a specific property value.",
|
| 360 |
+
"A unified evolution skyline assesses the significance of an event in conjunction with the duration of the interval in which the event occurs.",
|
| 361 |
+
"Similarly, we vary the cache sizes to study the influence of caching.",
|
| 362 |
+
"The monitoring phase involves using these tests for new data batches, with conditional metrics helping us identify potential errors."
|
| 363 |
+
],
|
| 364 |
+
"label": "ESG-Driven ML Development",
|
| 365 |
+
"category": "application",
|
| 366 |
+
"confidence": 0.78,
|
| 367 |
+
"reasoning": "Method: Proposes an artifact to enhance machine learning development phases along Environmental, Social, and Governance (ESG) dimensions. | Data: Sentences describe the significance of stability, creation, and deletion of graph elements in ESG contexts. | Impact: Integrates sustainability considerations into AI development, aligning technological advancements with global ESG goals.",
|
| 368 |
+
"niche": true
|
| 369 |
+
},
|
| 370 |
+
{
|
| 371 |
+
"topic_id": 23,
|
| 372 |
+
"count": 9,
|
| 373 |
+
"nearest_sentences": [
|
| 374 |
+
"Although value co-creation has been the subject of numerous studies taking the service-dominant logic perspective, this research has often lacked empirical evidence.",
|
| 375 |
+
"Based on a qualitative study in the German mobility sector, we identify several inhibitors of value co-creation from the viewpoint of mobility providers.",
|
| 376 |
+
"Utilizing a service-dominant logic perspective, we examine why such overarching solutions do not emerge, whereas specialized ecosystems flourish.",
|
| 377 |
+
"The proposed model addresses fragmentation in the existing literature, facilitating the development of more cohesive, evidence-based strategies for generating business value from IT.",
|
| 378 |
+
"Organisations are increasingly creating inter-organisational ecosystem partnerships to innovate openly."
|
| 379 |
+
],
|
| 380 |
+
"label": "Value Co-Creation Inhibitors",
|
| 381 |
+
"category": "theory",
|
| 382 |
+
"confidence": 0.86,
|
| 383 |
+
"reasoning": "Method: Identifies inhibitors of value co-creation from the perspective of mobility providers using service-dominant logic. | Data: Sentences present empirical evidence from a qualitative study in the German mobility sector. | Impact: Informs service providers on barriers to value co-creation, enabling more effective collaboration and innovation.",
|
| 384 |
+
"niche": true
|
| 385 |
+
},
|
| 386 |
+
{
|
| 387 |
+
"topic_id": 24,
|
| 388 |
+
"count": 42,
|
| 389 |
+
"nearest_sentences": [
|
| 390 |
+
"Our structural model explains 45% variance on BA continuance intention, 69% variance on technological compatibility, and 59% variance on perceived usefulness.",
|
| 391 |
+
"Furthermore, our findings highlight that behavioral intention influences use behavior and mediates the effect of trust and informational support on use behavior.",
|
| 392 |
+
"A theoretical model is proposed using the dual-factor framework by integrating status quo bias factors (sunk cost, regret avoidance, inertia, perceived value, switching costs, and perceived threat) and Technology Acceptance Model (TAM; perceived ease of use and perceived usefulness) variables.",
|
| 393 |
+
"430 responses were collected to analyse the relationships among antecedents, value and intention.",
|
| 394 |
+
"Our findings show that trust and informational support have positive effects on behavioral intention while trust and emotional support have positive effects on use behavior."
|
| 395 |
+
],
|
| 396 |
+
"label": "Behavioral Intention and Technology Use",
|
| 397 |
+
"category": "theory",
|
| 398 |
+
"confidence": 0.92,
|
| 399 |
+
"reasoning": "Method: Examines the influence of behavioral intention on technology use behavior, mediated by trust and informational support. | Data: Sentences highlight structural model findings explaining variance in continuance intention and perceived usefulness. | Impact: Advances understanding of user behavior in technology adoption, guiding the design of more effective systems.",
|
| 400 |
+
"niche": false
|
| 401 |
+
},
|
| 402 |
+
{
|
| 403 |
+
"topic_id": 25,
|
| 404 |
+
"count": 26,
|
| 405 |
+
"nearest_sentences": [
|
| 406 |
+
"The key contributions of the study include the establishment of the relationship between (a) ICT and gender inequality and (b) gender inequality and income inequality.",
|
| 407 |
+
"This study examines the relationship between ICT, gender (in)equality (SDG 5), and income inequality (SDG 10).",
|
| 408 |
+
"The results indicate that national institutions have a significant impact on the relationship between the digital gender gap in internet and mobile phone usage and gender equality.",
|
| 409 |
+
"Utilizing the theoretical framework of intersecting inequalities and building upon existing literature on the gender digital divide, this study aims to explore the associations between disparities in mobile and internet usage, gender equality, and the extent of national institutional freedoms encompassing economic, political, and media domains.",
|
| 410 |
+
"The objective of this study is to investigate the relationship between the digital gender gap in mobile and internet usage and gender equality."
|
| 411 |
+
],
|
| 412 |
+
"label": "ICT, Gender, and Income Inequality",
|
| 413 |
+
"category": "theory",
|
| 414 |
+
"confidence": 0.89,
|
| 415 |
+
"reasoning": "Method: Investigates the relationship between ICT, gender inequality (SDG 5), and income inequality (SDG 10). | Data: Sentences establish key relationships between these variables, contributing to the limited research in this area. | Impact: Informs policy interventions aimed at reducing inequalities through targeted ICT initiatives.",
|
| 416 |
+
"niche": false
|
| 417 |
+
},
|
| 418 |
+
{
|
| 419 |
+
"topic_id": 26,
|
| 420 |
+
"count": 105,
|
| 421 |
+
"nearest_sentences": [
|
| 422 |
+
"This research contributes to the field by providing an integrative theoretical understanding of how IT capabilities are formed.",
|
| 423 |
+
"Using a configurational perspective, we conceptualize digital strategies as the synergistic use of IT-driven and business-driven initiatives in selective or collective value chain domains.",
|
| 424 |
+
"These findings resolve issues in the conceptualization of IT use, integrate the fragmented IT literature, and help avoid the illusion of knowledge accumulation.",
|
| 425 |
+
"This study elucidates the nature of information technology (IT) capabilities by developing an integrated framework that expounds upon the hierarchy inherent within IT capabilities.",
|
| 426 |
+
"However, while existing information systems research focuses on individual factors that influence digital inequity, it tends to ignore the influence of relational/collective factors on individuals\u2019 ICT adoption."
|
| 427 |
+
],
|
| 428 |
+
"label": "Digital Strategy and IT Capabilities",
|
| 429 |
+
"category": "theory",
|
| 430 |
+
"confidence": 0.93,
|
| 431 |
+
"reasoning": "Method: Conceptualizes digital strategies as the synergistic use of IT-driven and business-driven initiatives in value chain domains. | Data: Sentences provide an integrative theoretical understanding of IT capability formation. | Impact: Guides organizations in aligning digital strategies with business objectives for competitive advantage.",
|
| 432 |
+
"niche": false
|
| 433 |
+
},
|
| 434 |
+
{
|
| 435 |
+
"topic_id": 27,
|
| 436 |
+
"count": 13,
|
| 437 |
+
"nearest_sentences": [
|
| 438 |
+
"The overall team effect in a process is analyzed at two levels: as a task team effect where the synergistic role of a team in a specific task is realized; and a process team effect that arises from inter-team synergies across the individual task teams in a process.",
|
| 439 |
+
"Examining the influence of GenAI across project development phases, the research elucidates its impact on team performance outcomes.",
|
| 440 |
+
"We capture team performance holistically with solution creativity, team efficiency, and member satisfaction.",
|
| 441 |
+
"The results offer some balanced insights for the interplay of these effects by highlighting the benefits and disadvantages of teams selected by a purely data-driven approach.",
|
| 442 |
+
"Our work fills a large gap in literature by addressing multi-level teams that arise in business processes where teams are formed at both the task and process levels."
|
| 443 |
+
],
|
| 444 |
+
"label": "GenAI and Team Performance",
|
| 445 |
+
"category": "application",
|
| 446 |
+
"confidence": 0.88,
|
| 447 |
+
"reasoning": "Method: Examines the influence of Generative AI (GenAI) on team performance across project development phases. | Data: Sentences analyze team effects at task and process levels, elucidating GenAI's impact. | Impact: Informs organizations on leveraging GenAI to enhance team productivity and project outcomes.",
|
| 448 |
+
"niche": false
|
| 449 |
+
},
|
| 450 |
+
{
|
| 451 |
+
"topic_id": 28,
|
| 452 |
+
"count": 8,
|
| 453 |
+
"nearest_sentences": [
|
| 454 |
+
"Data was gathered from 276 healthcare professionals through a survey questionnaire across hospitals in Bahrain.",
|
| 455 |
+
"A total of 389 finance professionals and 440 medical department staff participated in the study.",
|
| 456 |
+
"The data was collected from medical and finance department professionals in selected hospitals through the design of two studies.",
|
| 457 |
+
"Data was collected from 315 organizational users in India.",
|
| 458 |
+
"The data was collected from 186 Pakistani software professionals working in software and systems development projects."
|
| 459 |
+
],
|
| 460 |
+
"label": "Healthcare and Finance Professional Surveys",
|
| 461 |
+
"category": "empirical",
|
| 462 |
+
"confidence": 0.85,
|
| 463 |
+
"reasoning": "Method: Gathers data from healthcare and finance professionals through survey questionnaires to study domain-specific challenges. | Data: Sentences describe the sample sizes and contexts of the surveys conducted in Bahrain and other regions. | Impact: Provides empirical insights into professional practices, informing policy and organizational strategies.",
|
| 464 |
+
"niche": false
|
| 465 |
+
},
|
| 466 |
+
{
|
| 467 |
+
"topic_id": 29,
|
| 468 |
+
"count": 14,
|
| 469 |
+
"nearest_sentences": [
|
| 470 |
+
"In addition, the centralization of instrumental ties and expressive ties moderates the effect of interpersonal trust and TMS.",
|
| 471 |
+
"Our results show that the centralization of instrumental ties strengthens the relationship between interpersonal trust and TMS.",
|
| 472 |
+
"The centralization of expressive ties weakens the relationship between trust and TMS and that between TMS and team performance.",
|
| 473 |
+
"Drawing upon the perspectives of transactive memory systems (TMS) and social ties, we propose that TMS mediates the effect of interpersonal trust on team performance.",
|
| 474 |
+
"The mediating effect of TMS is moderated by the centralization of instrumental and expressive ties."
|
| 475 |
+
],
|
| 476 |
+
"label": "Interpersonal Trust and TMS",
|
| 477 |
+
"category": "theory",
|
| 478 |
+
"confidence": 0.84,
|
| 479 |
+
"reasoning": "Method: Explores the moderating role of tie centralization in the relationship between interpersonal trust and Transactive Memory Systems (TMS). | Data: Sentences present findings on how instrumental and expressive ties influence trust and TMS. | Impact: Advances understanding of team dynamics and knowledge sharing in organizational settings.",
|
| 480 |
+
"niche": true
|
| 481 |
+
},
|
| 482 |
+
{
|
| 483 |
+
"topic_id": 30,
|
| 484 |
+
"count": 11,
|
| 485 |
+
"nearest_sentences": [
|
| 486 |
+
"Our participants were experienced practitioners in the fields of crisis decision-making and information analysis.",
|
| 487 |
+
"Literature suggests that crisis response needs to address the initial uncertainty and possible biases by adapting to new and better information as it becomes available.",
|
| 488 |
+
"The post of a disaster eyewitness offers an accurate depiction of the disaster.",
|
| 489 |
+
"We draw on the notion of Situational Awareness to carry out the study.",
|
| 490 |
+
"Coupled with high stakes, limited resources and a high cognitive load, crises are prone to induce biases in the data and the cognitive processes of analysts and decision-makers."
|
| 491 |
+
],
|
| 492 |
+
"label": "Crisis Decision-Making and Bias",
|
| 493 |
+
"category": "application",
|
| 494 |
+
"confidence": 0.87,
|
| 495 |
+
"reasoning": "Method: Addresses uncertainty and biases in crisis decision-making by adapting to new information. | Data: Sentences describe the involvement of experienced practitioners in crisis response and information analysis. | Impact: Improves crisis management strategies by reducing biases and enhancing adaptability in high-stakes environments.",
|
| 496 |
+
"niche": false
|
| 497 |
+
},
|
| 498 |
+
{
|
| 499 |
+
"topic_id": 31,
|
| 500 |
+
"count": 19,
|
| 501 |
+
"nearest_sentences": [
|
| 502 |
+
"First, we used transformer-based model to perform topic modeling for identification of topics from the heterogeneous textual data of web videos.",
|
| 503 |
+
"The experimental results demonstrates the effectiveness of proposed method for topic detection.",
|
| 504 |
+
"In this paper, a framework for topic detection using web videos textual metadata has been developed.",
|
| 505 |
+
"Videos with similar content or related to the same topic can be grouped together with the help of topic detection methods.",
|
| 506 |
+
"To achieve this goal, we employ the BERTopic model, a state-of-the-art technique for topic modeling, to identify and categorize prevalent themes arising from the discourse."
|
| 507 |
+
],
|
| 508 |
+
"label": "Transformer-Based Topic Modeling",
|
| 509 |
+
"category": "methodology",
|
| 510 |
+
"confidence": 0.9,
|
| 511 |
+
"reasoning": "Method: Uses transformer-based models for topic modeling to identify themes in heterogeneous textual data from web videos. | Data: Sentences demonstrate the effectiveness of the proposed method for topic detection. | Impact: Enhances text mining capabilities, enabling more accurate and scalable topic modeling in diverse datasets.",
|
| 512 |
+
"niche": true
|
| 513 |
+
},
|
| 514 |
+
{
|
| 515 |
+
"topic_id": 32,
|
| 516 |
+
"count": 33,
|
| 517 |
+
"nearest_sentences": [
|
| 518 |
+
"Among the investigated classification algorithms, deep learning, support vector machine, and C5.0 had better performance, yielding an accuracy of 95.3%, 92.8%, and 90.2% respectively.",
|
| 519 |
+
"We harness four diverse machine learning algorithms (Logistic Regression, Random Forest, Support Vector Machine, and Extreme Gradient Boosting) to construct models and evaluate their performance via Precision, Recall, F1-Score, and Accuracy metrics.",
|
| 520 |
+
"The proposed model achieved the best receiver operating characteristic (ROC) curve and Balanced Accuracy (BA) on all the datasets and five datasets, respectively.",
|
| 521 |
+
"Furthermore, it selects eighteen representative approaches from various categories to perform an empirical evaluation on six real-world benchmark datasets.",
|
| 522 |
+
"The obtained results confirm the efficiency of SMPSO-KNN model to select the most significant features and provide the highest classification accuracy compared to existing models."
|
| 523 |
+
],
|
| 524 |
+
"label": "Machine Learning Classification Algorithms",
|
| 525 |
+
"category": "methodology",
|
| 526 |
+
"confidence": 0.91,
|
| 527 |
+
"reasoning": "Method: Evaluates the performance of machine learning algorithms (e.g., deep learning, SVM, C5.0) using metrics like accuracy, precision, and recall. | Data: Sentences report high accuracy rates for various algorithms in classification tasks. | Impact: Guides the selection of optimal ML algorithms for specific applications, improving predictive performance.",
|
| 528 |
+
"niche": false
|
| 529 |
+
},
|
| 530 |
+
{
|
| 531 |
+
"topic_id": 33,
|
| 532 |
+
"count": 8,
|
| 533 |
+
"nearest_sentences": [
|
| 534 |
+
"This model aims to visualize the inner structure of the kidney and accurately identify any underlying kidney stones.",
|
| 535 |
+
"Subsequently, a registration algorithm is employed to align and combine the segmented results, resulting in a comprehensive 3D representation of the kidney\u2019s anatomical structure.",
|
| 536 |
+
"Ultimately, the registration process successfully aligns the kidneys across all three phases and combines the segmented labels, producing a detailed 3D visualization of the complete kidney structure.",
|
| 537 |
+
"In conclusion, the proposed ensemble model shows potential in accurately visualizing the internal structure of the kidney and precisely localizing kidney stones.",
|
| 538 |
+
"To achieve this, three separate datasets, namely non-contrast computed tomography (CT) scans, corticomedullary CT scans, and CT excretory scans, are annotated to enhance the three-dimensional (3D) reconstruction of the kidney\u2019s complex anatomy."
|
| 539 |
+
],
|
| 540 |
+
"label": "3D Kidney Stone Visualization",
|
| 541 |
+
"category": "application",
|
| 542 |
+
"confidence": 0.86,
|
| 543 |
+
"reasoning": "Method: Develops a model to visualize kidney structures and identify kidney stones using segmentation and registration algorithms. | Data: Sentences describe the creation of a comprehensive 3D representation of kidney anatomy. | Impact: Advances medical imaging techniques, aiding in early diagnosis and treatment of kidney-related conditions.",
|
| 544 |
+
"niche": true
|
| 545 |
+
},
|
| 546 |
+
{
|
| 547 |
+
"topic_id": 34,
|
| 548 |
+
"count": 36,
|
| 549 |
+
"nearest_sentences": [
|
| 550 |
+
"The findings reveal that task-oriented leadership is particularly effective in motivating IS security compliance.",
|
| 551 |
+
"We encourage future research to explore the role of intrinsic motivators and the potential indirect effects of relationship-oriented leadership behaviors on IS security policy compliance.",
|
| 552 |
+
"By illuminating the behavioral dynamics of leadership, this study paves the way for organizations to enhance their IS security programs and cultivate a culture of compliance.",
|
| 553 |
+
"Organizations continue to struggle with motivating employee compliance with information systems (IS) security protocols despite implementing technical and managerial strategies.",
|
| 554 |
+
"This study examines the critical role of leadership behaviors in fostering security compliance among employees."
|
| 555 |
+
],
|
| 556 |
+
"label": "Leadership and IS Security Compliance",
|
| 557 |
+
"category": "theory",
|
| 558 |
+
"confidence": 0.89,
|
| 559 |
+
"reasoning": "Method: Investigates the role of task-oriented leadership in motivating Information Systems (IS) security compliance. | Data: Sentences highlight the effectiveness of intrinsic motivators and relationship-oriented leadership behaviors. | Impact: Informs organizational strategies for improving IS security through effective leadership and employee motivation.",
|
| 560 |
+
"niche": false
|
| 561 |
+
},
|
| 562 |
+
{
|
| 563 |
+
"topic_id": 35,
|
| 564 |
+
"count": 17,
|
| 565 |
+
"nearest_sentences": [
|
| 566 |
+
"Lastly, it incorporates a novel strategy to guide the algorithm to find the optimal subset throughout the evolutionary process.",
|
| 567 |
+
"A solution path algorithm is proposed to efficiently identify the optimal solutions, thereby accelerating the hyperparameter tuning process.",
|
| 568 |
+
"To this end, five algorithms are applied, Speed-constrained Multi-objective PSO (SMPSO), Non-dominated Sorting Algorithm (NSGA-II), Sequential Forward Selection (SFS), Sequential Forward Floating Selection (SFFS), and Random Subset Feature Selection (RSFS).",
|
| 569 |
+
"In computational efficiency experiments, the proposed solution path algorithm demonstrates superior performance compared to the CVXPY method and the Sequential Minimal Optimization (SMO) algorithm.",
|
| 570 |
+
"Secondly, it relies on the Pareto Archived Evolution Strategy (PAES) method, which offers many advantages, including simplicity and its ability to explore the solution space at an acceptable speed."
|
| 571 |
+
],
|
| 572 |
+
"label": "Evolutionary Hyperparameter Tuning",
|
| 573 |
+
"category": "methodology",
|
| 574 |
+
"confidence": 0.85,
|
| 575 |
+
"reasoning": "Method: Proposes a solution path algorithm to guide evolutionary processes in finding optimal hyperparameter subsets. | Data: Sentences describe the acceleration of hyperparameter tuning through novel strategies. | Impact: Improves the efficiency of machine learning model development, reducing computational costs and time.",
|
| 576 |
+
"niche": true
|
| 577 |
+
},
|
| 578 |
+
{
|
| 579 |
+
"topic_id": 36,
|
| 580 |
+
"count": 9,
|
| 581 |
+
"nearest_sentences": [
|
| 582 |
+
"The results show that despite using the same data and algorithm, varying the number of personas strongly biases the information system\u2019s personification of the user population.",
|
| 583 |
+
"Organizations looking to effectively use persona analytics systems must be wary that altering the number of personas could substantially change the results, leading to drastically different interpretations about the actual user base.",
|
| 584 |
+
"This research investigates the effect of varying the number of user segments on the personification of user engagement data in a real analytics information system, employing the concept of persona.",
|
| 585 |
+
"We then examine the effect of changing the hyperparameter on the gender, age, nationality, and combined gender-age-nationality representation of the user population.",
|
| 586 |
+
"The hyperparameter selection for the 990 total personas results in an average deviation of 54.5% for gender, 42.9% for age, 28.9% for nationality, and 40.5% for gender-age-nationality."
|
| 587 |
+
],
|
| 588 |
+
"label": "Persona Analytics and User Representation",
|
| 589 |
+
"category": "application",
|
| 590 |
+
"confidence": 0.88,
|
| 591 |
+
"reasoning": "Method: Examines how varying the number of personas biases information systems' representation of user populations. | Data: Sentences highlight the impact of persona count on interpretations of the actual user base. | Impact: Guides organizations in using persona analytics effectively to avoid misinterpretations and improve user-centric design.",
|
| 592 |
+
"niche": true
|
| 593 |
+
},
|
| 594 |
+
{
|
| 595 |
+
"topic_id": 37,
|
| 596 |
+
"count": 15,
|
| 597 |
+
"nearest_sentences": [
|
| 598 |
+
"This research offers valuable insights for information systems scholars, highlighting the importance of cultural context in understanding smartphone addiction.",
|
| 599 |
+
"The findings, based on data collected from 233 employees at a major medical center in the Midwest region of the USA and employing structural equation modeling, reveal a significant cultural influence on smartphone addiction, ultimately leading to a decline in performance.",
|
| 600 |
+
"The ability to use mobile technologies anywhere and anytime has driven an important dark side known in this article as Mobile Technology Addiction (MTA).",
|
| 601 |
+
"Furthermore, the study equips managers with practical knowledge to address smartphone addiction within a culturally diverse workforce.",
|
| 602 |
+
"This study investigates the intricate interplay between cultural dimensions, smartphone addiction, and employee performance."
|
| 603 |
+
],
|
| 604 |
+
"label": "Cultural Context and Smartphone Addiction",
|
| 605 |
+
"category": "theory",
|
| 606 |
+
"confidence": 0.87,
|
| 607 |
+
"reasoning": "Method: Explores the influence of cultural context on smartphone addiction and its impact on employee performance. | Data: Sentences present findings from structural equation modeling based on employee data from a US medical center. | Impact: Informs workplace policies and interventions to mitigate smartphone addiction and improve productivity.",
|
| 608 |
+
"niche": false
|
| 609 |
+
},
|
| 610 |
+
{
|
| 611 |
+
"topic_id": 38,
|
| 612 |
+
"count": 16,
|
| 613 |
+
"nearest_sentences": [
|
| 614 |
+
"Security of food supply chains is therefore of paramount importance.",
|
| 615 |
+
"With the importance and constraints that are associated with food supply chains and the potential for security violations, food supply chains need to be secured to avoid unnecessary damage.",
|
| 616 |
+
"The sustainability of agri-food supply chains (AFSCs) is severely threatened by regional and global events (e.g., conflicts, natural and human-made disasters, climate crises).",
|
| 617 |
+
"Food safety and security being the goal, based on a survey of 140 food companies, this study provides insights to manufacturers and policymakers to enable selective implementation of I5.0 enabling technologies and pandemic policies.",
|
| 618 |
+
"Efficient and effective agricultural policies and their implementation along with advances in science and technology have together helped pave the way for supply to meet demand for food around the world."
|
| 619 |
+
],
|
| 620 |
+
"label": "Food Supply Chain Security",
|
| 621 |
+
"category": "application",
|
| 622 |
+
"confidence": 0.84,
|
| 623 |
+
"reasoning": "Method: Addresses the importance and constraints of securing food supply chains to prevent security violations. | Data: Sentences emphasize the need for robust security measures in food supply chains. | Impact: Guides stakeholders in implementing security protocols to ensure food safety and prevent disruptions.",
|
| 624 |
+
"niche": false
|
| 625 |
+
},
|
| 626 |
+
{
|
| 627 |
+
"topic_id": 39,
|
| 628 |
+
"count": 3,
|
| 629 |
+
"nearest_sentences": [
|
| 630 |
+
"In addition, it investigates IS procedural fairness, a contextual boundary condition.",
|
| 631 |
+
"The goal here is not to explain the decisional process of a model but, rather, to provide an explanation justifying the output of the decisional process by only inspecting the data set on which the decision has been made.",
|
| 632 |
+
"Meanwhile, in the complex contract transactions and management, especially in supply chain management, a chained evidence sequence is designed to avoid collusion.",
|
| 633 |
+
"This partial complementary effect is explicated by the sequential asymmetric information dependency of value chain activities.",
|
| 634 |
+
"Confirmation bias reinforces the reliance on conclusions reached with biased data, leading to a vicious cycle, in which biased assumptions remain uncorrected."
|
| 635 |
+
],
|
| 636 |
+
"label": "IS Procedural Fairness and Bias",
|
| 637 |
+
"category": "theory",
|
| 638 |
+
"confidence": 0.8,
|
| 639 |
+
"reasoning": "Method: Investigates Information Systems (IS) procedural fairness as a contextual boundary condition for decision-making. | Data: Sentences describe the goal of providing explanations for decision outputs by inspecting datasets. | Impact: Advances fairness in AI-driven decision-making, reducing biases and improving transparency.",
|
| 640 |
+
"niche": true
|
| 641 |
+
},
|
| 642 |
+
{
|
| 643 |
+
"topic_id": 40,
|
| 644 |
+
"count": 16,
|
| 645 |
+
"nearest_sentences": [
|
| 646 |
+
"Using a large-scale field experiment on a crowdsourcing freight platform, this study investigates the impact of IM on freelancers\u2019 response rate of orders.",
|
| 647 |
+
"Moreover, our findings reveal crowdsourcing platforms\u2019 actions of IM to increase freelancers\u2019 response rate are consistent with the actions to improve the order acceptance rate, thus demonstrating the critical role of increasing freelancers\u2019 response rate in raising their interest in the final acceptance of the order serving.",
|
| 648 |
+
"Our findings guide crowdsourcing platforms to design effective digital platform-based IMs to communicate with freelancers to arouse their response and interest in serving the orders.",
|
| 649 |
+
"Rather than that, including task-irrelevant information with a medium information richness level in IM harms the freelancers\u2019 response to the most significant extent.",
|
| 650 |
+
"Crowdworkers on platforms like Amazon Mechanical Turk face growing competition as a result of the global excess supply of digital labour."
|
| 651 |
+
],
|
| 652 |
+
"label": "Crowdsourcing and Freelancer Engagement",
|
| 653 |
+
"category": "application",
|
| 654 |
+
"confidence": 0.86,
|
| 655 |
+
"reasoning": "Method: Studies the impact of instant messaging (IM) on freelancers' response rates in crowdsourcing platforms. | Data: Sentences present findings from a large-scale field experiment on a crowdsourcing freight platform. | Impact: Informs platform strategies to enhance freelancer engagement and order acceptance rates.",
|
| 656 |
+
"niche": true
|
| 657 |
+
},
|
| 658 |
+
{
|
| 659 |
+
"topic_id": 41,
|
| 660 |
+
"count": 15,
|
| 661 |
+
"nearest_sentences": [
|
| 662 |
+
"Our contribution is twofold: First, accounting for organizations\u2019 twin transformation starting points in terms of their digitalization and sustainability experience and expertise, we reveal three pathways to becoming a twin transformer.",
|
| 663 |
+
"Our work also provides relevant practical implications supporting organizations in assessing their twin transformation maturity building the foundation for targeted capability development.",
|
| 664 |
+
"To enhance the understanding and provide corresponding guidance, we developed a twin transformation capability maturity model focusing on dynamic capabilities required to realize twin transformation based on a structured literature review and interviews with 13 experts.",
|
| 665 |
+
"Findings suggest that individuals\u2019 IT identity shape IS infusion role identity, and together, these identities influence their IS infusion.",
|
| 666 |
+
"Second, our work provides an overview of 45 relevant twin transformation capabilities structured along six capability dimensions and four maturity stages."
|
| 667 |
+
],
|
| 668 |
+
"label": "Twin Transformation Pathways",
|
| 669 |
+
"category": "theory",
|
| 670 |
+
"confidence": 0.89,
|
| 671 |
+
"reasoning": "Method: Reveals pathways for organizations to achieve twin transformation (digitalization and sustainability) based on their starting points. | Data: Sentences describe three pathways to becoming a twin transformer, with practical implications for capability development. | Impact: Guides organizations in assessing and advancing their twin transformation maturity for sustainable growth.",
|
| 672 |
+
"niche": false
|
| 673 |
+
},
|
| 674 |
+
{
|
| 675 |
+
"topic_id": 42,
|
| 676 |
+
"count": 20,
|
| 677 |
+
"nearest_sentences": [
|
| 678 |
+
"The results demonstrate the definitive role of disinformation and hate speech in polarizing societies.",
|
| 679 |
+
"The findings also offer a balanced perspective on internet censorship and social media monitoring as necessary evils to combat the disinformation menace and control polarization, but suggest that such efforts may lend support to a milieu of hate speech that fuels polarization.",
|
| 680 |
+
"We identify various issues expressed in social media conversations and find that compared to victim-oriented discourse, aggressor-oriented discourse on vigilantism displays more opinion polarization.",
|
| 681 |
+
"Hate speech in social media is an increasing problem that can negatively affect individuals and society as a whole.",
|
| 682 |
+
"These findings inform that users report hate speech based on potentially harmful content as well as their complex social interactions with other users and the platform."
|
| 683 |
+
],
|
| 684 |
+
"label": "Disinformation and Societal Polarization",
|
| 685 |
+
"category": "theory",
|
| 686 |
+
"confidence": 0.9,
|
| 687 |
+
"reasoning": "Method: Examines the role of disinformation and hate speech in polarizing societies, and the impact of internet censorship. | Data: Sentences present findings on the definitive role of disinformation in societal polarization. | Impact: Informs policymakers on balancing censorship and free speech to combat disinformation and reduce polarization.",
|
| 688 |
+
"niche": false
|
| 689 |
+
},
|
| 690 |
+
{
|
| 691 |
+
"topic_id": 43,
|
| 692 |
+
"count": 3,
|
| 693 |
+
"nearest_sentences": [
|
| 694 |
+
"This layer is connected to a ten-neuron hidden layer and one neuron output layer that estimates the probability of these attacks.",
|
| 695 |
+
"The level of stealthiness depends on the type of attack, the targeted task and the model.",
|
| 696 |
+
"Our analyses show that the GKIKA can effectively avoid some types of attacks.",
|
| 697 |
+
"The evasion attacks achieved an average fooling rate of 83.34% (GradAA) and 99.21% (GreedAA) which reduced the average accuracy from 90.35% to 55.22% (GradAA) and 48.29% (GreedAA) in twenty-four detection models.",
|
| 698 |
+
"Detecting and responding to information security threats quickly and effectively is becoming increasingly crucial as modern attackers continue to engineer their attacks to operate covertly to maintain long-term access to victims\u2019 systems after the initial penetration."
|
| 699 |
+
],
|
| 700 |
+
"label": "Neural Networks for Attack Detection",
|
| 701 |
+
"category": "methodology",
|
| 702 |
+
"confidence": 0.82,
|
| 703 |
+
"reasoning": "Method: Uses neural networks to estimate the probability of attacks based on stealthiness and targeted tasks. | Data: Sentences describe the architecture of the neural network model for attack detection. | Impact: Enhances cybersecurity measures by improving the detection of stealthy attacks in various contexts.",
|
| 704 |
+
"niche": true
|
| 705 |
+
},
|
| 706 |
+
{
|
| 707 |
+
"topic_id": 44,
|
| 708 |
+
"count": 3,
|
| 709 |
+
"nearest_sentences": [
|
| 710 |
+
"The prevalence of dementia is increasing due to a longer life expectancy and an ageing population.",
|
| 711 |
+
"Age itself emerges as a crucial determinant of survival, yet its effect is modulated by marital status.",
|
| 712 |
+
"Cognitive impairment affects patients\u2019 daily lives and places a financial and healthcare burden on them and their families.",
|
| 713 |
+
"Adult learning\u00a0is a complex phenomenon that takes place over an adult\u2019s lifetime and is not limited to a particular age.",
|
| 714 |
+
"This model is intended to offer an alternative therapeutic experience for older adults with dementia."
|
| 715 |
+
],
|
| 716 |
+
"label": "Dementia and Age-Related Factors",
|
| 717 |
+
"category": "application",
|
| 718 |
+
"confidence": 0.81,
|
| 719 |
+
"reasoning": "Method: Examines the increasing prevalence of dementia due to aging populations and the role of age and marital status in survival. | Data: Sentences highlight the impact of life expectancy and aging on dementia prevalence. | Impact: Informs healthcare strategies for early detection and management of dementia in aging populations.",
|
| 720 |
+
"niche": false
|
| 721 |
+
},
|
| 722 |
+
{
|
| 723 |
+
"topic_id": 45,
|
| 724 |
+
"count": 19,
|
| 725 |
+
"nearest_sentences": [
|
| 726 |
+
"This paper is the first to propose and validate an integrated task-technology-identity fit model to explain smartwatch utilization and users\u2019 satisfaction.",
|
| 727 |
+
"Besides evaluating fit with identity, the model assesses both perceived and actual task-technology fit of smartwatches.",
|
| 728 |
+
"This combination resulted in staggering adoption rates recently leading to question whether smartwatch users\u2019 choice and use satisfaction emerge from utility features or from its fashion characteristics.",
|
| 729 |
+
"ANN analysis revealed that post-adoption satisfaction is primarily attributed to smartwatches\u2019 ability to fit with users\u2019 identity and secondarily to its perceived fit with tasks.",
|
| 730 |
+
"The results showed that the functional value of smart accommodation is associated with the perception that such accommodation represents good value for the price, smart devices are useful, they can enhance control of stay experiences, and there are resources and opportunities facilitating the use of technology."
|
| 731 |
+
],
|
| 732 |
+
"label": "Task-Technology-Identity Fit Model",
|
| 733 |
+
"category": "theory",
|
| 734 |
+
"confidence": 0.88,
|
| 735 |
+
"reasoning": "Method: Proposes and validates an integrated model to explain smartwatch utilization and user satisfaction based on task-technology-identity fit. | Data: Sentences describe the evaluation of perceived and actual fit with identity in smartwatch use. | Impact: Advances understanding of user adoption and satisfaction with wearable technologies.",
|
| 736 |
+
"niche": true
|
| 737 |
+
},
|
| 738 |
+
{
|
| 739 |
+
"topic_id": 46,
|
| 740 |
+
"count": 6,
|
| 741 |
+
"nearest_sentences": [
|
| 742 |
+
"Results demonstrate high accuracy in knee OA classification using radiomics, showcasing its potential for early disease detection and personalized treatment approaches.",
|
| 743 |
+
"This study explores the potential of radiomics \u2014 quantitative image analysis combined with machine learning \u2014 to enhance knee OA diagnosis.",
|
| 744 |
+
"Machine learning algorithms were employed to classify degenerated and healthy knees based on radiomic features.",
|
| 745 |
+
"Using a multimodal dataset of MRI and CT scans from 138 knees, radiomic features were extracted from cartilage segments.",
|
| 746 |
+
"Osteoarthritis (OA) is a common joint disease affecting people worldwide, notably impacting quality of life due to joint pain and functional limitations."
|
| 747 |
+
],
|
| 748 |
+
"label": "Radiomics for Knee Osteoarthritis",
|
| 749 |
+
"category": "application",
|
| 750 |
+
"confidence": 0.87,
|
| 751 |
+
"reasoning": "Method: Explores the use of radiomics (quantitative image analysis combined with machine learning) for knee osteoarthritis (OA) diagnosis. | Data: Sentences demonstrate high accuracy in knee OA classification using radiomics. | Impact: Enables early disease detection and personalized treatment approaches for knee OA patients.",
|
| 752 |
+
"niche": true
|
| 753 |
+
},
|
| 754 |
+
{
|
| 755 |
+
"topic_id": 47,
|
| 756 |
+
"count": 45,
|
| 757 |
+
"nearest_sentences": [
|
| 758 |
+
"The study uses a sample of 476 respondents and employs a structural equation model.",
|
| 759 |
+
"Survey data collected from 261 usable questionnaires were tested against the research model using the structural equation modeling approach.",
|
| 760 |
+
"The study adopts a Covariance-based Structural Equation Modelling (CB-SEM) approach to analyse 589 valid responses.",
|
| 761 |
+
"The process incorporated the analysis of 669 questionnaires to test the proposed hypotheses using structural equation modeling.",
|
| 762 |
+
"Data were collected from 407 participants through a cross-sectional survey, and structural equation modeling was employed for analysis."
|
| 763 |
+
],
|
| 764 |
+
"label": "Structural Equation Modeling in IS",
|
| 765 |
+
"category": "methodology",
|
| 766 |
+
"confidence": 0.92,
|
| 767 |
+
"reasoning": "Method: Employs structural equation modeling (SEM) to test research models using survey data. | Data: Sentences describe the use of SEM with samples ranging from 261 to 476 respondents. | Impact: Provides a robust methodological approach for validating theoretical models in information systems research.",
|
| 768 |
+
"niche": false
|
| 769 |
+
},
|
| 770 |
+
{
|
| 771 |
+
"topic_id": 48,
|
| 772 |
+
"count": 59,
|
| 773 |
+
"nearest_sentences": [
|
| 774 |
+
"These findings contribute to the literature while having key practical implications for e-commerce websites, retailers, and customers.",
|
| 775 |
+
"Prior research has employed diverse theoretical perspectives to understand and explain consumer behavior within s-commerce but has also produced inconsistent results.",
|
| 776 |
+
"In addition, product type moderates the impact of bullet screen on purchase intention, and the results indicate that peripheral cues have a stronger influence on purchase intention of experience products than search products.",
|
| 777 |
+
"We also explore how stimuli such as functionality, communication style similarity, and aesthetics indirectly affect outcomes like customer satisfaction and reuse intention, mediated by four types of customer experiences.",
|
| 778 |
+
"The research portrays an integrated research model involving factors that impact behavioral intention and use behavior of s-commerce consumers whilst synthesizing prior empirical findings."
|
| 779 |
+
],
|
| 780 |
+
"label": "Consumer Behavior in E-Commerce",
|
| 781 |
+
"category": "theory",
|
| 782 |
+
"confidence": 0.91,
|
| 783 |
+
"reasoning": "Method: Examines consumer behavior in social commerce (s-commerce) using diverse theoretical perspectives. | Data: Sentences highlight inconsistent results in prior research and propose practical implications for e-commerce stakeholders. | Impact: Informs retailers and e-commerce platforms on strategies to enhance customer engagement and satisfaction.",
|
| 784 |
+
"niche": false
|
| 785 |
+
},
|
| 786 |
+
{
|
| 787 |
+
"topic_id": 49,
|
| 788 |
+
"count": 9,
|
| 789 |
+
"nearest_sentences": [
|
| 790 |
+
"Confirmation bias reinforces the reliance on conclusions reached with biased data, leading to a vicious cycle, in which biased assumptions remain uncorrected.",
|
| 791 |
+
"When biases remain undetected and untreated in CIM, they may lead to decisions based on biased information, increasing the risk of an inefficient response.",
|
| 792 |
+
"We suggest mindful debiasing as a possible counter-strategy against these bias effects in CIM.",
|
| 793 |
+
"While the effects of SMIP have been extensively studied, there is limited understanding of the interplay between two key components of this phenomenon: confirmation bias (reinforcing one\u2019s attitudes and beliefs) and echo chambers (i.e., hear their own voice).",
|
| 794 |
+
"The study's framework and results are posited as adding value to the extant literature and practice, directly related to status quo bias theory, dual-factor model and TAM."
|
| 795 |
+
],
|
| 796 |
+
"label": "Confirmation Bias in Decision-Making",
|
| 797 |
+
"category": "theory",
|
| 798 |
+
"confidence": 0.85,
|
| 799 |
+
"reasoning": "Method: Explores the role of confirmation bias in reinforcing reliance on biased data and assumptions in Crisis Information Management (CIM). | Data: Sentences describe the vicious cycle of biased assumptions remaining uncorrected in decision-making. | Impact: Highlights the need for bias detection and mitigation strategies to improve decision-making in crisis scenarios.",
|
| 800 |
+
"niche": true
|
| 801 |
+
},
|
| 802 |
+
{
|
| 803 |
+
"topic_id": 50,
|
| 804 |
+
"count": 3,
|
| 805 |
+
"nearest_sentences": [
|
| 806 |
+
"We prove that the optimal solutions of this model change piecewise linearly with respect to the hyperparameters.",
|
| 807 |
+
"Nonlinearities and nonconvexities in the optimization problem is further tailored for global optimality and computational advancements by reformulations and piecewise linearizations to address the complexity of the task with additional binary variables, representing the selection of a particular input or data.",
|
| 808 |
+
"Interestingly, our theory and empirical results suggest that quadratic effect exist among critical constructs in our theoretical model and that the underlying complexity require further investigation and that linear models may not be necessarily sufficient.",
|
| 809 |
+
"A solution path algorithm is proposed to efficiently identify the optimal solutions, thereby accelerating the hyperparameter tuning process.",
|
| 810 |
+
"Numerical experiments further confirm that the proposed model achieves robust performance even under noisy data conditions."
|
| 811 |
+
],
|
| 812 |
+
"label": "Hyperparameter Optimization Models",
|
| 813 |
+
"category": "methodology",
|
| 814 |
+
"confidence": 0.83,
|
| 815 |
+
"reasoning": "Method: Proves the piecewise linear change of optimal solutions with respect to hyperparameters in optimization models. | Data: Sentences describe reformulations and piecewise linearizations to address complexity in optimization tasks. | Impact: Advances hyperparameter tuning techniques, improving the efficiency and effectiveness of machine learning models.",
|
| 816 |
+
"niche": true
|
| 817 |
+
},
|
| 818 |
+
{
|
| 819 |
+
"topic_id": 51,
|
| 820 |
+
"count": 7,
|
| 821 |
+
"nearest_sentences": [
|
| 822 |
+
"The proposed framework is composed of three steps.",
|
| 823 |
+
"Furthermore, we illustrate the importance of preprocessing steps when applying these methods and identify relevant product insights.",
|
| 824 |
+
"The framework is validated through a set of prototypes, which demonstrate the feasibility of buyers expressing their needs in the form of actions and recommending products accordingly.",
|
| 825 |
+
"We show the framework\u2019s applicability by systematically classifying a sample of publications shortlisted to demonstrate its usefulness.",
|
| 826 |
+
"In this article, we propose a comprehensive and well-founded process to fill this need."
|
| 827 |
+
],
|
| 828 |
+
"label": "Preprocessing in Data Analysis",
|
| 829 |
+
"category": "methodology",
|
| 830 |
+
"confidence": 0.8,
|
| 831 |
+
"reasoning": "Method: Proposes a three-step framework for preprocessing in data analysis and identifies relevant product insights. | Data: Sentences emphasize the importance of preprocessing steps in applying analytical methods. | Impact: Improves data quality and analytical outcomes by standardizing preprocessing practices.",
|
| 832 |
+
"niche": true
|
| 833 |
+
},
|
| 834 |
+
{
|
| 835 |
+
"topic_id": 52,
|
| 836 |
+
"count": 2,
|
| 837 |
+
"nearest_sentences": [
|
| 838 |
+
"The significance of means to feed the world population despite its steady increase in number cannot be overstated.",
|
| 839 |
+
"As a result, citizens are offered mobility that cannot be considered truly smart.",
|
| 840 |
+
"However, the disruptive impact of these business models on society is not always judged favourably.",
|
| 841 |
+
"However, the extant literature lacks in quantitative explanation of such impacts.",
|
| 842 |
+
"Moreover, CSR posts are not fully effective in developed countries."
|
| 843 |
+
],
|
| 844 |
+
"label": "Smart Mobility and Sustainability",
|
| 845 |
+
"category": "application",
|
| 846 |
+
"confidence": 0.79,
|
| 847 |
+
"reasoning": "Method: Addresses challenges in smart mobility and sustainability, particularly in feeding growing populations and improving mobility solutions. | Data: Sentences highlight the limitations of current mobility offerings and the need for smarter solutions. | Impact: Informs urban planning and policy initiatives to create sustainable and efficient mobility systems.",
|
| 848 |
+
"niche": false
|
| 849 |
+
},
|
| 850 |
+
{
|
| 851 |
+
"topic_id": 53,
|
| 852 |
+
"count": 6,
|
| 853 |
+
"nearest_sentences": [
|
| 854 |
+
"Another issue encountered in multi-objective FS approaches is related to the correlation between features.",
|
| 855 |
+
"To address these challenges, we introduce a multi-objective FS approach that makes several significant contributions.",
|
| 856 |
+
"However, multi-objective FS is more challenging because it tries to optimize two conflicting objectives, namely minimizing the feature set and classification error.",
|
| 857 |
+
"We examine each approach across the broad cross-section of categories as well as when tailored to a singular category of study.",
|
| 858 |
+
"Supervised learning techniques outperformed the other text analytic techniques in our cross-category analysis, and they were especially effective when confined to a single category of study."
|
| 859 |
+
],
|
| 860 |
+
"label": "Multi-Objective Feature Selection",
|
| 861 |
+
"category": "methodology",
|
| 862 |
+
"confidence": 0.84,
|
| 863 |
+
"reasoning": "Method: Introduces a multi-objective feature selection (FS) approach to address challenges related to feature correlation. | Data: Sentences describe the contributions of the proposed FS approach in handling multi-objective scenarios. | Impact: Enhances the accuracy and efficiency of machine learning models by optimizing feature selection processes.",
|
| 864 |
+
"niche": true
|
| 865 |
+
},
|
| 866 |
+
{
|
| 867 |
+
"topic_id": 54,
|
| 868 |
+
"count": 16,
|
| 869 |
+
"nearest_sentences": [
|
| 870 |
+
"Traditional data quality validation relies on data unit tests, which use global metrics to determine if data quality falls within expected ranges.",
|
| 871 |
+
"We introduce an advanced method for validating data quality, which is crucial for ensuring reliable analytics insights.",
|
| 872 |
+
"The monitoring phase involves using these tests for new data batches, with conditional metrics helping us identify potential errors.",
|
| 873 |
+
"The obtained results on real-world datasets reveal a substantial enhancement in the quality of the final solutions.",
|
| 874 |
+
"In the discovery phase, we derive conditional metric-based unit tests from historical data, focusing on stability to select appropriate metrics."
|
| 875 |
+
],
|
| 876 |
+
"label": "Advanced Data Quality Validation",
|
| 877 |
+
"category": "methodology",
|
| 878 |
+
"confidence": 0.88,
|
| 879 |
+
"reasoning": "Method: Introduces an advanced method for validating data quality, moving beyond traditional data unit tests. | Data: Sentences describe the limitations of global metrics in data quality validation and propose a new approach. | Impact: Improves the reliability of analytics insights by ensuring high-quality data inputs.",
|
| 880 |
+
"niche": false
|
| 881 |
+
},
|
| 882 |
+
{
|
| 883 |
+
"topic_id": 55,
|
| 884 |
+
"count": 59,
|
| 885 |
+
"nearest_sentences": [
|
| 886 |
+
"The study contributes to the limited research on chatbots and suggests improvement in customer service.",
|
| 887 |
+
"This research makes significant theoretical contributions by integrating two models into a simplified model in chatbot literature and manifest that trust affects the willingness to use the cognitive chatbot which drives automation.",
|
| 888 |
+
"To understand how customers process and react to chatbot anthropomorphism, this study applied Wixom and Todd\u2019s model and social information processing theory which guide this study to examine how object-based social beliefs (i.e., chatbot warmth and chatbot competence) of anthropomorphic chatbot influence service evaluation and customer purchase by generating behavioral beliefs (i.e., trust in chatbot and chatbot overload).",
|
| 889 |
+
"Anthropomorphism, referring to human-like traits exhibited by non-human entities, is considered a key principle to facilitate customers\u2019 positive evaluation of chatbot service and purchase decisions.",
|
| 890 |
+
"This chatbot not only augments productivity but also evokes behavioural biases amongst its initial users."
|
| 891 |
+
],
|
| 892 |
+
"label": "Chatbot Trust and Automation",
|
| 893 |
+
"category": "theory",
|
| 894 |
+
"confidence": 0.9,
|
| 895 |
+
"reasoning": "Method: Integrates models to study the impact of trust on the willingness to use cognitive chatbots and their automation. | Data: Sentences highlight the theoretical contributions of the study to chatbot literature. | Impact: Informs the design of trustworthy chatbots, enhancing customer service and user adoption.",
|
| 896 |
+
"niche": false
|
| 897 |
+
},
|
| 898 |
+
{
|
| 899 |
+
"topic_id": 56,
|
| 900 |
+
"count": 9,
|
| 901 |
+
"nearest_sentences": [
|
| 902 |
+
"Based on our analysis, we propose a conceptual framework of major building blocks (input, process and outcomes) for the development and implementation of responsive governance at the local, regional and national levels of administrative hierarchy.",
|
| 903 |
+
"Over the recent years, responsiveness has gained importance as it is a critical element of public governance processes and acts as a driving factor for supporting the achievement of governance objectives, especially in the implementation phases.",
|
| 904 |
+
"In this study, we identify the knowledge gaps in the realm of responsive governance based on a systematic literature review.",
|
| 905 |
+
"Using a real-life case application and interviews with a panel of experts, the article identifies IS initiatives, performance measures for each of the mapped objectives derived from governance and control frameworks that may provide guidance for practitioners.",
|
| 906 |
+
"Drawing on trust transfer theory and a mixed-methods approach, we identify three key engagement attributes: Collaboration, Authenticity, and Governance (CAG)."
|
| 907 |
+
],
|
| 908 |
+
"label": "Responsive Governance Frameworks",
|
| 909 |
+
"category": "theory",
|
| 910 |
+
"confidence": 0.86,
|
| 911 |
+
"reasoning": "Method: Proposes a conceptual framework for responsive governance at local, regional, and national levels. | Data: Sentences describe the building blocks (input, process, outcomes) for responsive governance. | Impact: Guides public governance processes in achieving objectives through responsive and adaptive strategies.",
|
| 912 |
+
"niche": false
|
| 913 |
+
},
|
| 914 |
+
{
|
| 915 |
+
"topic_id": 57,
|
| 916 |
+
"count": 6,
|
| 917 |
+
"nearest_sentences": [
|
| 918 |
+
"This study investigates the skills employers value by analyzing job descriptions.",
|
| 919 |
+
"A third of the essential skills in 2025 will consist of technology competencies not yet regarded as crucial to today's job requirements.",
|
| 920 |
+
"Five years from now, over two-thirds of skills considered important in today\u2019s job requirements will change.",
|
| 921 |
+
"This study provides a better understanding by investigating the interplay between the demand for skills in the job market and curriculum development.",
|
| 922 |
+
"The core skill clusters are hard skills related to Big data, Business Intelligence, and analytical techniques."
|
| 923 |
+
],
|
| 924 |
+
"label": "Future Job Skill Requirements",
|
| 925 |
+
"category": "application",
|
| 926 |
+
"confidence": 0.83,
|
| 927 |
+
"reasoning": "Method: Analyzes job descriptions to identify skills employers value and future technology competencies. | Data: Sentences highlight the shift in essential skills by 2025, with a focus on technology competencies. | Impact: Informs workforce development strategies and educational programs to align with future job market demands.",
|
| 928 |
+
"niche": false
|
| 929 |
+
},
|
| 930 |
+
{
|
| 931 |
+
"topic_id": 58,
|
| 932 |
+
"count": 6,
|
| 933 |
+
"nearest_sentences": [
|
| 934 |
+
"We contribute to theory and practice by uncovering relevant aspects of data and provide theoretical propositions on how decision-making can be improved in automotive procurement departments.",
|
| 935 |
+
"We address the issue in the context of computer-aided decision-making.",
|
| 936 |
+
"In this paper, a decision-making approach containing robotic assistance is proposed.",
|
| 937 |
+
"Third, the above model and solution algorithm are imported into robots that assist in decision making.",
|
| 938 |
+
"An information-centric framework is developed and tested based on a popular production-planning decision task."
|
| 939 |
+
],
|
| 940 |
+
"label": "Data-Driven Automotive Procurement",
|
| 941 |
+
"category": "application",
|
| 942 |
+
"confidence": 0.85,
|
| 943 |
+
"reasoning": "Method: Addresses data-driven decision-making in automotive procurement departments to improve decision-making processes. | Data: Sentences propose theoretical propositions on enhancing decision-making through data insights. | Impact: Optimizes procurement strategies in the automotive industry, improving efficiency and cost-effectiveness.",
|
| 944 |
+
"niche": true
|
| 945 |
+
},
|
| 946 |
+
{
|
| 947 |
+
"topic_id": 59,
|
| 948 |
+
"count": 20,
|
| 949 |
+
"nearest_sentences": [
|
| 950 |
+
"Among machine learning techniques, classification techniques are useful for various business applications, but classification algorithms perform poorly with imbalanced data.",
|
| 951 |
+
"Our theoretical analysis demonstrates that classifiers exhibit universal vulnerability under conditions of data imbalance and distributional shifts.",
|
| 952 |
+
"To demonstrate the effectiveness of the proposed framework, we conducted a comparative evaluation of existing machine learning methods designed for modeling imbalanced data and outlier detection.",
|
| 953 |
+
"However, the ability of machine learning algorithms to predict the minority class deteriorates in the presence of class imbalance.",
|
| 954 |
+
"In this study, we propose a classification technique with improved binary classification performance on both the minority and majority classes of imbalanced structured data."
|
| 955 |
+
],
|
| 956 |
+
"label": "Imbalanced Data in Classification",
|
| 957 |
+
"category": "methodology",
|
| 958 |
+
"confidence": 0.89,
|
| 959 |
+
"reasoning": "Method: Examines the universal vulnerability of classification algorithms under conditions of data imbalance and distributional shifts. | Data: Sentences highlight the poor performance of classifiers with imbalanced data in business applications. | Impact: Advances techniques for handling imbalanced data, improving the robustness of machine learning models.",
|
| 960 |
+
"niche": false
|
| 961 |
+
}
|
| 962 |
+
]
|
loaded_data.csv
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
requirements (2).txt
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
gradio>=4.44.0
|
| 2 |
+
langchain-core>=0.2.0
|
| 3 |
+
langchain-mistralai>=0.1.0
|
| 4 |
+
langgraph>=0.2.0
|
| 5 |
+
sentence-transformers>=2.7.0
|
| 6 |
+
scikit-learn>=1.4.0
|
| 7 |
+
bertopic>=0.16.0
|
| 8 |
+
plotly>=5.22.0
|
| 9 |
+
numpy>=1.26.0
|
| 10 |
+
pandas>=2.2.0
|
| 11 |
+
hdbscan>=0.8.33
|
| 12 |
+
umap-learn>=0.5.6
|
| 13 |
+
pynndescent>=0.5.12
|
| 14 |
+
nltk>=3.8.1
|
summaries_abstract.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
tools.py
ADDED
|
@@ -0,0 +1,606 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# tools.py — Scientific Document Topic Analyzer
|
| 2 |
+
# Built on the Braun & Clarke (2006) Thematic Analysis Framework.
|
| 3 |
+
# Implementation: Zero-loop, zero-exception, functional-first logic.
|
| 4 |
+
|
| 5 |
+
from dotenv import load_dotenv
|
| 6 |
+
load_dotenv()
|
| 7 |
+
|
| 8 |
+
import re
|
| 9 |
+
import json
|
| 10 |
+
import os
|
| 11 |
+
import numpy as np
|
| 12 |
+
import pandas as pd
|
| 13 |
+
import plotly.express as px
|
| 14 |
+
import plotly.graph_objects as go
|
| 15 |
+
from langchain_core.tools import tool
|
| 16 |
+
from langchain_core.prompts import PromptTemplate
|
| 17 |
+
from langchain_core.output_parsers import JsonOutputParser
|
| 18 |
+
from langchain_mistralai import ChatMistralAI
|
| 19 |
+
from sentence_transformers import SentenceTransformer
|
| 20 |
+
from sklearn.cluster import AgglomerativeClustering, DBSCAN
|
| 21 |
+
from sklearn.metrics.pairwise import cosine_similarity
|
| 22 |
+
from sklearn.decomposition import PCA
|
| 23 |
+
import nltk
|
| 24 |
+
|
| 25 |
+
# Initialize NLP resources
|
| 26 |
+
nltk.download("punkt", quiet=True)
|
| 27 |
+
nltk.download("punkt_tab", quiet=True)
|
| 28 |
+
from nltk.tokenize import sent_tokenize
|
| 29 |
+
|
| 30 |
+
# --- Global Configuration & Taxonomy ---
|
| 31 |
+
|
| 32 |
+
COLUMN_MAP = {
|
| 33 |
+
"abstract": ["Abstract"],
|
| 34 |
+
"title": ["Title"],
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
EMBEDDING_MODEL_ID = "all-MiniLM-L6-v2"
|
| 38 |
+
NEAREST_NEIGHBORS_K = 5
|
| 39 |
+
MAX_TOPIC_BATCH_SIZE = 60
|
| 40 |
+
SENTENCE_HARD_LIMIT = 3000
|
| 41 |
+
DEFAULT_CLUSTERING_THRESHOLD = 0.7
|
| 42 |
+
LLM_GATEWAY_TIMEOUT = 120
|
| 43 |
+
|
| 44 |
+
# Regex patterns to filter out standard academic publishing noise
|
| 45 |
+
JUNK_TEXT_REGEXES = [
|
| 46 |
+
r"©\s*\d{4}",
|
| 47 |
+
r"elsevier\s*(b\.v\.)?",
|
| 48 |
+
r"springer\s*(nature)?",
|
| 49 |
+
r"wiley\s*(online\s*library)?",
|
| 50 |
+
r"all\s+rights\s+reserved",
|
| 51 |
+
r"published\s+by\s+[a-z\s]+",
|
| 52 |
+
r"doi:\s*10\.",
|
| 53 |
+
r"www\.[a-z]+\.[a-z]+",
|
| 54 |
+
r"https?://",
|
| 55 |
+
r"copyright\s*\d{4}",
|
| 56 |
+
r"taylor\s*&\s*francis",
|
| 57 |
+
r"sage\s+publications",
|
| 58 |
+
r"emerald\s+publishing",
|
| 59 |
+
r"journal\s+of\s+[a-z\s]+issn",
|
| 60 |
+
r"volume\s+\d+,?\s+issue\s+\d+",
|
| 61 |
+
r"pp\.\s*\d+[-–]\d+",
|
| 62 |
+
r"received\s+\d+\s+\w+\s+\d{4}",
|
| 63 |
+
r"accepted\s+\d+\s+\w+\s+\d{4}",
|
| 64 |
+
r"available\s+online",
|
| 65 |
+
r"this\s+is\s+an\s+open\s+access",
|
| 66 |
+
r"creative\s+commons",
|
| 67 |
+
r"please\s+cite\s+this\s+article",
|
| 68 |
+
]
|
| 69 |
+
|
| 70 |
+
CATEGORY_HIERARCHY_PAJAIS = [
|
| 71 |
+
"Artificial Intelligence Methods",
|
| 72 |
+
"Natural Language Processing",
|
| 73 |
+
"Machine Learning",
|
| 74 |
+
"Deep Learning",
|
| 75 |
+
"Knowledge Representation",
|
| 76 |
+
"Ontologies & Semantic Web",
|
| 77 |
+
"Information Retrieval",
|
| 78 |
+
"Recommender Systems",
|
| 79 |
+
"Decision Support Systems",
|
| 80 |
+
"Human-Computer Interaction",
|
| 81 |
+
"Explainability & Transparency",
|
| 82 |
+
"Fairness, Accountability & Ethics",
|
| 83 |
+
"Data Management & Integration",
|
| 84 |
+
"Text Mining & Analytics",
|
| 85 |
+
"Sentiment Analysis",
|
| 86 |
+
"Social Media Analysis",
|
| 87 |
+
"Business Intelligence",
|
| 88 |
+
"Process Automation & RPA",
|
| 89 |
+
"Computer Vision",
|
| 90 |
+
"Speech & Audio Processing",
|
| 91 |
+
"Multi-Agent Systems",
|
| 92 |
+
"Robotics & Autonomous Systems",
|
| 93 |
+
"Healthcare & Biomedical AI",
|
| 94 |
+
"Finance & Risk Analytics",
|
| 95 |
+
"Education & E-Learning",
|
| 96 |
+
]
|
| 97 |
+
|
| 98 |
+
# --- Internal Utility Logic ---
|
| 99 |
+
|
| 100 |
+
def _is_unwanted_metadata(text_segment: str) -> bool:
|
| 101 |
+
"""Identifies if a string matches academic boilerplate patterns."""
|
| 102 |
+
return any(map(lambda pattern: bool(re.search(pattern, text_segment, re.IGNORECASE)), JUNK_TEXT_REGEXES))
|
| 103 |
+
|
| 104 |
+
def _refine_sentence_list(raw_list: list) -> list:
|
| 105 |
+
"""Filters out boilerplate and very short segments from the corpus."""
|
| 106 |
+
clean_collection = list(filter(lambda s: not _is_unwanted_metadata(s), raw_list))
|
| 107 |
+
meaningful_subs = list(filter(lambda s: len(s.split()) >= 6, clean_collection))
|
| 108 |
+
return meaningful_subs
|
| 109 |
+
|
| 110 |
+
def _extract_sentences_from_corpus(text_blocks: list) -> list:
|
| 111 |
+
"""Tokenizes multiple text blocks into a flat list of clean sentences."""
|
| 112 |
+
tokenized_nested = list(map(sent_tokenize, text_blocks))
|
| 113 |
+
flat_list = [item for sublist in tokenized_nested for item in sublist]
|
| 114 |
+
return _refine_sentence_list(flat_list)
|
| 115 |
+
|
| 116 |
+
def _generate_vector_embeddings(sentence_list: list) -> np.ndarray:
|
| 117 |
+
"""Converts text into normalized vector representations using SBERT."""
|
| 118 |
+
vector_engine = SentenceTransformer(EMBEDDING_MODEL_ID)
|
| 119 |
+
return vector_engine.encode(sentence_list, normalize_embeddings=True, show_progress_bar=False)
|
| 120 |
+
|
| 121 |
+
def _perform_hierarchical_clustering(vectors: np.ndarray, distance_cutoff: float) -> np.ndarray:
|
| 122 |
+
"""Clusters vectors using Agglomerative Clustering with a cosine metric."""
|
| 123 |
+
return AgglomerativeClustering(
|
| 124 |
+
metric="cosine", linkage="average",
|
| 125 |
+
distance_threshold=distance_cutoff, n_clusters=None,
|
| 126 |
+
).fit_predict(vectors)
|
| 127 |
+
|
| 128 |
+
def _perform_dbscan_clustering(vectors: np.ndarray, eps: float = 0.3, min_samples: int = 5) -> np.ndarray:
|
| 129 |
+
"""Clusters vectors using DBSCAN with cosine metric. Returns cluster assignments (-1 for noise)."""
|
| 130 |
+
return DBSCAN(eps=eps, min_samples=min_samples, metric="cosine").fit_predict(vectors)
|
| 131 |
+
|
| 132 |
+
def _get_cluster_centroids(vectors: np.ndarray, group_labels: np.ndarray) -> dict:
|
| 133 |
+
"""Calculates the mean vector for each discovered cluster."""
|
| 134 |
+
active_groups = sorted(set(group_labels.tolist()) - {-1})
|
| 135 |
+
return dict(map(lambda g: (g, vectors[group_labels == g].mean(axis=0)), active_groups))
|
| 136 |
+
|
| 137 |
+
def _find_exemplary_sentences(midpoint_vector: np.ndarray, all_texts: list,
|
| 138 |
+
all_vectors: np.ndarray, top_k: int) -> list:
|
| 139 |
+
"""Finds sentences whose vectors are closest to the cluster centroid."""
|
| 140 |
+
closeness_scores = cosine_similarity([midpoint_vector], all_vectors)[0]
|
| 141 |
+
best_indices = np.argsort(closeness_scores)[::-1][:top_k].tolist()
|
| 142 |
+
return list(map(lambda idx: all_texts[idx], best_indices))
|
| 143 |
+
|
| 144 |
+
def _assemble_cluster_summaries(group_labels: np.ndarray, text_source: list,
|
| 145 |
+
vector_source: np.ndarray) -> list:
|
| 146 |
+
"""Builds a JSON-ready summary for every identified topic cluster."""
|
| 147 |
+
midpoints = _get_cluster_centroids(vector_source, group_labels)
|
| 148 |
+
|
| 149 |
+
def _format_node(cluster_id):
|
| 150 |
+
membership_mask = group_labels == cluster_id
|
| 151 |
+
return {
|
| 152 |
+
"topic_id": cluster_id,
|
| 153 |
+
"count": int(membership_mask.sum()),
|
| 154 |
+
"centroid": midpoints[cluster_id].tolist(),
|
| 155 |
+
"nearest_sentences": _find_exemplary_sentences(
|
| 156 |
+
midpoints[cluster_id], text_source, vector_source, NEAREST_NEIGHBORS_K),
|
| 157 |
+
}
|
| 158 |
+
return list(map(_format_node, sorted(midpoints.keys())))
|
| 159 |
+
|
| 160 |
+
def _initialize_llm_client() -> ChatMistralAI:
|
| 161 |
+
"""Configures the Mistral AI interface for thematic labeling."""
|
| 162 |
+
return ChatMistralAI(
|
| 163 |
+
model="mistral-large-latest",
|
| 164 |
+
temperature=0.2,
|
| 165 |
+
timeout=LLM_GATEWAY_TIMEOUT,
|
| 166 |
+
max_retries=0,
|
| 167 |
+
)
|
| 168 |
+
|
| 169 |
+
# --- Primary Analysis Tools ---
|
| 170 |
+
|
| 171 |
+
@tool
|
| 172 |
+
def load_scopus_csv(file_path: str) -> str:
|
| 173 |
+
"""
|
| 174 |
+
Ingests a Scopus CSV, cleans the data, and prepares it for analysis.
|
| 175 |
+
Saves 'loaded_data.csv' as a local cache.
|
| 176 |
+
"""
|
| 177 |
+
source_df = pd.read_csv(
|
| 178 |
+
file_path,
|
| 179 |
+
encoding="utf-8-sig",
|
| 180 |
+
quoting=0,
|
| 181 |
+
engine="python",
|
| 182 |
+
on_bad_lines="skip",
|
| 183 |
+
)
|
| 184 |
+
source_df.to_csv("loaded_data.csv", index=False, encoding="utf-8")
|
| 185 |
+
|
| 186 |
+
total_records = len(source_df)
|
| 187 |
+
header_list = list(source_df.columns)
|
| 188 |
+
|
| 189 |
+
raw_abstracts = list(source_df["Abstract"].dropna().astype(str)) if "Abstract" in header_list else []
|
| 190 |
+
raw_titles = list(source_df["Title"].dropna().astype(str)) if "Title" in header_list else []
|
| 191 |
+
|
| 192 |
+
processed_abstracts = _extract_sentences_from_corpus(raw_abstracts)
|
| 193 |
+
processed_titles = _extract_sentences_from_corpus(raw_titles)
|
| 194 |
+
|
| 195 |
+
publication_years = pd.to_numeric(source_df["Year"], errors="coerce").dropna() if "Year" in header_list else pd.Series([], dtype=float)
|
| 196 |
+
period_string = f"{int(publication_years.min())} – {int(publication_years.max())}" if len(publication_years) > 0 else "N/A"
|
| 197 |
+
|
| 198 |
+
return json.dumps({
|
| 199 |
+
"papers": total_records,
|
| 200 |
+
"abstract_sentences": len(processed_abstracts),
|
| 201 |
+
"title_sentences": len(processed_titles),
|
| 202 |
+
"year_range": period_string,
|
| 203 |
+
"columns": header_list,
|
| 204 |
+
"abstract_coverage_pct": round(len(raw_abstracts) / total_records * 100, 1) if total_records else 0,
|
| 205 |
+
"title_coverage_pct": round(len(raw_titles) / total_records * 100, 1) if total_records else 0,
|
| 206 |
+
"sample_titles": list(source_df["Title"].dropna().head(5)) if "Title" in header_list else [],
|
| 207 |
+
"file_saved": "loaded_data.csv",
|
| 208 |
+
"note": f"Clustering cap set to {SENTENCE_HARD_LIMIT} entries for efficiency.",
|
| 209 |
+
}, indent=2)
|
| 210 |
+
|
| 211 |
+
@tool
|
| 212 |
+
def run_bertopic_discovery(run_key: str = "abstract", threshold: float = 0.7, method: str = "hierarchical") -> str:
|
| 213 |
+
"""
|
| 214 |
+
Executes the BERTopic discovery logic: Embedding -> Clustering -> Visualization.
|
| 215 |
+
Outputs interactive Plotly charts and cluster summaries.
|
| 216 |
+
Supports both Hierarchical and DBSCAN clustering methods.
|
| 217 |
+
"""
|
| 218 |
+
cached_df = pd.read_csv("loaded_data.csv")
|
| 219 |
+
target_col = COLUMN_MAP[run_key][0]
|
| 220 |
+
unstructured_texts = list(cached_df[target_col].dropna().astype(str))
|
| 221 |
+
|
| 222 |
+
global_sentence_pool = _extract_sentences_from_corpus(unstructured_texts)
|
| 223 |
+
|
| 224 |
+
# Apply sentence limit to prevent memory overflow
|
| 225 |
+
optimized_sentence_pool = global_sentence_pool[:SENTENCE_HARD_LIMIT]
|
| 226 |
+
print(f"[Core Discovery] Processing {len(optimized_sentence_pool)} sentences from total pool of {len(global_sentence_pool)}.")
|
| 227 |
+
|
| 228 |
+
semantic_vectors = _generate_vector_embeddings(optimized_sentence_pool)
|
| 229 |
+
np.save(f"emb_{run_key}.npy", semantic_vectors)
|
| 230 |
+
|
| 231 |
+
if method == "dbscan":
|
| 232 |
+
cluster_assignments = _perform_dbscan_clustering(semantic_vectors, eps=threshold, min_samples=5)
|
| 233 |
+
else:
|
| 234 |
+
cluster_assignments = _perform_hierarchical_clustering(semantic_vectors, threshold)
|
| 235 |
+
thematic_summaries = _assemble_cluster_summaries(cluster_assignments, optimized_sentence_pool, semantic_vectors)
|
| 236 |
+
|
| 237 |
+
with open(f"summaries_{run_key}.json", "w") as storage_file:
|
| 238 |
+
json.dump(thematic_summaries, storage_file, indent=2)
|
| 239 |
+
|
| 240 |
+
entry_counts = [node["count"] for node in thematic_summaries]
|
| 241 |
+
node_identifiers = [node["topic_id"] for node in thematic_summaries]
|
| 242 |
+
centroid_stack = np.array([node["centroid"] for node in thematic_summaries])
|
| 243 |
+
|
| 244 |
+
# Visual 1: Inter-topic mapping via PCA
|
| 245 |
+
dimension_count = min(2, len(centroid_stack), centroid_stack.shape[1])
|
| 246 |
+
reduced_coords = PCA(n_components=dimension_count).fit_transform(centroid_stack)
|
| 247 |
+
dimension_x = reduced_coords[:, 0].tolist()
|
| 248 |
+
dimension_y = (reduced_coords[:, 1].tolist() if reduced_coords.shape[1] > 1 else [0] * len(dimension_x))
|
| 249 |
+
|
| 250 |
+
map_fig = px.scatter(
|
| 251 |
+
x=dimension_x, y=dimension_y,
|
| 252 |
+
size=entry_counts, text=list(map(str, node_identifiers)),
|
| 253 |
+
title=f"Thematic Landscape ({run_key})",
|
| 254 |
+
labels={"x": "Factor 1", "y": "Factor 2"},
|
| 255 |
+
size_max=40, color=entry_counts, color_continuous_scale="Viridis",
|
| 256 |
+
)
|
| 257 |
+
map_fig.update_traces(textposition="top center")
|
| 258 |
+
map_fig.update_layout(template="plotly_white")
|
| 259 |
+
v_file_1 = f"chart_{run_key}_intertopic.html"
|
| 260 |
+
map_fig.write_html(v_file_1, include_plotlyjs="cdn")
|
| 261 |
+
|
| 262 |
+
# Visual 2: Sentence distribution bar chart
|
| 263 |
+
top_nodes = thematic_summaries[:30]
|
| 264 |
+
bar_fig = px.bar(
|
| 265 |
+
x=list(map(lambda n: f"Topic {n['topic_id']}", top_nodes)),
|
| 266 |
+
y=list(map(lambda n: n["count"], top_nodes)),
|
| 267 |
+
title=f"Thematic Weight Distribution ({run_key}) — Top 30",
|
| 268 |
+
labels={"x": "Theme ID", "y": "Sentence Count"},
|
| 269 |
+
color=list(map(lambda n: n["count"], top_nodes)),
|
| 270 |
+
color_continuous_scale="Aggrnyl",
|
| 271 |
+
)
|
| 272 |
+
bar_fig.update_layout(template="plotly_white")
|
| 273 |
+
v_file_2 = f"chart_{run_key}_bars.html"
|
| 274 |
+
bar_fig.write_html(v_file_2, include_plotlyjs="cdn")
|
| 275 |
+
|
| 276 |
+
# Visual 3: Hierarchical Treemap
|
| 277 |
+
tree_fig = px.treemap(
|
| 278 |
+
names=list(map(lambda n: f"ID:{n['topic_id']}", thematic_summaries)),
|
| 279 |
+
parents=["Corpus"] * len(thematic_summaries),
|
| 280 |
+
values=entry_counts,
|
| 281 |
+
title=f"Topological Hierarchy ({run_key})",
|
| 282 |
+
)
|
| 283 |
+
tree_fig.update_layout(template="plotly_white")
|
| 284 |
+
v_file_3 = f"chart_{run_key}_hierarchy.html"
|
| 285 |
+
tree_fig.write_html(v_file_3, include_plotlyjs="cdn")
|
| 286 |
+
|
| 287 |
+
# Visual 4: Semantic Connectivity Matrix
|
| 288 |
+
preview_nodes = thematic_summaries[:20]
|
| 289 |
+
preview_vectors = np.array([n["centroid"] for n in preview_nodes])
|
| 290 |
+
similarity_grid = cosine_similarity(preview_vectors).tolist()
|
| 291 |
+
axis_labels = list(map(lambda n: f"T{n['topic_id']}", preview_nodes))
|
| 292 |
+
heat_fig = go.Figure(data=go.Heatmap(z=similarity_grid, x=axis_labels, y=axis_labels, colorscale="YlGnBu"))
|
| 293 |
+
heat_fig.update_layout(title=f"Semantic Proximity Heatmap ({run_key})", template="plotly_white")
|
| 294 |
+
v_file_4 = f"chart_{run_key}_heatmap.html"
|
| 295 |
+
heat_fig.write_html(v_file_4, include_plotlyjs="cdn")
|
| 296 |
+
|
| 297 |
+
return json.dumps({
|
| 298 |
+
"run_key": run_key,
|
| 299 |
+
"total_topics": len(thematic_summaries),
|
| 300 |
+
"total_sentences": len(global_sentence_pool),
|
| 301 |
+
"sentences_used": len(optimized_sentence_pool),
|
| 302 |
+
"sentences_capped": len(global_sentence_pool) > SENTENCE_HARD_LIMIT,
|
| 303 |
+
"threshold_used": threshold,
|
| 304 |
+
"summaries_file": f"summaries_{run_key}.json",
|
| 305 |
+
"embeddings_file": f"emb_{run_key}.npy",
|
| 306 |
+
"charts": [v_file_1, v_file_2, v_file_3, v_file_4],
|
| 307 |
+
"topics_preview": thematic_summaries[:3],
|
| 308 |
+
}, indent=2)
|
| 309 |
+
|
| 310 |
+
@tool
|
| 311 |
+
def label_topics_with_llm(run_key: str = "abstract") -> str:
|
| 312 |
+
"""
|
| 313 |
+
Queries Mistral AI to provide human-readable labels and metadata for clusters.
|
| 314 |
+
Uses batch processing to minimize API overhead and latency.
|
| 315 |
+
"""
|
| 316 |
+
with open(f"summaries_{run_key}.json", encoding="utf-8") as raw_json:
|
| 317 |
+
cluster_list = json.load(raw_json)
|
| 318 |
+
|
| 319 |
+
active_subset = cluster_list[:MAX_TOPIC_BATCH_SIZE]
|
| 320 |
+
|
| 321 |
+
# Structure data for the LLM's consumption
|
| 322 |
+
llm_payload = list(map(
|
| 323 |
+
lambda node: {
|
| 324 |
+
"topic_id": node["topic_id"],
|
| 325 |
+
"count": node["count"],
|
| 326 |
+
"sentences": node["nearest_sentences"][:2],
|
| 327 |
+
},
|
| 328 |
+
active_subset,
|
| 329 |
+
))
|
| 330 |
+
|
| 331 |
+
llm_handler = _initialize_llm_client()
|
| 332 |
+
json_interpreter = JsonOutputParser()
|
| 333 |
+
|
| 334 |
+
label_prompt = PromptTemplate(
|
| 335 |
+
input_variables=["input_json"],
|
| 336 |
+
template=(
|
| 337 |
+
"You are a specialized thematic coder for academic literature.\n\n"
|
| 338 |
+
"Analyze the following clusters discovered through BERTopic. "
|
| 339 |
+
"For each cluster, derive a research-oriented label with AI Council-style reasoning.\\n\\n"
|
| 340 |
+
"{input_json}\\n\\n"
|
| 341 |
+
"Respond ONLY with a JSON array containing these keys for each entry:\\n"
|
| 342 |
+
" topic_id (int), label (3-6 words), category (methodology/theory/application/context/empirical), "
|
| 343 |
+
" confidence (float), reasoning (object with keys: method, data, impact), niche (bool).\\n\\n"
|
| 344 |
+
"Reasoning structure (use brief, focused explanations):\\n"
|
| 345 |
+
" method: Explain the methodological or theoretical lens applied to this cluster (1-2 sentences)\\n"
|
| 346 |
+
" data: Describe the empirical patterns or evidence supporting this grouping (1-2 sentences)\\n"
|
| 347 |
+
" impact: Articulate the research or practice implications of this theme (1-2 sentences)\\n\\n"
|
| 348 |
+
"Generate entries for ALL {total_count} topics provided."
|
| 349 |
+
),
|
| 350 |
+
)
|
| 351 |
+
|
| 352 |
+
inference_chain = label_prompt | llm_handler | json_interpreter
|
| 353 |
+
ai_response = inference_chain.invoke({
|
| 354 |
+
"input_json": json.dumps(llm_payload, indent=2),
|
| 355 |
+
"total_count": len(active_subset),
|
| 356 |
+
})
|
| 357 |
+
|
| 358 |
+
# Map AI results back to the original database
|
| 359 |
+
response_directory = {str(item["topic_id"]): item for item in ai_response}
|
| 360 |
+
|
| 361 |
+
def _format_reasoning(reasoning_obj):
|
| 362 |
+
"""Converts multi-part reasoning structure into a readable string."""
|
| 363 |
+
if isinstance(reasoning_obj, dict):
|
| 364 |
+
parts = []
|
| 365 |
+
if "method" in reasoning_obj:
|
| 366 |
+
parts.append(f"Method: {reasoning_obj['method']}")
|
| 367 |
+
if "data" in reasoning_obj:
|
| 368 |
+
parts.append(f"Data: {reasoning_obj['data']}")
|
| 369 |
+
if "impact" in reasoning_obj:
|
| 370 |
+
parts.append(f"Impact: {reasoning_obj['impact']}")
|
| 371 |
+
return " | ".join(parts) if parts else ""
|
| 372 |
+
return str(reasoning_obj) if reasoning_obj else ""
|
| 373 |
+
|
| 374 |
+
final_labels = list(map(
|
| 375 |
+
lambda original: {
|
| 376 |
+
"topic_id": original["topic_id"],
|
| 377 |
+
"count": original["count"],
|
| 378 |
+
"nearest_sentences": original["nearest_sentences"],
|
| 379 |
+
"label": response_directory.get(str(original["topic_id"]), {}).get("label", f"Concept Group {original['topic_id']}"),
|
| 380 |
+
"category": response_directory.get(str(original["topic_id"]), {}).get("category", "application"),
|
| 381 |
+
"confidence": response_directory.get(str(original["topic_id"]), {}).get("confidence", 0.5),
|
| 382 |
+
"reasoning": _format_reasoning(response_directory.get(str(original["topic_id"]), {}).get("reasoning", "")),
|
| 383 |
+
"niche": response_directory.get(str(original["topic_id"]), {}).get("niche", False),
|
| 384 |
+
},
|
| 385 |
+
active_subset,
|
| 386 |
+
))
|
| 387 |
+
|
| 388 |
+
export_path = f"labels_{run_key}.json"
|
| 389 |
+
with open(export_path, "w") as out_file:
|
| 390 |
+
json.dump(final_labels, out_file, indent=2)
|
| 391 |
+
|
| 392 |
+
return json.dumps({
|
| 393 |
+
"run_key": run_key,
|
| 394 |
+
"total_labelled": len(final_labels),
|
| 395 |
+
"output_file": export_path,
|
| 396 |
+
"preview": final_labels[:5],
|
| 397 |
+
}, indent=2)
|
| 398 |
+
|
| 399 |
+
@tool
|
| 400 |
+
def consolidate_into_themes(run_key: str = "abstract", theme_map: str = "") -> str:
|
| 401 |
+
"""
|
| 402 |
+
Groups individual topic clusters into broader research themes.
|
| 403 |
+
Employs LLM-driven synthesis if no manual mapping is provided.
|
| 404 |
+
"""
|
| 405 |
+
with open(f"labels_{run_key}.json", encoding="utf-8") as raw_data:
|
| 406 |
+
labeled_topics = json.load(raw_data)
|
| 407 |
+
|
| 408 |
+
topic_lookup_table = {str(t["topic_id"]): t for t in labeled_topics}
|
| 409 |
+
manual_theme_design = json.loads(theme_map) if theme_map.strip() else {}
|
| 410 |
+
|
| 411 |
+
def _build_from_manual(name_id_pair):
|
| 412 |
+
theme_title, topic_id_list = name_id_pair
|
| 413 |
+
matching_topics = list(filter(lambda t: str(t["topic_id"]) in map(str, topic_id_list), labeled_topics))
|
| 414 |
+
aggregate_docs = sum(map(lambda t: t["count"], matching_topics))
|
| 415 |
+
sample_quotes = [s for t in matching_topics for s in t.get("nearest_sentences", [])][:5]
|
| 416 |
+
return {
|
| 417 |
+
"theme_name": theme_title,
|
| 418 |
+
"topic_ids": list(map(int, topic_id_list)),
|
| 419 |
+
"total_sentences": aggregate_docs,
|
| 420 |
+
"representative_sentences": sample_quotes,
|
| 421 |
+
"constituent_labels": list(map(lambda t: t.get("label", ""), matching_topics)),
|
| 422 |
+
}
|
| 423 |
+
|
| 424 |
+
def _build_from_intelligence():
|
| 425 |
+
llm_client = _initialize_llm_client()
|
| 426 |
+
json_output_mod = JsonOutputParser()
|
| 427 |
+
synthesis_prompt = PromptTemplate(
|
| 428 |
+
input_variables=["topic_definitions"],
|
| 429 |
+
template=(
|
| 430 |
+
"You are performing Phase 3 & 4 of thematic analysis (Braun & Clarke).\n\n"
|
| 431 |
+
"Data Clusters:\n{topic_definitions}\n\n"
|
| 432 |
+
"Consolidate these into 4-8 broad research themes.\n"
|
| 433 |
+
"Format: JSON array of objects with theme_name, topic_ids (list), rationale, representative_sentences (list).\n"
|
| 434 |
+
),
|
| 435 |
+
)
|
| 436 |
+
flow = synthesis_prompt | llm_client | json_output_mod
|
| 437 |
+
compact_definitions = list(map(
|
| 438 |
+
lambda t: {"topic_id": t["topic_id"], "label": t.get("label", ""), "sample": t.get("nearest_sentences", [""])[0][:100]},
|
| 439 |
+
labeled_topics[:MAX_TOPIC_BATCH_SIZE],
|
| 440 |
+
))
|
| 441 |
+
generated_themes = flow.invoke({"topic_definitions": json.dumps(compact_definitions, indent=2)})
|
| 442 |
+
return list(map(
|
| 443 |
+
lambda th: {
|
| 444 |
+
**th,
|
| 445 |
+
"total_sentences": sum(map(lambda tid: topic_lookup_table.get(str(tid), {}).get("count", 0), th.get("topic_ids", []))),
|
| 446 |
+
"constituent_labels": list(map(lambda tid: topic_lookup_table.get(str(tid), {}).get("label", ""), th.get("topic_ids", []))),
|
| 447 |
+
},
|
| 448 |
+
generated_themes,
|
| 449 |
+
))
|
| 450 |
+
|
| 451 |
+
final_thematic_set = (
|
| 452 |
+
list(map(_build_from_manual, manual_theme_design.items()))
|
| 453 |
+
if manual_theme_design
|
| 454 |
+
else _build_from_intelligence()
|
| 455 |
+
)
|
| 456 |
+
|
| 457 |
+
theme_store_1 = f"themes_{run_key}.json"
|
| 458 |
+
with open(theme_store_1, "w", encoding="utf-8") as f1:
|
| 459 |
+
json.dump(final_thematic_set, f1, indent=2)
|
| 460 |
+
with open("themes.json", "w", encoding="utf-8") as f_canonical:
|
| 461 |
+
json.dump(final_thematic_set, f_canonical, indent=2)
|
| 462 |
+
|
| 463 |
+
return json.dumps({
|
| 464 |
+
"run_key": run_key,
|
| 465 |
+
"total_themes": len(final_thematic_set),
|
| 466 |
+
"output_file": theme_store_1,
|
| 467 |
+
"themes_preview": [{"name": th["theme_name"], "size": th.get("total_sentences", 0)} for th in final_thematic_set],
|
| 468 |
+
}, indent=2)
|
| 469 |
+
|
| 470 |
+
@tool
|
| 471 |
+
def compare_with_taxonomy(run_key: str = "abstract") -> str:
|
| 472 |
+
"""
|
| 473 |
+
Aligns discovered themes with the PAJAIS research taxonomy.
|
| 474 |
+
Flags 'NOVEL' themes that represent potential scientific gaps.
|
| 475 |
+
"""
|
| 476 |
+
specific_themes_file = f"themes_{run_key}.json"
|
| 477 |
+
active_themes_file = specific_themes_file if os.path.exists(specific_themes_file) else "themes.json"
|
| 478 |
+
|
| 479 |
+
with open(active_themes_file, encoding="utf-8") as theme_io:
|
| 480 |
+
theme_collection = json.load(theme_io)
|
| 481 |
+
|
| 482 |
+
llm_bridge = _initialize_llm_client()
|
| 483 |
+
json_processor = JsonOutputParser()
|
| 484 |
+
|
| 485 |
+
alignment_prompt = PromptTemplate(
|
| 486 |
+
input_variables=["theme_input", "taxonomy_str"],
|
| 487 |
+
template=(
|
| 488 |
+
"You are a taxonomy alignment specialist.\n\n"
|
| 489 |
+
"Official Categories:\n{taxonomy_str}\n\n"
|
| 490 |
+
"User Themes:\n{theme_input}\n\n"
|
| 491 |
+
"Map each theme to the closest official category. If it is a completely new direction, mark as NOVEL.\n"
|
| 492 |
+
"Format: JSON array with theme_name, pajais_match, match_confidence, reasoning, is_novel.\n"
|
| 493 |
+
),
|
| 494 |
+
)
|
| 495 |
+
mapping_chain = alignment_prompt | llm_bridge | json_processor
|
| 496 |
+
|
| 497 |
+
theme_metadata = list(map(
|
| 498 |
+
lambda t: {
|
| 499 |
+
"theme_name": t["theme_name"],
|
| 500 |
+
"constituent_labels": t.get("constituent_labels", []),
|
| 501 |
+
"evidence": (t.get("representative_sentences", [""])[0][:100] if t.get("representative_sentences") else ""),
|
| 502 |
+
},
|
| 503 |
+
theme_collection,
|
| 504 |
+
))
|
| 505 |
+
|
| 506 |
+
alignment_results = mapping_chain.invoke({
|
| 507 |
+
"theme_input": json.dumps(theme_metadata, indent=2),
|
| 508 |
+
"taxonomy_str": "\n".join(f"- {cat}" for cat in CATEGORY_HIERARCHY_PAJAIS),
|
| 509 |
+
})
|
| 510 |
+
|
| 511 |
+
with open("taxonomy_map.json", "w", encoding="utf-8") as map_io:
|
| 512 |
+
json.dump(alignment_results, map_io, indent=2)
|
| 513 |
+
|
| 514 |
+
novel_count = sum(1 for entry in alignment_results if entry.get("is_novel", False))
|
| 515 |
+
|
| 516 |
+
return json.dumps({
|
| 517 |
+
"run_key": run_key,
|
| 518 |
+
"total_mapped": len(alignment_results),
|
| 519 |
+
"novel_entries": novel_count,
|
| 520 |
+
"standard_entries": len(alignment_results) - novel_count,
|
| 521 |
+
"mapping_file": "taxonomy_map.json",
|
| 522 |
+
"detailed_mapping": alignment_results,
|
| 523 |
+
}, indent=2)
|
| 524 |
+
|
| 525 |
+
@tool
|
| 526 |
+
def generate_comparison_csv() -> str:
|
| 527 |
+
"""
|
| 528 |
+
Aggregates results from Abstract and Title analyses into a single comparative report.
|
| 529 |
+
"""
|
| 530 |
+
def _read_theme_data(key):
|
| 531 |
+
path = f"themes_{key}.json"
|
| 532 |
+
return json.loads(open(path, encoding="utf-8").read()) if os.path.exists(path) else []
|
| 533 |
+
|
| 534 |
+
abstract_run_data = _read_theme_data("abstract")
|
| 535 |
+
title_run_data = _read_theme_data("title")
|
| 536 |
+
max_count = max(len(abstract_run_data), len(title_run_data), 1)
|
| 537 |
+
|
| 538 |
+
abs_padded = abstract_run_data + [{}] * (max_count - len(abstract_run_data))
|
| 539 |
+
ttl_padded = title_run_data + [{}] * (max_count - len(title_run_data))
|
| 540 |
+
|
| 541 |
+
comparative_rows = list(map(
|
| 542 |
+
lambda triple: {
|
| 543 |
+
"ID": triple[0] + 1,
|
| 544 |
+
"Abstract Theme": triple[1].get("theme_name", ""),
|
| 545 |
+
"Abstract Count": triple[1].get("total_sentences", 0),
|
| 546 |
+
"Title Theme": triple[2].get("theme_name", ""),
|
| 547 |
+
"Title Count": triple[2].get("total_sentences", 0),
|
| 548 |
+
"Consistency": "Matched" if str(triple[1].get("theme_name", ""))[:5].lower() == str(triple[2].get("theme_name", ""))[:5].lower() else "Distinct",
|
| 549 |
+
},
|
| 550 |
+
zip(range(max_count), abs_padded, ttl_padded)
|
| 551 |
+
))
|
| 552 |
+
|
| 553 |
+
report_df = pd.DataFrame(comparative_rows)
|
| 554 |
+
report_df.to_csv("comparison.csv", index=False)
|
| 555 |
+
|
| 556 |
+
return json.dumps({
|
| 557 |
+
"result_file": "comparison.csv",
|
| 558 |
+
"row_count": len(report_df),
|
| 559 |
+
"data_peek": comparative_rows[:3],
|
| 560 |
+
}, indent=2)
|
| 561 |
+
|
| 562 |
+
@tool
|
| 563 |
+
def export_narrative(run_key: str = "abstract") -> str:
|
| 564 |
+
"""
|
| 565 |
+
Generates a formal research narrative based on the thematic analysis results.
|
| 566 |
+
Produces a 500-word Section 7 draft.
|
| 567 |
+
"""
|
| 568 |
+
with open("themes.json", encoding="utf-8") as t_in:
|
| 569 |
+
thematic_data = json.load(t_in)
|
| 570 |
+
|
| 571 |
+
mapping_raw = open("taxonomy_map.json", encoding="utf-8").read() if os.path.exists("taxonomy_map.json") else "[]"
|
| 572 |
+
mapping_data = json.loads(mapping_raw)
|
| 573 |
+
|
| 574 |
+
narrative_llm = _initialize_llm_client()
|
| 575 |
+
narrative_llm.temperature = 0.4
|
| 576 |
+
|
| 577 |
+
narrative_prompt = PromptTemplate(
|
| 578 |
+
input_variables=["key", "themes", "mapping"],
|
| 579 |
+
template=(
|
| 580 |
+
"Write a formal academic Section 7 Discussion (approx 500 words).\n"
|
| 581 |
+
"Context: {key} analysis run.\n"
|
| 582 |
+
"Themes Found:\n{themes}\n\n"
|
| 583 |
+
"Taxonomy Alignment:\n{mapping}\n\n"
|
| 584 |
+
"Requirements:\n"
|
| 585 |
+
"1. Discuss the methodology (BERTopic + Braun & Clarke).\n"
|
| 586 |
+
"2. Interpret the key themes and their implications.\n"
|
| 587 |
+
"3. Analyze the NOVEL vs MAPPED categories.\n"
|
| 588 |
+
"4. Suggest future work. Use professional, scholarly language.\n"
|
| 589 |
+
),
|
| 590 |
+
)
|
| 591 |
+
composition_flow = narrative_prompt | narrative_llm
|
| 592 |
+
story_response = composition_flow.invoke({
|
| 593 |
+
"key": run_key,
|
| 594 |
+
"themes": json.dumps(thematic_data, indent=2),
|
| 595 |
+
"mapping": json.dumps(mapping_data, indent=2),
|
| 596 |
+
})
|
| 597 |
+
final_text = story_response.content if hasattr(story_response, "content") else str(story_response)
|
| 598 |
+
|
| 599 |
+
with open("narrative.txt", "w", encoding="utf-8") as narrative_io:
|
| 600 |
+
narrative_io.write(final_text)
|
| 601 |
+
|
| 602 |
+
return json.dumps({
|
| 603 |
+
"output_file": "narrative.txt",
|
| 604 |
+
"word_stats": len(final_text.split()),
|
| 605 |
+
"content_start": final_text[:400],
|
| 606 |
+
}, indent=2)
|