# 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).