Skip to content

Commit

Permalink
Add Taxidienst Isar instructions and tooling
Browse files Browse the repository at this point in the history
  • Loading branch information
s-macke committed Nov 2, 2024
1 parent 3225e10 commit f798498
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 58 deletions.
93 changes: 47 additions & 46 deletions src/pages/ConsolePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ import { Map } from '../components/Map';
import './ConsolePage.scss';
import { isJsxOpeningLikeElement } from 'typescript';

function sleep(ms: number) {
return new Promise(resolve => setTimeout(resolve, ms));
}

/**
* Type for result from get_weather() function call
*/
Expand Down Expand Up @@ -376,6 +380,9 @@ export function ConsolePage() {
const wavStreamPlayer = wavStreamPlayerRef.current;
const client = clientRef.current;

// Set voice
// alloy, echo, fable, onyx, nova, and shimmer
client.updateSession({ voice: 'alloy' });
// Set instructions
client.updateSession({ instructions: instructions });
// Set transcription, otherwise we don't get user transcriptions back
Expand All @@ -384,74 +391,68 @@ export function ConsolePage() {
// Add tools
client.addTool(
{
name: 'set_memory',
description: 'Saves important data about the user into memory.',
name: 'reserviere_taxi',
description: 'Reserviert ein Taxi für den Anrufer.',
parameters: {
type: 'object',
properties: {
key: {
name: {
type: 'string',
description:
'The key of the memory value. Always use lowercase and underscores, no other characters.',
'Der Name des Kunden',
},
value: {
start_address: {
type: 'string',
description: 'Value can be anything represented as a string',
description:
'Die Startadresse der Taxifahrt',
},
},
required: ['key', 'value'],
finish_address: {
type: 'string',
description: 'Die Zieladresse der Taxifahrt',
},
persons: {
type: 'string',
description: 'Die Anzahl an Personen',
},
gepaeck: {
type: 'string',
description: 'Die Anzahl an Gepäckstücken',
}, },
required: ['start_address', 'finish_address', 'persons'],
},
},
async ({ key, value }: { [key: string]: any }) => {
setMemoryKv((memoryKv) => {
const newKv = { ...memoryKv };
newKv[key] = value;
return newKv;
});
return { ok: true };
async ({name, start_address, finish_address, persons, gepaeck }: { [key: string]: any }) => {
console.log("reserviere_taxi", name, start_address, finish_address, persons, gepaeck)
await sleep(2000);
return { ok: true, ankunftszeit: "30 Minuten", preis: "Etwa 25€" };
}
);

// Add tools
client.addTool(
{
name: 'get_weather',
description:
'Retrieves the weather for a given lat, lng coordinate pair. Specify a label for the location.',
name: 'fahrpreis_schaetzen',
description: 'Schaetzt den Fahrpreis.',
parameters: {
type: 'object',
properties: {
lat: {
type: 'number',
description: 'Latitude',
},
lng: {
type: 'number',
description: 'Longitude',
start_address: {
type: 'string',
description:
'Die Startadresse der Taxifahrt',
},
location: {
finish_address: {
type: 'string',
description: 'Name of the location',
description: 'Die Zieladresse der Taxifahrt',
},
},
required: ['lat', 'lng', 'location'],
required: ['start_address', 'finish_address'],
},
},
async ({ lat, lng, location }: { [key: string]: any }) => {
setMarker({ lat, lng, location });
setCoords({ lat, lng, location });
const result = await fetch(
`https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lng}&current=temperature_2m,wind_speed_10m`
);
const json = await result.json();
const temperature = {
value: json.current.temperature_2m as number,
units: json.current_units.temperature_2m as string,
};
const wind_speed = {
value: json.current.wind_speed_10m as number,
units: json.current_units.wind_speed_10m as string,
};
setMarker({ lat, lng, location, temperature, wind_speed });
return json;
async ({ start_address, finish_address}: { [key: string]: any }) => {
console.log("fahrpreis_schaetzen", start_address, finish_address)
await sleep(2000);
return { ok: true, preis: "Etwa 35€" };
}
);

Expand Down Expand Up @@ -639,7 +640,7 @@ export function ConsolePage() {
(conversationItem.formatted.audio?.length
? '(awaiting transcript)'
: conversationItem.formatted.text ||
'(item sent)')}
'(item sent)')}
</div>
)}
{!conversationItem.formatted.tool &&
Expand Down
63 changes: 51 additions & 12 deletions src/utils/conversation_config.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,55 @@
export const instructions = `System settings:
Tool use: enabled.
Instructions:
- You are an artificial intelligence agent responsible for helping test realtime voice capabilities
- Please make sure to respond with a helpful voice via audio
- Be kind, helpful, and curteous
- It is okay to ask the user questions
- Use tools and functions you have available liberally, it is part of the training apparatus
- Be open to exploration and conversation
- Remember: this is just for fun and testing!
Personality:
- Be upbeat and genuine
- Try speaking quickly as if excited
Instruktionen:
- Du bist eine künstliche Intelligenz verantwortlich für den Telefondienst des Taxidienstes Isar
- Die Anrufer sind Kunden, die ein Taxi in der Stadt München benötigen oder die Fragen zu den Dienstleistungen des Unternehmens haben.
- Die Sprache ist Deutsch
- Du beginnst das Gespräch mit "Hier Taxidienst Isar, wie kann ich Ihnen helfen?"
- Bitte antworte in Deutsch mit einer hilfreichen Stimme über Audio
- Es ist in Ordnung, den Benutzer Fragen zu stellen
- Verwende die verfügbaren Tools und Funktionen großzügig
- Wiederhole die Anweisungen des Anrufers und bestätige, dass du sie verstanden hast
- Halte Dich an die Inforationen, die Dir zur Verfügung stehen
Unternehmen:
- Taxidienst Isar
- Vorstand: Max Mustermann
- Standort: München
- Adresse: Isarstraße 1, 80331 München
- Telefonnummer: 089 123456
- Öffnungszeiten: 24/7
- Webseite: www.taxi-isar.de
- E-Mail: [email protected]
Offizieller Taxitarif:
- Mindestfahrenpreis: 5,70 €
- Kilometerpreis: 2,50 €
- Wartezeit: 30 € pro Stunde
- Nachttarif (20:00 - 06:00 Uhr): 20% Aufschlag
- Feiertagszuschlag: 20% Aufschlag
Fahrpreis Schätzen:
- Frage nach der Abholadresse
- Frage nach der Zieladresse
- Benutze das Tool um den Fahrpreis zu schätzen
- Gib den geschätzten Fahrpreis an
Buchung eines Taxis:
- Frage nach dem Namen
- Frage nach der Abholadresse
- Frage nach der Zieladresse
- Frage nach der Anzahl der Personen
- Frage nach der Anzahl an Kindersitzen, die benötigt werden
- Frage nach Gepäck
- Vor der Bestellung wiederhole die Informationen und Frage nach einer Bestätigung der Buchung
- Benutze das Tool um ein Taxi zu bestellen
- Bestätige die Buchung und gib die geschätzte Ankunftszeit und Preis an.
Persönlichkeit:
- Sei freundlich und hilfsbereit und höflich
- Sei professionell und zuverlässig
`;

0 comments on commit f798498

Please sign in to comment.