Add additional personalization in Chat via Location, Username (#644)

* Add location metadata to chat history
* Add support for custom configuration of the user name
* Add region, country, city in the desktop app's URL for context in chat
* Update prompts to specify user location, rather than just location.
* Add location data to Obsidian chat query
* Use first word for first name, last word for last name when setting profile name
This commit is contained in:
sabaimran
2024-02-13 03:35:13 -08:00
committed by GitHub
parent a3eb17b7d4
commit 32ec54172e
18 changed files with 286 additions and 22 deletions

View File

@@ -31,6 +31,22 @@
});
}
let region = null;
let city = null;
let countryName = null;
fetch("https://ipapi.co/json")
.then(response => response.json())
.then(data => {
region = data.region;
city = data.city;
countryName = data.country_name;
})
.catch(err => {
console.log(err);
return;
});
function formatDate(date) {
// Format date in HH:MM, DD MMM YYYY format
let time_string = date.toLocaleTimeString('en-IN', { hour: '2-digit', minute: '2-digit', hour12: false });
@@ -337,7 +353,7 @@
// Generate backend API URL to execute query
let url = `${hostURL}/api/chat?q=${encodeURIComponent(query)}&n=${resultsCount}&client=web&stream=true&conversation_id=${conversationID}`;
let url = `${hostURL}/api/chat?q=${encodeURIComponent(query)}&n=${resultsCount}&client=web&stream=true&conversation_id=${conversationID}&region=${region}&city=${city}&country=${countryName}`;
const khojToken = await window.tokenAPI.getToken();
const headers = { 'Authorization': `Bearer ${khojToken}` };

View File

@@ -10,6 +10,9 @@ export interface ChatJsonResult {
export class KhojChatModal extends Modal {
result: string;
setting: KhojSetting;
region: string;
city: string;
countryName: string;
constructor(app: App, setting: KhojSetting) {
super(app);
@@ -17,6 +20,19 @@ export class KhojChatModal extends Modal {
// Register Modal Keybindings to send user message
this.scope.register([], 'Enter', async () => { await this.chat() });
fetch("https://ipapi.co/json")
.then(response => response.json())
.then(data => {
this.region = data.region;
this.city = data.city;
this.countryName = data.country_name;
})
.catch(err => {
console.log(err);
return;
});
}
async chat() {
@@ -354,7 +370,7 @@ export class KhojChatModal extends Modal {
// Get chat response from Khoj backend
let encodedQuery = encodeURIComponent(query);
let chatUrl = `${this.setting.khojUrl}/api/chat?q=${encodedQuery}&n=${this.setting.resultsCount}&client=obsidian&stream=true`;
let chatUrl = `${this.setting.khojUrl}/api/chat?q=${encodedQuery}&n=${this.setting.resultsCount}&client=obsidian&stream=true&region=${this.region}&city=${this.city}&country=${this.countryName}`;
let responseElement = this.createKhojResponseDiv();
// Temporary status message to indicate that Khoj is thinking