Metadata-Version: 2.4
Name: parlona
Version: 1.0.5
Summary: Call analytics pipeline for speech-to-text, summarization, and insights extraction
Author-email: Parlona Team <contact@parlona.com>
License-Expression: Apache-2.0
Project-URL: Homepage, https://gitlab.com/parlona/parlona
Project-URL: Documentation, https://gitlab.com/parlona/parlona
Project-URL: Repository, https://gitlab.com/parlona/parlona
Project-URL: Issues, https://gitlab.com/parlona/parlona/issues
Keywords: speech-to-text,call-analytics,whisper,llm,summarization
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: faster-whisper>=1.0.3
Requires-Dist: openai>=1.54.4
Requires-Dist: pydantic>=2.6.4
Requires-Dist: pydantic-settings>=2.2.1
Requires-Dist: numpy>=1.26.4
Requires-Dist: soundfile>=0.12.1
Requires-Dist: langdetect>=1.0.9
Requires-Dist: resampy>=0.4.2
Provides-Extra: server
Requires-Dist: redis>=5.0.1; extra == "server"
Requires-Dist: fastapi>=0.110.1; extra == "server"
Requires-Dist: uvicorn>=0.29.0; extra == "server"
Requires-Dist: sqlalchemy>=2.0.29; extra == "server"
Requires-Dist: asyncpg>=0.29.0; extra == "server"
Requires-Dist: psycopg>=3.1.18; extra == "server"
Requires-Dist: alembic>=1.13.1; extra == "server"
Requires-Dist: python-multipart>=0.0.9; extra == "server"
Provides-Extra: gpu
Requires-Dist: nvidia-ml-py>=12.0.0; extra == "gpu"
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: black>=23.0.0; extra == "dev"
Requires-Dist: mypy>=1.0.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Dynamic: license-file

# Parlona

Call analytics pipeline for speech-to-text, summarization, and insights extraction.

## Installation

```bash
pip install parlona
```

Set your LLM API key (for OpenAI):

```bash
export OPENAI_API_KEY="your-api-key"
```

## Quick Start

```python
import parlona

# Process an audio file
result = parlona.process("call.wav")

# Access results
print(result.transcript)
print(result.summary)
print(result.headline)
print(f"Sentiment: {result.sentiment.label} ({result.sentiment.score})")
print(f"Entities: {result.entities}")
```

## Features

- **Speech-to-Text**: Powered by faster-whisper with stereo channel diarization
- **Call Summarization**: LLM-powered summaries via OpenAI, Groq, vLLM, or Ollama
- **Sentiment Analysis**: Automatic sentiment detection and scoring
- **Entity Extraction**: Named entity recognition with speaker attribution
- **Multi-language Support**: Automatic language detection

## Advanced Usage

```python
from parlona import CallProcessor, STTConfig, LLMConfig

# Custom configuration
stt_config = STTConfig(
    model_name="Systran/faster-whisper-medium",
    device="cuda",
    diarization_mode="stereo_channels",
    speaker_mapping={0: "agent", 1: "customer"}
)

llm_config = LLMConfig(
    backend="openai",
    api_key="your-api-key",
    model="gpt-4o-mini"
)

# Create processor and process
processor = CallProcessor(stt_config=stt_config, llm_config=llm_config)
result = processor.process("call.wav")
```

## Modular Usage

Use STT and LLM components separately:

```python
from parlona.stt import STTEngine, STTConfig
from parlona.llm import LLMClient, LLMConfig

# STT only
stt_engine = STTEngine(STTConfig())
transcription = stt_engine.transcribe("audio.wav")

# LLM only
llm_client = LLMClient(LLMConfig(backend="openai"))
summary, headline, lang, sentiment, entities, score = \
    llm_client.summarize_with_headline(transcript)
```

## Requirements

- Python 3.9+
- OpenAI API key (or other LLM backend)

## License

Apache-2.0
