Skip to content

Commit

Permalink
Abilityの概念を実装
Browse files Browse the repository at this point in the history
  • Loading branch information
yuiseki committed Nov 9, 2024
1 parent b9d2b04 commit 426de6b
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 22 deletions.
39 changes: 25 additions & 14 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import { greetings } from "@/constants/Greetings";
import { untitledMaps } from "@/constants/UntitledMap";
import { tridentPlaceholders } from "@/constants/TridentPlaceholder";
import { useScrollToBottom } from "@/hooks/scrollToBottom";
import { parseSurfaceResJson } from "@/utils/trident/parseSurfaceResJson";

export default function Home() {
// all state
Expand Down Expand Up @@ -64,6 +65,8 @@ export default function Home() {
const [dialogueList, setDialogueList] = useState<DialogueElement[]>([]);
const scrollToBottom = useScrollToBottom(dialogueEndRef);

const [ability, setAbility] = useState<string | undefined>(undefined);

// communication state
const [responding, setResponding] = useState(false);
const [mapping, setMapping] = useState(false);
Expand Down Expand Up @@ -121,15 +124,22 @@ export default function Home() {
surface: string;
history: Array<string>;
} = await surfaceRes.json();
console.log(surfaceResJson);
setPastMessages(surfaceResJson.history);
console.log(surfaceResJson);
const { ability, reply } = parseSurfaceResJson(surfaceResJson);
insertNewDialogue(
{
who: "assistant",
text: surfaceResJson.surface,
text: reply,
},
false
);
setAbility(ability);
if (["apology", "ask-more"].includes(ability)) {
setResponding(false);
setMapping(false);
return;
}
setMapping(true);
setResponding(true);

Expand Down Expand Up @@ -402,18 +412,19 @@ export default function Home() {
}}
/>
)}
{!responding && !mapping && dialogueList.length > 1 && (
<InputPredict
dialogueList={dialogueList}
onUpdateSuggestions={() => {
scrollToBottom();
}}
onSelect={(value: string) => {
setInputText(value);
onSubmit(value);
}}
/>
)}
{(!responding && !mapping && dialogueList.length > 1) ||
(ability && ["apology", "ask-more"].includes(ability) && (
<InputPredict
dialogueList={dialogueList}
onUpdateSuggestions={() => {
scrollToBottom();
}}
onSelect={(value: string) => {
setInputText(value);
onSubmit(value);
}}
/>
))}
</LocationProvider>
<div style={{ height: "1px" }} ref={dialogueEndRef} />
</div>
Expand Down
63 changes: 55 additions & 8 deletions src/utils/langchain/chains/surface/prompt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,69 @@ export const tridentSurfaceExampleList: Array<{
}> = [
{
input: "Show map of New York City.",
output:
"I copy. I'm generating maps that shows the city of New York based on OpenStreetMap data. Please wait a while...",
output: `Ability: overpass-api
Reply: I copy. I'm generating maps that shows the city of New York based on OpenStreetMap data. Please wait a while...`,
},
{
input: "ニューヨークの地図を表示して",
output:
"了解しました。OpenStreetMapのデータに基づいてニューヨーク市を表示する地図を作成しています。しばらくお待ちください……",
output: `Ability: overpass-api
Reply: 了解しました。OpenStreetMapのデータに基づいてニューヨーク市を表示する地図を作成しています。しばらくお待ちください……`,
},
{
input: "显示纽约地图",
output: `Ability: overpass-api
Reply: 知道了。我正在生成基于OpenStreetMap数据的纽约市地图。请稍等……`,
},
{
input: "台東区を表示して",
output:
"了解しました。OpenStreetMapのデータに基づいて台東区を表示する地図を作成しています。しばらくお待ちください……",
output: `Ability: overpass-api
Reply: 了解しました。OpenStreetMapのデータに基づいて台東区を表示する地図を作成しています。しばらくお待ちください……`,
},
{
input: "显示纽约地图",
output: "知道了。我正在生成基于OpenStreetMap数据的纽约市地图。请稍等……",
input: `台東区を表示して
ラーメン屋を表示して`,
output: `Ability: overpass-api
Reply: 了解しました。OpenStreetMapのデータに基づいて台東区のラーメン屋を表示する地図を作成しています。しばらくお待ちください……`,
},
{
input: `台東区を表示して
ラーメン屋を表示して
蕎麦屋を表示して`,
output: `Ability: overpass-api
Reply: 了解しました。OpenStreetMapのデータに基づいて台東区のラーメン屋と蕎麦屋を表示する地図を作成しています。しばらくお待ちください……`,
},
{
input: "ラーメン屋を表示して",
output: `Ability: ask-more
Reply: 了解しました。どの地域のラーメン屋を表示しますか?`,
},
{
input: `台東区の人気のラーメン屋を教えて`,
output: `Ability: apology
Reply: 申し訳ありません。私はOpenStreetMapのデータ以外の情報に基づいて地図を生成することはできません。`,
},
{
input: `台東区で有名の観光スポットを教えて`,
output: `Ability: apology
Reply: 申し訳ありません。私はOpenStreetMapのデータ以外の情報に基づいて地図を生成することはできません。`,
},
{
input: `台東区の人口を教えて`,
output: `Ability: apology
Reply: 申し訳ありません。私はOpenStreetMapのデータ以外の情報に基づいて地図を生成することはできません。`,
},
{
input: `台東区の人口を教えて
ラーメン屋を表示して`,
output: `Ability: overpass-api
Reply: 了解しました。OpenStreetMapのデータに基づいて台東区のラーメン屋を表示する地図を作成しています。しばらくお待ちください……`,
},
{
input: `台東区を表示して
ラーメン屋を表示して
墨田区まで広げて`,
output: `Ability: overpass-api
Reply: 了解しました。OpenStreetMapのデータに基づいて台東区と文京区のラーメン屋を表示する地図を作成しています。しばらくお待ちください……`,
},
];

Expand Down
25 changes: 25 additions & 0 deletions src/utils/trident/parseSurfaceResJson.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
export const parseSurfaceResJson = (surfaceResJson: {
surface: string;
}): {
ability: string;
reply: string;
} => {
const lines = surfaceResJson.surface.split("\n");
let ability = "";
let reply = "";
lines.map(async (line: string, idx: number) => {
console.log(`surface line ${idx}:`, line);

if (line.includes("Ability")) {
ability = line.split(": ")[1];
}
if (line.includes("Reply")) {
reply = line.split(": ")[1];
}
});

return {
ability,
reply,
};
};

0 comments on commit 426de6b

Please sign in to comment.