# Biblos Semantic Search API Documentation Complete documentation for integrating the Biblos Semantic Search API into your applications. ## Base URL ``` https://dssjon-biblos-api.hf.space ``` The API is live and publicly accessible at the URL above. --- ## Endpoints ### 1. Health Check **GET /** Returns API status and basic information. **Response:** ```json { "status": "online", "model": "BAAI/bge-large-en-v1.5", "books_loaded": 66, "total_embeddings": 6407, "device": "cpu" } ``` **Example:** ```bash curl https://dssjon-biblos-api.hf.space/ ``` --- ### 2. Detailed Health Check **GET /health** Returns detailed health status and list of available books. **Response:** ```json { "model_loaded": true, "tokenizer_loaded": true, "embeddings_loaded": true, "books_available": ["gen", "exo", "lev", ...] } ``` **Example:** ```bash curl https://dssjon-biblos-api.hf.space/health ``` --- ### 3. Semantic Search **POST /search** Perform semantic search over the entire Bible (both Old and New Testament). #### Request Body | Field | Type | Required | Description | |-------|------|----------|-------------| | `query` | string | Yes | Search query text (1-500 chars) | | `limit` | integer | No | Number of results (1-100, default: 10) | #### Response ```json { "query": "string", "results": [ { "book": "string", "chapter": integer, "testament": "string", "content": "string", "similarity": float } ], "total_searched": integer, "execution_time_ms": float } ``` #### Example ```bash curl -X POST https://dssjon-biblos-api.hf.space/search \ -H "Content-Type: application/json" \ -d '{ "query": "faith without works is dead", "limit": 5 }' ``` --- ## Integration Examples ### JavaScript/TypeScript #### Basic Fetch ```javascript async function searchBible(query, limit = 10) { const response = await fetch('https://dssjon-biblos-api.hf.space/search', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ query, limit }) }) if (!response.ok) { throw new Error(`Search failed: ${response.status}`) } return await response.json() } // Usage const results = await searchBible('love one another', 5) console.log(results) ``` #### React Hook ```typescript import { useState, useCallback } from 'react' interface SearchResult { book: string chapter: number testament: string content: string similarity: number } export function useBibleSearch() { const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const search = useCallback(async ( query: string, limit: number = 10 ): Promise => { setLoading(true) setError(null) try { const response = await fetch('https://dssjon-biblos-api.hf.space/search', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query, limit }) }) if (!response.ok) { throw new Error(`Search failed: ${response.status}`) } const data = await response.json() return data.results } catch (err) { const error = err instanceof Error ? err : new Error('Unknown error') setError(error) throw error } finally { setLoading(false) } }, []) return { search, loading, error } } // Usage in component function SearchComponent() { const { search, loading, error } = useBibleSearch() const [results, setResults] = useState([]) const handleSearch = async (query: string) => { const results = await search(query, 10) setResults(results) } return ( // Your component JSX ) } ``` --- ### Python #### Basic Example ```python import requests def search_bible(query, limit=10): """ Search the Bible using semantic search Args: query: Search query text limit: Number of results to return Returns: List of search results """ url = 'https://dssjon-biblos-api.hf.space/search' payload = { 'query': query, 'limit': limit } response = requests.post(url, json=payload) response.raise_for_status() return response.json() # Usage results = search_bible( query='faith and works', limit=5 ) for result in results['results']: print(f"{result['book'].upper()} {result['chapter']}") print(f"Similarity: {result['similarity']:.3f}") print(f"Content: {result['content']}") print() ``` #### Async Example ```python import asyncio import aiohttp async def search_bible_async(query, limit=10): """Async version of Bible search""" url = 'https://dssjon-biblos-api.hf.space/search' payload = {'query': query, 'limit': limit} async with aiohttp.ClientSession() as session: async with session.post(url, json=payload) as response: response.raise_for_status() return await response.json() # Usage async def main(): results = await search_bible_async('love your neighbor', limit=5) print(results) asyncio.run(main()) ``` --- ### cURL ```bash curl -X POST https://dssjon-biblos-api.hf.space/search \ -H "Content-Type: application/json" \ -d '{ "query": "blessed are the peacemakers", "limit": 3 }' | jq '.results[] | "\(.book) \(.chapter) - \(.content)"' ``` --- ## Error Handling ### HTTP Status Codes | Code | Description | |------|-------------| | 200 | Success | | 400 | Bad Request (invalid parameters) | | 405 | Method Not Allowed | | 500 | Internal Server Error | | 503 | Service Unavailable (model not loaded) | ### Error Response Format ```json { "detail": "Error message describing what went wrong" } ``` ### Example Error Handling (JavaScript) ```javascript async function safeSearch(query) { try { const response = await fetch('https://dssjon-biblos-api.hf.space/search', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ query }) }) if (!response.ok) { const error = await response.json() throw new Error(error.detail || 'Search failed') } return await response.json() } catch (error) { console.error('Search error:', error.message) return null } } ``` --- ## Performance Considerations ### Response Times - **First request**: 2-3 seconds (model loading) - **Subsequent requests**: 50-100ms average - **Cold start**: None (model stays in memory) ### Best Practices 1. **Cache results** on the client side when possible 2. **Debounce** search queries to reduce API calls 3. **Implement pagination** for large result sets 4. **Use appropriate limits** - higher limits increase response time 5. **The API searches the entire Bible** (both Old and New Testament) for comprehensive results ### Rate Limiting Currently no rate limiting is enforced, but please use responsibly: - Avoid making more than 10 requests per second - Implement exponential backoff on errors - Cache results when appropriate --- ## Interactive Documentation Visit your Space URL at `/docs` for interactive Swagger UI documentation where you can: - Test all endpoints directly in the browser - See detailed schema information - Try different parameter combinations - View real-time responses **Live Interactive Docs:** [https://dssjon-biblos-api.hf.space/docs](https://dssjon-biblos-api.hf.space/docs) --- ## Support For issues, questions, or feature requests: 1. Check the interactive docs at `/docs` 2. Review this documentation 3. Open an issue on the GitHub repository 4. Contact the maintainer --- ## Version API Version: 1.0.0 Model: BAAI/bge-large-en-v1.5 Last Updated: 2025