Gunroar's picture
push response
3b6518f
## translation layer for Farmlingua (Milestone2)
import nest_asyncio
import uvicorn
from fastapi import FastAPI
from pydantic import BaseModel
import requests
import os
from models.model import translator
nest_asyncio.apply()
lang_codes = {
"en": "eng_Latn",
"ig": "ibo_Latn",
"ha": "hau_Latn",
"yo": "yor_Latn",
"sw": "swh_Latn"
}
# language identifier
app = FastAPI(
title="Farmlingua Translation API",
description="Multilingual ability for farmlingua supporting Igbo, Hausa, Yoruba, and Swahili",
version="0.0.1"
)
class Query(BaseModel):
text: str
lang: str
def translate(text: str, src: str, tgt: str) -> str:
try:
out = translator(text, src_lang=lang_codes[src], tgt_lang=lang_codes[tgt], max_length=400)
return out[0]["translation_text"]
except Exception as e:
return f"Translation error: {str(e)}"
def query_milestone1(prompt: str) -> str:
try:
response = requests.post(
"https://remostart-milestone-one-farmlingua-ai.hf.space/ask",
json={"query": prompt},
timeout=200
)
if response.status_code == 200:
data = response.json()
return data.get("answer") or str(data)
else:
return f"Base model error ({response.status_code}): {response.text}"
except Exception as e:
return f"Failed to connect to Milestone 1: {str(e)}"
# Root endpoint
@app.get("/")
def root():
return {
"message": "Welcome to Farmlingua Translation API",
"version": "3.0",
"features": {
"simple_language_identifier": "Specify language with 'lang' parameter",
"single_endpoint": "/ask - Send text with language identifier",
"supported_codes": "en, ig, ha, yo, sw"
},
"supported_languages": {
"en": "English",
"ig": "Igbo",
"ha": "Hausa",
"yo": "Yoruba",
"sw": "Swahili"
},
"documentation": "/docs"
}
@app.get("/health")
def health_check():
"""Health check endpoint"""
return {"status": "healthy", "model_loaded": translator is not None}
@app.post("/ask")
def multilingual_ask(query: Query):
"""Multilingual endpoint with simple language identifier"""
user_text = query.text
user_lang = query.lang.lower()
# Validate language code
if user_lang not in lang_codes:
return {"error": "Unsupported language. Use one of: en, ig, ha, yo, sw."}
# language name for response
lang_names = {
"en": "English",
"ig": "Igbo",
"ha": "Hausa",
"yo": "Yoruba",
"sw": "Swahili"
}
# Translate to English if not English
if user_lang != "en":
english_text = translate(user_text, user_lang, "en")
else:
english_text = user_text
# Get response from Milestone 1
english_response = query_milestone1(english_text)
# Translate response back to original language
if user_lang != "en":
final_response = translate(english_response, "en", user_lang)
else:
final_response = english_response
return {
#"language": lang_names[user_lang],
#"language_code": user_lang,
#"original_text": user_text,
#"english_translation": english_text,
"response": final_response
}
# Run FastAPI server
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=7860)