diff --git a/HINDSIGHT_PAPER.md b/HINDSIGHT_PAPER.md index e03b845c..64cfe14e 100644 --- a/HINDSIGHT_PAPER.md +++ b/HINDSIGHT_PAPER.md @@ -808,38 +808,6 @@ Users may provide background in second person ("You are..."), but internal stora **Trajectory**: The opinion evolved from strong conviction (0.7 → 0.85) to weaker, more malleable belief (0.55) as evidence accumulated. -## 12. Use Cases and Real-World Deployment - -### 12.1 Multi-Persona Sports Commentary (Production Deployment) - -**Application**: AI-generated sports analysis and entertainment content with multiple agent personalities - -**Real-World System**: A production sports content platform where AI agents with distinct personalities co-host episodic shows discussing team performance, game analysis, and sports debates. - -**System Architecture**: -- **Multiple Banks**: Each bank has unique personality traits and sports background -- **Continuous Memory**: Banks maintain persistent team/player assessments across episodes spanning months -- **Opinion Evolution**: As games occur and statistics accumulate, banks automatically update beliefs through reinforcement -- **Personality-Driven Commentary**: The same game results generate different perspectives based on bank traits - -**Key Benefits Observed**: -1. **Viewer Engagement**: Improved audience retention with "personality diversity" as primary appeal -2. **Content Consistency**: Banks maintain recognizable voices across episodes without manual tuning -3. **Scalability**: New banks can be added with distinct personalities without retraining -4. **Opinion Richness**: Opinion networks capture nuanced, evolving assessments - -This deployment validates that personality-driven opinion systems can operate at production scale for content generation requiring consistent yet adaptive perspectives. - -### 12.2 Additional Use Cases - -**Customer Support**: Multi-agent systems with specialized personas (empathetic, analytical, creative) - -**Consistent Character AI**: Conversational AI characters for entertainment or education with stable personality - -**Explainable AI**: Systems requiring transparent decision-making where personality traits explain reasoning style - ---- - # Part III: Unified Hindsight Architecture ## 13. Integration: TEMPR + CARA diff --git a/hindsight-control-plane/src/components/data-view.tsx b/hindsight-control-plane/src/components/data-view.tsx index 53e89a59..f85d2004 100644 --- a/hindsight-control-plane/src/components/data-view.tsx +++ b/hindsight-control-plane/src/components/data-view.tsx @@ -307,12 +307,13 @@ export function DataView({ factType }: DataViewProps) { - {/* Memory Detail Panel for Graph View */} + {/* Memory Detail Panel for Graph View - Fixed on Right */} {selectedGraphNode && ( -
+
setSelectedGraphNode(null)} + inPanel />
)} @@ -872,13 +873,13 @@ function TimelineView({ data }: { data: any }) {
- {/* Detail Panel */} + {/* Detail Panel - Fixed on Right */} {selectedItem && ( -
+
setSelectedItem(null)} - compact + inPanel />
)} diff --git a/hindsight-control-plane/src/components/memory-detail-panel.tsx b/hindsight-control-plane/src/components/memory-detail-panel.tsx index 157a1082..2de73023 100644 --- a/hindsight-control-plane/src/components/memory-detail-panel.tsx +++ b/hindsight-control-plane/src/components/memory-detail-panel.tsx @@ -9,12 +9,14 @@ interface MemoryDetailPanelProps { memory: any; onClose: () => void; compact?: boolean; + inPanel?: boolean; } export function MemoryDetailPanel({ memory, onClose, compact = false, + inPanel = false, }: MemoryDetailPanelProps) { const [copiedId, setCopiedId] = useState(null); const [modalType, setModalType] = useState<'document' | 'chunk' | null>(null); @@ -47,10 +49,147 @@ export function MemoryDetailPanel({ if (!memory) return null; - const padding = compact ? 'p-3' : 'p-4'; - const titleSize = compact ? 'text-sm' : 'text-lg'; const labelSize = compact ? 'text-[10px]' : 'text-xs'; const textSize = compact ? 'text-xs' : 'text-sm'; + + // Panel mode: no outer border/bg, larger padding, prominent close button + if (inPanel) { + return ( + <> +
+ {/* Header with close button */} +
+
+

Memory Details

+

Full memory content and metadata

+
+ +
+ +
+ {/* Full Text */} +
+
Full Text
+
{memory.text}
+
+ + {/* Context */} + {memory.context && ( +
+
Context
+
{memory.context}
+
+ )} + + {/* Dates */} +
+
+
Occurred
+
+ {memory.occurred_start + ? new Date(memory.occurred_start).toLocaleString() + : 'N/A'} +
+
+
+
Mentioned
+
+ {memory.mentioned_at + ? new Date(memory.mentioned_at).toLocaleString() + : 'N/A'} +
+
+
+ + {/* Entities */} + {memory.entities && ( +
+
Entities
+
+ {(Array.isArray(memory.entities) ? memory.entities : String(memory.entities).split(', ')).map((entity: any, i: number) => { + const entityText = typeof entity === 'string' ? entity : (entity?.name || JSON.stringify(entity)); + return ( + + {entityText} + + ); + })} +
+
+ )} + + {/* ID */} +
+
Memory ID
+
+ {memory.id} + +
+
+ + {/* Document/Chunk buttons */} + {(memory.document_id || memory.chunk_id) && ( +
+ {memory.document_id && ( + + )} + {memory.chunk_id && ( + + )} +
+ )} +
+
+ + {/* Document/Chunk Modal */} + {modalType && modalId && ( + + )} + + ); + } + + // Original compact/default mode + const padding = compact ? 'p-3' : 'p-4'; + const titleSize = compact ? 'text-sm' : 'text-lg'; const gap = compact ? 'space-y-2' : 'space-y-4'; return ( diff --git a/hindsight-control-plane/src/components/search-debug-view.tsx b/hindsight-control-plane/src/components/search-debug-view.tsx index 92aa974f..337f7c51 100644 --- a/hindsight-control-plane/src/components/search-debug-view.tsx +++ b/hindsight-control-plane/src/components/search-debug-view.tsx @@ -508,8 +508,8 @@ export function SearchDebugView() { } return ( -
-
+
+
- {/* Memory Detail Panel */} + {/* Memory Detail Panel - Fixed on Right */} {selectedMemory && ( -
+
setSelectedMemory(null)} - compact + inPanel />
)}