3v324v23's picture
Add Bextts TTS integration
b3f024a
|
Raw
History Blame Contribute Delete
10.5 kB
# Quick Start Guide
Get started with Esperanto in 5 minutes! This guide walks you through installation, setup, and your first AI interactions.
## Installation
Install Esperanto via pip:
```bash
pip install esperanto
```
### Optional Dependencies
**For local Transformers models:**
```bash
pip install "esperanto[transformers]"
```
**For LangChain integration:**
```bash
pip install "langchain>=0.3.8" "langchain-core>=0.3.29"
# Plus provider-specific packages as needed
```
## Your First LLM Call
### 1. Get an API Key
For this quickstart, we'll use OpenAI. Get your API key from [platform.openai.com/api-keys](https://platform.openai.com/api-keys).
Other providers work similarly - see [Provider Comparison](./providers/README.md) to choose.
### 2. Set Environment Variable
```bash
export OPENAI_API_KEY="your-api-key-here"
```
Or create a `.env` file:
```bash
# .env
OPENAI_API_KEY=your-api-key-here
```
### 3. Generate Text
```python
from esperanto.factory import AIFactory
# Create a language model
model = AIFactory.create_language("openai", "gpt-4")
# Have a conversation
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is Esperanto?"}
]
response = model.chat_complete(messages)
print(response.content)
```
**Output:**
```
Esperanto is an international auxiliary language created in the late 19th century by L. L. Zamenhof...
```
🎉 **Congratulations!** You just made your first AI call with Esperanto.
## More Examples
### Text Embeddings
Convert text to vectors for semantic search:
```python
from esperanto.factory import AIFactory
# Create an embedding model
embedder = AIFactory.create_embedding("openai", "text-embedding-3-small")
# Generate embeddings
texts = [
"Esperanto is a universal AI interface",
"Python is a programming language"
]
response = embedder.embed(texts)
vectors = [item.embedding for item in response.data]
print(f"Generated {len(vectors)} vectors")
print(f"Vector dimension: {len(vectors[0])}")
```
### Speech-to-Text
Transcribe audio files:
```python
from esperanto.factory import AIFactory
# Create a transcriber
transcriber = AIFactory.create_speech_to_text("openai", "whisper-1")
# Transcribe audio
transcript = transcriber.transcribe("meeting_recording.mp3")
print(transcript)
```
### Text-to-Speech
Generate natural-sounding audio:
```python
from esperanto.factory import AIFactory
# Create a TTS model
speaker = AIFactory.create_text_to_speech("openai", "tts-1")
# Generate speech
audio_bytes = speaker.generate_speech(
text="Hello! This is Esperanto text to speech.",
voice="nova"
)
# Save to file
with open("output.mp3", "wb") as f:
f.write(audio_bytes)
```
### Reranking
Improve search relevance:
```python
from esperanto.factory import AIFactory
# Create a reranker
reranker = AIFactory.create_reranker("jina", "jina-reranker-v2-base-multilingual")
# Rerank documents
query = "What is machine learning?"
documents = [
"Machine learning is a subset of artificial intelligence",
"The weather is nice today",
"Python is used in ML development"
]
response = reranker.rerank(query, documents, top_k=2)
for result in response.results:
print(f"Score: {result.relevance_score:.4f} - {result.document}")
```
## Switching Providers
The beauty of Esperanto is that switching providers is as simple as changing two parameters:
```python
# OpenAI
model = AIFactory.create_language("openai", "gpt-4")
# Switch to Anthropic
model = AIFactory.create_language("anthropic", "claude-3-5-sonnet-20241022")
# Switch to Google
model = AIFactory.create_language("google", "gemini-pro")
# Switch to local Ollama
model = AIFactory.create_language("ollama", "llama3.2")
# Everything else stays the same!
messages = [{"role": "user", "content": "Hello!"}]
response = model.chat_complete(messages)
```
No code changes needed - just provider name and model!
## Common Configurations
### Streaming Responses
Get responses token by token:
```python
model = AIFactory.create_language(
"openai", "gpt-4",
config={"streaming": True}
)
messages = [{"role": "user", "content": "Write a haiku about coding"}]
for chunk in model.chat_complete(messages):
print(chunk.choices[0].delta.content, end="", flush=True)
```
### JSON Output
Request structured JSON responses:
```python
model = AIFactory.create_language(
"openai", "gpt-4",
config={"structured": {"type": "json"}}
)
messages = [{
"role": "user",
"content": "List three programming languages in JSON format"
}]
response = model.chat_complete(messages)
print(response.content) # Valid JSON string
```
### Temperature Control
Adjust creativity (0.0 = deterministic, 2.0 = very creative):
```python
model = AIFactory.create_language(
"openai", "gpt-4",
config={"temperature": 0.3} # More focused
)
# Or per-request
response = model.chat_complete(messages, temperature=0.9) # More creative
```
### Async Operations
For better performance with multiple requests:
```python
import asyncio
from esperanto.factory import AIFactory
async def main():
model = AIFactory.create_language("openai", "gpt-4")
messages = [{"role": "user", "content": "Hello!"}]
# Async call
response = await model.achat_complete(messages)
print(response.content)
asyncio.run(main())
```
## Multi-Capability Example
Use multiple AI capabilities together:
```python
from esperanto.factory import AIFactory
# Create models for different capabilities
llm = AIFactory.create_language("openai", "gpt-4")
embedder = AIFactory.create_embedding("openai", "text-embedding-3-small")
speaker = AIFactory.create_text_to_speech("openai", "tts-1")
# 1. Generate text with LLM
messages = [{"role": "user", "content": "Explain quantum computing in one sentence"}]
explanation = llm.chat_complete(messages).content
# 2. Create embeddings for search
texts = [explanation, "Quantum computers use qubits"]
embeddings = embedder.embed(texts)
# 3. Convert to speech
audio = speaker.generate_speech(explanation, voice="nova")
with open("explanation.mp3", "wb") as f:
f.write(audio)
print(f"Generated explanation: {explanation}")
print(f"Created {len(embeddings.data)} embeddings")
print("Saved audio to explanation.mp3")
```
## Local Models (No API Costs!)
Use local models for privacy and zero API costs:
```python
from esperanto.factory import AIFactory
# Local LLM with Ollama (requires ollama installed)
llm = AIFactory.create_language("ollama", "llama3.2")
# Local embeddings with Transformers
embedder = AIFactory.create_embedding(
"transformers",
"BAAI/bge-base-en-v1.5"
)
# Local reranking
reranker = AIFactory.create_reranker(
"transformers",
"BAAI/bge-reranker-base"
)
# Use exactly like cloud models!
response = llm.chat_complete([{"role": "user", "content": "Hello!"}])
```
## RAG (Retrieval-Augmented Generation) Pipeline
Complete RAG in 20 lines:
```python
from esperanto.factory import AIFactory
# Setup models
embedder = AIFactory.create_embedding("openai", "text-embedding-3-small")
reranker = AIFactory.create_reranker("jina", "jina-reranker-v2-base-multilingual")
llm = AIFactory.create_language("anthropic", "claude-3-5-sonnet-20241022")
# Your knowledge base
documents = [
"Esperanto is a universal AI interface for Python",
"It supports 17 different AI providers",
"You can switch providers without changing code"
]
# User query
query = "What is Esperanto?"
# Step 1: Embed and retrieve (simplified - normally you'd use vector DB)
doc_embeddings = embedder.embed(documents)
query_embedding = embedder.embed([query])
# ... compute similarity and get top candidates ...
# Step 2: Rerank for accuracy
reranked = reranker.rerank(query, documents, top_k=2)
context = "\n".join([r.document for r in reranked.results])
# Step 3: Generate answer with LLM
messages = [{
"role": "user",
"content": f"Context:\n{context}\n\nQuestion: {query}"
}]
answer = llm.chat_complete(messages)
print(answer.content)
```
## Error Handling
Always handle potential errors:
```python
from esperanto.factory import AIFactory
try:
model = AIFactory.create_language("openai", "gpt-4")
messages = [{"role": "user", "content": "Hello!"}]
response = model.chat_complete(messages)
print(response.content)
except ValueError as e:
print(f"Configuration error: {e}")
except Exception as e:
print(f"API error: {e}")
```
## Environment Setup Best Practices
Create a `.env` file for your API keys:
```bash
# .env
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_API_KEY=...
GROQ_API_KEY=...
# Optional timeout overrides
ESPERANTO_LLM_TIMEOUT=90
ESPERANTO_EMBEDDING_TIMEOUT=120
```
Then load in your Python code:
```python
from dotenv import load_dotenv
load_dotenv()
# API keys are now available to Esperanto
```
## Next Steps
Now that you've got the basics, explore more:
### Learn Capabilities
- **[Language Models Guide](./capabilities/llm.md)** - Complete LLM documentation
- **[Embeddings Guide](./capabilities/embedding.md)** - Semantic search and vectors
- **[Reranking Guide](./capabilities/reranking.md)** - Improve search relevance
- **[Speech-to-Text Guide](./capabilities/speech-to-text.md)** - Audio transcription
- **[Text-to-Speech Guide](./capabilities/text-to-speech.md)** - Voice generation
### Choose Providers
- **[Provider Comparison](./providers/README.md)** - Compare all 17 providers
- **[Provider Setup Guides](./providers/)** - Detailed setup for each provider
### Advanced Features
- **[Task-Aware Embeddings](./advanced/task-aware-embeddings.md)** - Optimize for specific tasks
- **[LangChain Integration](./advanced/langchain-integration.md)** - Use with LangChain
- **[Timeout Configuration](./advanced/timeout-configuration.md)** - Control request timeouts
- **[Model Discovery](./advanced/model-discovery.md)** - Discover available models
- **[Transformers Features](./advanced/transformers-features.md)** - Advanced local model features
### Configuration
- **[Configuration Guide](./configuration.md)** - Complete configuration reference
## Get Help
- **[Documentation Index](./README.md)** - All documentation
- **[GitHub Issues](https://github.com/lfnovo/esperanto/issues)** - Report bugs or ask questions
- **[Changelog](../CHANGELOG.md)** - Version history
---
**Questions?** Check the [Documentation Index](./README.md) or [Provider Comparison](./providers/README.md).