Web Interfaces¶
Naamkaran provides two web interfaces for interactive name generation: a Gradio web app and a Flask API.
Gradio Web App¶
The Gradio app provides an easy-to-use web interface for generating names.
Installation¶
To use the Gradio app, install naamkaran with web dependencies:
pip install "naamkaran[web]"
Running the App¶
Start the Gradio interface:
python gradio_app.py
This will launch a web interface accessible at http://localhost:7860 where you can:
Select starting and ending letters
Choose gender
Set temperature and maximum length
Generate and view names interactively
Online Demo¶
You can try the Gradio app online at: Naamkaran on Hugging Face
Flask API¶
The Flask API provides a REST interface for programmatic access.
Running the API¶
Start the Flask server:
python flask/flask_api.py
The API will be available at http://localhost:5000.
API Endpoints¶
Generate Names¶
Endpoint: POST /generate
Request Body:
{
"starting_letter": "A",
"ending_letter": "a",
"gender": "F",
"num_names": 5,
"max_len": 8,
"temperature": 0.7
}
Response:
{
"names": ["Anna", "Aria", "Aisha", "Alma", "Alba"],
"parameters": {
"starting_letter": "A",
"ending_letter": "a",
"gender": "F",
"num_names": 5,
"max_len": 8,
"temperature": 0.7
}
}
Health Check¶
Endpoint: GET /health
Response:
{
"status": "healthy",
"version": "0.1.0"
}
Usage Examples¶
Using curl:
# Generate names via API
curl -X POST http://localhost:5000/generate \\
-H "Content-Type: application/json" \\
-d '{"starting_letter": "M", "gender": "M", "num_names": 3}'
# Health check
curl http://localhost:5000/health
Using Python requests:
import requests
# Generate names
response = requests.post('http://localhost:5000/generate', json={
'starting_letter': 'S',
'gender': 'F',
'num_names': 5,
'temperature': 0.8
})
data = response.json()
print("Generated names:", data['names'])
Using JavaScript:
// Generate names via fetch API
fetch('http://localhost:5000/generate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
starting_letter: 'R',
gender: 'M',
num_names: 4,
temperature: 0.6
})
})
.then(response => response.json())
.then(data => {
console.log('Generated names:', data.names);
});
Docker Deployment¶
You can also run naamkaran using Docker:
# Build the Docker image
docker build -t naamkaran .
# Run the container
docker run -p 5000:5000 naamkaran
This will start the Flask API in a Docker container accessible at http://localhost:5000.
Integration Examples¶
Web Application Integration¶
Here’s an example of integrating the Flask API into a web application:
<!DOCTYPE html>
<html>
<head>
<title>Name Generator</title>
</head>
<body>
<h1>Generate Names</h1>
<form id="nameForm">
<label for="starting_letter">Starting Letter:</label>
<input type="text" id="starting_letter" maxlength="1">
<label for="gender">Gender:</label>
<select id="gender">
<option value="">Any</option>
<option value="M">Male</option>
<option value="F">Female</option>
</select>
<label for="num_names">Number of Names:</label>
<input type="number" id="num_names" value="5" min="1" max="50">
<button type="submit">Generate Names</button>
</form>
<div id="results"></div>
<script>
document.getElementById('nameForm').addEventListener('submit', async (e) => {
e.preventDefault();
const formData = {
starting_letter: document.getElementById('starting_letter').value || null,
gender: document.getElementById('gender').value || null,
num_names: parseInt(document.getElementById('num_names').value)
};
try {
const response = await fetch('/generate', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(formData)
});
const data = await response.json();
document.getElementById('results').innerHTML =
'<h3>Generated Names:</h3><ul>' +
data.names.map(name => `<li>${name}</li>`).join('') +
'</ul>';
} catch (error) {
console.error('Error:', error);
}
});
</script>
</body>
</html>
Mobile App Integration¶
For mobile applications, you can integrate the API using standard HTTP libraries:
// iOS Swift example
import Foundation
struct NameRequest: Codable {
let starting_letter: String?
let gender: String?
let num_names: Int
let temperature: Double
}
struct NameResponse: Codable {
let names: [String]
}
func generateNames(request: NameRequest, completion: @escaping ([String]?) -> Void) {
guard let url = URL(string: "http://localhost:5000/generate") else { return }
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
do {
urlRequest.httpBody = try JSONEncoder().encode(request)
} catch {
completion(nil)
return
}
URLSession.shared.dataTask(with: urlRequest) { data, response, error in
guard let data = data, error == nil else {
completion(nil)
return
}
do {
let nameResponse = try JSONDecoder().decode(NameResponse.self, from: data)
completion(nameResponse.names)
} catch {
completion(nil)
}
}.resume()
}