Spaces:
Sleeping
Sleeping
| """κ°μ± λΆμ Feature Plugin. | |
| API: /api/v1/sentiment | |
| """ | |
| import streamlit as st | |
| from . import run, overview, in_house, competitor, keyword_analysis, feedback, summary | |
| from .data import load_sentiment_data | |
| FEATURE_CONFIG = { | |
| "key": "sentiment", | |
| "name": "κ°μ± λΆμ", | |
| "icon": "π", | |
| "description": "AI νλ«νΌμ λΈλλ κ°μ± λΆμ κ²°κ³Ό", | |
| "api_base": "/api/v1/sentiment", | |
| "order": 1, | |
| } | |
| def render(base_ctx): | |
| """κ°μ± λΆμ feature λ λλ§.""" | |
| with st.spinner("κ°μ± λΆμ λ°μ΄ν° λ‘λ© μ€..."): | |
| data = load_sentiment_data( | |
| base_ctx.get("api_key") or "", | |
| base_ctx["campaign_id"], | |
| access_token=base_ctx.get("access_token") or "", | |
| ) | |
| if data is None: | |
| st.error("κ°μ± λΆμ λ°μ΄ν° λ‘λ© μ€ν¨") | |
| return | |
| # Inject base_ctx fields into data | |
| data["campaign_name"] = base_ctx.get("campaign_name", "") | |
| # 1. Feature summary | |
| summary.render_summary(data) | |
| # 2. Sub-tabs | |
| tabs = st.tabs([ | |
| "π μ€νμμ²", | |
| "π μ€λ²λ·°", | |
| "π μμ¬ λΈλλ", | |
| "π’ κ²½μμ¬", | |
| "π ν€μλ λΆμ", | |
| ]) | |
| tab_renderers = [ | |
| ("μ€νμμ²", run.render), | |
| ("μ€λ²λ·°", overview.render), | |
| ("μμ¬ λΈλλ", in_house.render), | |
| ("κ²½μμ¬", competitor.render), | |
| ("ν€μλ λΆμ", keyword_analysis.render), | |
| ] | |
| for tab, (label, renderer) in zip(tabs, tab_renderers): | |
| with tab: | |
| try: | |
| renderer(data) | |
| except Exception as e: | |
| st.error(f"{label} λ‘λ© μ€ν¨: {e}") | |
| # 3. Feedback (below tabs) | |
| feedback.render_feedback_stats(data.get("feedback_stats", {})) | |