This tutorial shows how to implement a simple chat interface using the Addis AI API. We'll cover implementations in multiple languages and platforms.
const API_KEY = "YOUR_API_KEY";
const chatMessages = document.getElementById("chat-messages");
const userInput = document.getElementById("user-input");
const sendButton = document.getElementById("send-button");
const languageSelect = document.getElementById("language");
let conversationHistory = [];
sendButton.addEventListener("click", sendMessage);
userInput.addEventListener("keypress", (e) => {
if (e.key === "Enter") sendMessage();
});
async function sendMessage() {
const message = userInput.value.trim();
if (!message) return;
addMessage(message, "user");
userInput.value = "";
const loadingDiv = document.createElement("div");
loadingDiv.className = "loading";
loadingDiv.textContent = "Addis AI is thinking...";
chatMessages.appendChild(loadingDiv);
try {
const language = languageSelect.value;
const response = await callAddisAI(message, language);
chatMessages.removeChild(loadingDiv);
addMessage(response.data.response_text, "assistant");
conversationHistory.push(
{ role: "user", content: message },
{ role: "assistant", content: response.response_text },
);
chatMessages.scrollTop = chatMessages.scrollHeight;
} catch (error) {
chatMessages.removeChild(loadingDiv);
addMessage("Sorry, there was an error: " + error.message, "assistant");
}
}
function addMessage(text, sender) {
const messageDiv = document.createElement("div");
messageDiv.className = `message ${sender}-message`;
messageDiv.textContent = text;
chatMessages.appendChild(messageDiv);
chatMessages.scrollTop = chatMessages.scrollHeight;
}
async function callAddisAI(prompt, targetLanguage) {
const url = "https://api.addisassistant.com/api/v1/chat_generate";
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": API_KEY,
},
body: JSON.stringify({
prompt: prompt,
target_language: targetLanguage,
conversation_history: conversationHistory,
generation_config: {
temperature: 0.7,
},
}),
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(errorData.error?.message || "Unknown error");
}
return await response.json();
}
import requests
import json
API_KEY = "YOUR_API_KEY"
URL = "https://api.addisassistant.com/api/v1/chat_generate"
headers = {
"Content-Type": "application/json",
"X-API-Key": API_KEY,
}
def call_addis_ai(prompt, target_language, conversation_history=None):
"""
Call the Addis AI API.
Args:
prompt (str): User message
target_language (str): Target language code (am/om)
conversation_history (list): Previous conversation messages
Returns:
dict: API response
"""
data = {
"prompt": prompt,
"target_language": target_language,
"generation_config": {
"temperature": 0.7
}
}
if conversation_history:
data["conversation_history"] = conversation_history
try:
response = requests.post(URL, headers=headers, json=data)
if response.status_code != 200:
error_data = response.json()
error_message = error_data.get("error", {}).get("message", "Unknown error")
print(f"Error: {error_message}")
return None
return response.json()
except Exception as e:
print(f"Request failed: {str(e)}")
return None
def main():
print("Addis AI Chat Demo")
print("Type 'quit' to exit")
print("\nSelect language:")
print("1. Amharic (am)")
print("2. Afan Oromo (om)")
language_choice = input("Enter your choice (1/2): ")
target_language = "am" if language_choice == "1" else "om"
conversation_history = []
while True:
user_message = input("\nYou: ")
if user_message.lower() in ["quit", "exit", "q"]:
print("Goodbye!")
break
print("Addis AI is thinking...")
response = call_addis_ai(user_message, target_language, conversation_history)
if response:
ai_message = response["response_text"]
print(f"\nAddis AI: {ai_message}")
conversation_history.append({"role": "user", "content": user_message})
conversation_history.append({"role": "assistant", "content": ai_message})
if __name__ == "__main__":
main()
import React, { useState, useRef } from "react";
import {
SafeAreaView,
StyleSheet,
View,
Text,
TextInput,
TouchableOpacity,
FlatList,
ActivityIndicator,
KeyboardAvoidingView,
Platform,
} from "react-native";
import { Picker } from "@react-native-picker/picker";
const API_KEY = "YOUR_API_KEY";
const App = () => {
const [messages, setMessages] = useState([]);
const [inputText, setInputText] = useState("");
const [language, setLanguage] = useState("am");
const [loading, setLoading] = useState(false);
const [conversationHistory, setConversationHistory] = useState([]);
const flatListRef = useRef();
const sendMessage = async () => {
if (!inputText.trim()) return;
const userMessage = {
id: Date.now().toString(),
text: inputText,
sender: "user",
};
setMessages((prevMessages) => [...prevMessages, userMessage]);
setInputText("");
setLoading(true);
try {
const response = await fetch(
"https://api.addisassistant.com/api/v1/chat_generate",
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-Key": API_KEY,
},
body: JSON.stringify({
prompt: userMessage.text,
target_language: language,
conversation_history: conversationHistory,
generation_config: {
temperature: 0.7,
},
}),
},
);
const data = await response.json();
if (response.ok) {
const aiMessage = {
id: (Date.now() + 1).toString(),
text: data.response_text,
sender: "assistant",
};
setMessages((prevMessages) => [...prevMessages, aiMessage]);
const updatedHistory = [
...conversationHistory,
{ role: "user", content: userMessage.text },
{ role: "assistant", content: data.response_text },
];
setConversationHistory(updatedHistory);
} else {
const errorMessage = {
id: (Date.now() + 1).toString(),
text: `Error: ${data.error?.message || "Something went wrong"}`,
sender: "assistant",
};
setMessages((prevMessages) => [...prevMessages, errorMessage]);
}
} catch (error) {
const errorMessage = {
id: (Date.now() + 1).toString(),
text: `Error: ${error.message}`,
sender: "assistant",
};
setMessages((prevMessages) => [...prevMessages, errorMessage]);
} finally {
setLoading(false);
}
};
const renderMessageItem = ({ item }) => (
<View
style={[
styles.messageBubble,
item.sender === "user" ? styles.userBubble : styles.aiBubble,
]}
>
<Text style={styles.messageText}>{item.text}</Text>
</View>
);
return (
<SafeAreaView style={styles.container}>
<View style={styles.header}>
<Text style={styles.headerText}>Addis AI Chat</Text>
</View>
<View style={styles.languageSelector}>
<Text>Response Language:</Text>
<Picker
selectedValue={language}
style={styles.picker}
onValueChange={(itemValue) => setLanguage(itemValue)}
>
<Picker.Item label="Amharic" value="am" />
<Picker.Item label="Afan Oromo" value="om" />
</Picker>
</View>
<FlatList
ref={flatListRef}
data={messages}
renderItem={renderMessageItem}
keyExtractor={(item) => item.id}
style={styles.messageList}
contentContainerStyle={styles.messageListContent}
onContentSizeChange={() =>
flatListRef.current?.scrollToEnd({ animated: true })
}
/>
{loading && (
<View style={styles.loadingContainer}>
<ActivityIndicator size="small" color="#2196F3" />
<Text style={styles.loadingText}>Addis AI is thinking...</Text>
</View>
)}
<KeyboardAvoidingView
behavior={Platform.OS === "ios" ? "padding" : "height"}
style={styles.inputContainer}
>
<TextInput
style={styles.input}
value={inputText}
onChangeText={setInputText}
placeholder="Type your message here..."
onSubmitEditing={sendMessage}
returnKeyType="send"
/>
<TouchableOpacity style={styles.sendButton} onPress={sendMessage}>
<Text style={styles.sendButtonText}>Send</Text>
</TouchableOpacity>
</KeyboardAvoidingView>
</SafeAreaView>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
},
header: {
padding: 16,
borderBottomWidth: 1,
borderBottomColor: "#eee",
backgroundColor: "#2196F3",
},
headerText: {
fontSize: 18,
fontWeight: "bold",
color: "white",
},
languageSelector: {
flexDirection: "row",
alignItems: "center",
padding: 12,
borderBottomWidth: 1,
borderBottomColor: "#eee",
},
picker: {
flex: 1,
height: 50,
},
messageList: {
flex: 1,
},
messageListContent: {
padding: 16,
},
messageBubble: {
maxWidth: "80%",
padding: 12,
borderRadius: 16,
marginBottom: 12,
},
userBubble: {
backgroundColor: "#e1f5fe",
alignSelf: "flex-end",
},
aiBubble: {
backgroundColor: "#f1f1f1",
alignSelf: "flex-start",
},
messageText: {
fontSize: 16,
},
inputContainer: {
flexDirection: "row",
padding: 12,
borderTopWidth: 1,
borderTopColor: "#eee",
},
input: {
flex: 1,
borderWidth: 1,
borderColor: "#ddd",
borderRadius: 24,
paddingHorizontal: 16,
paddingVertical: 8,
backgroundColor: "#f9f9f9",
},
sendButton: {
marginLeft: 12,
padding: 12,
backgroundColor: "#2196F3",
borderRadius: 24,
justifyContent: "center",
},
sendButtonText: {
color: "white",
fontWeight: "bold",
},
loadingContainer: {
position: "absolute",
bottom: 80,
left: 0,
right: 0,
alignItems: "center",
padding: 8,
},
loadingText: {
marginTop: 4,
color: "#666",
},
});
export default App;
tutorial to learn how to enhance your chat application with speech capabilities.
guide.