Introduce units to llm

This commit is contained in:
2025-04-25 19:11:40 +03:00
parent ceb587d2f8
commit a31ce6c545
2 changed files with 32 additions and 7 deletions

View File

@@ -10,12 +10,15 @@ const stravaLink = computed(() => {
interface FormData { interface FormData {
enabled: boolean; enabled: boolean;
language: string; language: string;
tone: string;
units: string;
} }
const preferences = useState<FormData>("preferences", () => ({ const preferences = useState<FormData>("preferences", () => ({
enabled: false, enabled: false,
language: "English", language: "English",
tone: "Casual", tone: "Casual",
units: "Metric",
})); }));
const { status } = useFetch("/api/preferences", { const { status } = useFetch("/api/preferences", {
@@ -103,6 +106,20 @@ const saveOp = watchPausable(
/> />
</template> </template>
</CardField> </CardField>
<CardField>
<template #title> Unit system </template>
<template #description>
Unit system preference, used in descriptions.
</template>
<template #value>
<USelect
class="min-w-28"
v-model="preferences.units"
:items="units"
/>
</template>
</CardField>
</div> </div>
</UCard> </UCard>
</UContainer> </UContainer>

View File

@@ -20,6 +20,8 @@ export default defineEventHandler(async (event) => {
const [, activity] = await strava!<any>(`/activities/${body.object_id}`); const [, activity] = await strava!<any>(`/activities/${body.object_id}`);
console.log(user?.preferences.data);
const [aiError, aiResponse] = await openai("/responses", { const [aiError, aiResponse] = await openai("/responses", {
body: { body: {
model: "gpt-4o-mini", model: "gpt-4o-mini",
@@ -27,7 +29,7 @@ export default defineEventHandler(async (event) => {
{ {
role: "user", role: "user",
content: ` content: `
Generate a title and a short description for my strava activity. Use my preferred language. Generate a title and a short description for my strava activity. Use my preferred language and unit system.
Use ${user?.preferences.data.tone} tone to generate content. Use ${user?.preferences.data.tone} tone to generate content.
Add emojis unless tone is set to minimalist. Add emojis unless tone is set to minimalist.
@@ -35,9 +37,13 @@ export default defineEventHandler(async (event) => {
Sex: ${user?.sex} Sex: ${user?.sex}
Weight: ${user?.weight} Weight: ${user?.weight}
Language: ${user?.preferences.data.language} Language: ${user?.preferences.data.language}
Unit system: ${user?.preferences.data.units}
Activity notes: Activity notes:
distance is in meters, time is in seconds, don't include average speed. Convert time to hours or minutes, whatever's closer. distance is in meters, time is in seconds, don't include average speed.
Convert time to hours or minutes, whatever's closer.
Convert distance to larger units when appropriate, keep in mind we don't need much accuracy.
The activity data in json format from strava: The activity data in json format from strava:
${JSON.stringify( ${JSON.stringify(
omit(activity, [ omit(activity, [
@@ -95,14 +101,16 @@ export default defineEventHandler(async (event) => {
description: string; description: string;
}; };
const promo = "https://ghostwriter.rocks 👻"; const promo = "Written by https://ghostwriter.rocks 👻";
const stravaRequestBody = {
name: responseObject.title,
description: [responseObject.description, promo].join("\n"),
};
const [stravaError] = await strava!(`activities/${body.object_id}`, { const [stravaError] = await strava!(`activities/${body.object_id}`, {
method: "PUT", method: "PUT",
body: { body: stravaRequestBody,
name: responseObject.title,
description: [responseObject.description, promo].join("\n"),
},
}); });
if (stravaError) { if (stravaError) {