All projects
Signal Sense
Communication analysis with AI models that run locally.
- Problem
- Analyzing messages, emails and network logs with AI usually means sending sensitive data to external services.
- Approach
- A Python pipeline normalizes communications from CSV and JSON, maps who talks to whom in a graph, indexes the content as embeddings for semantic search and generates analyses with an LLM. The models run locally, through Ollama.
- Status
- Prototype. Proof of concept: it explores an architecture and is not prepared for production.
How it works
- Ingestion. Dedicated parsers read communications, emails and network logs in CSV or JSON, normalize timestamps and validate each record before the analysis.
- Communication graph. NetworkX builds a directed graph of senders and recipients. Centrality metrics point to the most influential nodes, and modularity-based community detection reveals groups.
- Semantic search. Each message becomes an embedding (
nomic-embed-text) indexed in FAISS. Similarity search, clustering (K-Means or DBSCAN) and anomaly detection run on that index: messages that are semantically isolated from their neighbors. - Analysis with a local LLM. Qwen2.5 7B, served by Ollama over HTTP, produces behavioral, temporal and risk analyses from summaries of the data.
- Interfaces. A FastAPI REST API exposes upload, analyses, search and model status. A Streamlit dashboard and command-line tools cover interactive use, and Docker Compose defines the Ollama, API and dashboard services.
Technical decisions
- Local AI by default. The client points to Ollama at
localhost:11434: the LLM analyses and the embeddings do not depend on third-party AI APIs. - Centralized configuration. The Ollama address, the models and the timeout live in a single configuration object (
OllamaConfig), with local defaults. - Separate responsibilities. Parsers, graph, vector analysis, AI, API and interface live in independent modules.
Current state
A study prototype. The repository includes sample data only.