All projects

Prototype 2025

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.
Fig. 1 Illustration of the kind of analysis the project performs, with communities, the most central node and an isolated message. Not real data.

How it works

  1. Ingestion. Dedicated parsers read communications, emails and network logs in CSV or JSON, normalize timestamps and validate each record before the analysis.
  2. 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.
  3. 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.
  4. Analysis with a local LLM. Qwen2.5 7B, served by Ollama over HTTP, produces behavioral, temporal and risk analyses from summaries of the data.
  5. 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.