From ae8b09329aedbbc47019a302de1db4e348895d3c Mon Sep 17 00:00:00 2001 From: Matthew Maxwell Date: Fri, 20 Dec 2024 14:36:13 -0800 Subject: [PATCH] added chat template for llama-3.2 --- .../java/ai/picovoice/picollm/PicoLLM.java | 2 + .../picollm/dialog/Llama32ChatDialog.java | 43 +++++++++++++++++++ .../picollm/testapp/PicoLLMTest.java | 5 +++ binding/ios/PicoLLM.swift | 2 + .../PicoLLMAppTestUITests.swift | 1 + binding/ios/PicoLLMDialog.swift | 5 +++ binding/nodejs/src/dialog.ts | 9 ++++ binding/nodejs/src/index.ts | 2 + binding/nodejs/test/index.test.ts | 3 ++ binding/python/_picollm.py | 12 ++++++ binding/python/test_picollm.py | 2 + binding/web/src/dialog.ts | 9 ++++ binding/web/src/index.ts | 2 + binding/web/test/picollm.test.ts | 2 + resources/.test/test_data.json | 4 ++ 15 files changed, 103 insertions(+) create mode 100644 binding/android/PicoLLM/picollm/src/main/java/ai/picovoice/picollm/dialog/Llama32ChatDialog.java diff --git a/binding/android/PicoLLM/picollm/src/main/java/ai/picovoice/picollm/PicoLLM.java b/binding/android/PicoLLM/picollm/src/main/java/ai/picovoice/picollm/PicoLLM.java index dc9b127..b7594bf 100644 --- a/binding/android/PicoLLM/picollm/src/main/java/ai/picovoice/picollm/PicoLLM.java +++ b/binding/android/PicoLLM/picollm/src/main/java/ai/picovoice/picollm/PicoLLM.java @@ -38,6 +38,8 @@ public class PicoLLM { DIALOGS.put("llama-2-70b-chat", Llama2ChatDialog.class); DIALOGS.put("llama-3-8b-instruct", Llama3ChatDialog.class); DIALOGS.put("llama-3-70b-instruct", Llama3ChatDialog.class); + DIALOGS.put("llama-3.2-1b-instruct", Llama32ChatDialog.class); + DIALOGS.put("llama-3.2-3b-instruct", Llama32ChatDialog.class); DIALOGS.put("mistral-7b-instruct-v0.1", MistralChatDialog.class); DIALOGS.put("mistral-7b-instruct-v0.2", MistralChatDialog.class); DIALOGS.put("mixtral-8x7b-instruct-v0.1", MixtralChatDialog.class); diff --git a/binding/android/PicoLLM/picollm/src/main/java/ai/picovoice/picollm/dialog/Llama32ChatDialog.java b/binding/android/PicoLLM/picollm/src/main/java/ai/picovoice/picollm/dialog/Llama32ChatDialog.java new file mode 100644 index 0000000..d61aa4b --- /dev/null +++ b/binding/android/PicoLLM/picollm/src/main/java/ai/picovoice/picollm/dialog/Llama32ChatDialog.java @@ -0,0 +1,43 @@ +/* + Copyright 2024 Picovoice Inc. + + You may not use this file except in compliance with the license. A copy of the license is + located in the "LICENSE" file accompanying this source. + + Unless required by applicable law or agreed to in writing, software distributed under the + License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + express or implied. See the License for the specific language governing permissions and + limitations under the License. +*/ + +package ai.picovoice.picollm; + +/** + * Represents a dialog helper specific for the `phi3.5` model. + */ +public class Llama32ChatDialog extends Llama3ChatDialog { + + /** + * Builder class for constructing Llama32ChatDialog instances. + */ + public static class Builder extends PicoLLMDialog.Builder { + /** + * Builds a new instance of Llama32ChatDialog based on the configured settings. + * + * @return A new instance of Llama32ChatDialog. + */ + public Llama32ChatDialog build() { + return new Llama32ChatDialog(this.history, this.system); + } + } + + /** + * Constructs a Llama32ChatDialog instance with the specified history and system settings. + * + * @param history The history length for the dialog. + * @param system The system instruction for configuring the model's responses. + */ + Llama32ChatDialog(Integer history, String system) { + super(history, system); + } +} diff --git a/binding/android/PicoLLMTestApp/picollm-test-app/src/androidTest/java/ai/picovoice/picollm/testapp/PicoLLMTest.java b/binding/android/PicoLLMTestApp/picollm-test-app/src/androidTest/java/ai/picovoice/picollm/testapp/PicoLLMTest.java index e12defc..3e28dec 100644 --- a/binding/android/PicoLLMTestApp/picollm-test-app/src/androidTest/java/ai/picovoice/picollm/testapp/PicoLLMTest.java +++ b/binding/android/PicoLLMTestApp/picollm-test-app/src/androidTest/java/ai/picovoice/picollm/testapp/PicoLLMTest.java @@ -46,6 +46,7 @@ import ai.picovoice.picollm.GemmaChatDialog; import ai.picovoice.picollm.Llama2ChatDialog; import ai.picovoice.picollm.Llama3ChatDialog; +import ai.picovoice.picollm.Llama32ChatDialog; import ai.picovoice.picollm.MistralChatDialog; import ai.picovoice.picollm.Phi2ChatDialog; import ai.picovoice.picollm.Phi2QADialog; @@ -672,6 +673,8 @@ public PicoLLMDialog.Builder getDialogBuilder(String dialogName) { return new Llama2ChatDialog.Builder(); case "llama-3-chat-dialog": return new Llama3ChatDialog.Builder(); + case "llama-3.2-chat-dialog": + return new Llama32ChatDialog.Builder(); case "mistral-chat-dialog": return new MistralChatDialog.Builder(); case "phi2-chat-dialog": @@ -682,6 +685,8 @@ public PicoLLMDialog.Builder getDialogBuilder(String dialogName) { return new Phi3ChatDialog.Builder(); case "phi3.5-chat-dialog": return new Phi35ChatDialog.Builder(); + case "llama-3.2-chat-dialog": + return new Llama32ChatDialog.Builder(); default: return null; } diff --git a/binding/ios/PicoLLM.swift b/binding/ios/PicoLLM.swift index b083bab..214626c 100644 --- a/binding/ios/PicoLLM.swift +++ b/binding/ios/PicoLLM.swift @@ -511,6 +511,8 @@ public class PicoLLM { "llama-2-70b-chat": Llama2ChatDialog.self, "llama-3-8b-chat": Llama3ChatDialog.self, "llama-3-70b-chat": Llama3ChatDialog.self, + "llama-3.2-1b-chat": Llama32ChatDialog.self, + "llama-3.2-3b-chat": Llama32ChatDialog.self, "mistral-7b-instruct-v0.1": MistralChatDialog.self, "mistral-7b-instruct-v0.2": MistralChatDialog.self, "mixtral-8x7b-instruct-v0.1": MixtralChatDialog.self, diff --git a/binding/ios/PicoLLMAppTest/PicoLLMAppTestUITests/PicoLLMAppTestUITests.swift b/binding/ios/PicoLLMAppTest/PicoLLMAppTestUITests/PicoLLMAppTestUITests.swift index 2a9c160..2864b3d 100644 --- a/binding/ios/PicoLLMAppTest/PicoLLMAppTestUITests/PicoLLMAppTestUITests.swift +++ b/binding/ios/PicoLLMAppTest/PicoLLMAppTestUITests/PicoLLMAppTestUITests.swift @@ -420,6 +420,7 @@ class PicoLLMAppTestUITests: BaseTest { "gemma-chat-dialog": GemmaChatDialog.self, "llama-2-chat-dialog": Llama2ChatDialog.self, "llama-3-chat-dialog": Llama3ChatDialog.self, + "llama-3.2-chat-dialog": Llama32ChatDialog.self, "mistral-chat-dialog": MistralChatDialog.self, "phi2-chat-dialog": Phi2ChatDialog.self, "phi2-qa-dialog": Phi2QADialog.self, diff --git a/binding/ios/PicoLLMDialog.swift b/binding/ios/PicoLLMDialog.swift index c554ad7..0791f4e 100644 --- a/binding/ios/PicoLLMDialog.swift +++ b/binding/ios/PicoLLMDialog.swift @@ -323,6 +323,11 @@ public class Llama3ChatDialog: BasePicoLLMDialog { } } +/// Dialog helper for `llama-3.2-1b-instruct` and `llama-3.2-3b-instruct`. +public class Llama32ChatDialog: Llama3ChatDialog { + +} + /// Dialog helper for `gemma-2b-it` and `gemma-7b-it`. public class GemmaChatDialog: BasePicoLLMDialog { public override func prompt() throws -> String { diff --git a/binding/nodejs/src/dialog.ts b/binding/nodejs/src/dialog.ts index 5bbc5c1..f6a99ca 100644 --- a/binding/nodejs/src/dialog.ts +++ b/binding/nodejs/src/dialog.ts @@ -150,6 +150,13 @@ export class Llama3ChatDialog extends Dialog { } } +/** + * Dialog helper for `llama-3.2-1b-instruct` and `llama-3.2-3b-instruct`. + */ +export class Llama32ChatDialog extends Llama3ChatDialog { + +} + /** * Dialog helper for `mistral-7b-instruct-v0.1` and `mistral-7b-instruct-v0.2`. */ @@ -273,6 +280,8 @@ export const DIALOGS: { [key: string]: typeof Dialog | { [key: string]: typeof D 'llama-2-70b-chat': Llama2ChatDialog, 'llama-3-8b-instruct': Llama3ChatDialog, 'llama-3-70b-instruct': Llama3ChatDialog, + 'llama-3.2-1b-instruct': Llama32ChatDialog, + 'llama-3.2-3b-instruct': Llama32ChatDialog, 'mistral-7b-instruct-v0.1': MistralChatDialog, 'mistral-7b-instruct-v0.2': MistralChatDialog, 'mixtral-8x7b-instruct-v0.1': MixtralChatDialog, diff --git a/binding/nodejs/src/index.ts b/binding/nodejs/src/index.ts index c84f9e1..6b38202 100644 --- a/binding/nodejs/src/index.ts +++ b/binding/nodejs/src/index.ts @@ -32,6 +32,7 @@ import { GemmaChatDialog, Llama2ChatDialog, Llama3ChatDialog, + Llama32ChatDialog, MistralChatDialog, MixtralChatDialog, Phi2Dialog, @@ -58,6 +59,7 @@ export { GemmaChatDialog, Llama2ChatDialog, Llama3ChatDialog, + Llama32ChatDialog, MistralChatDialog, MixtralChatDialog, Phi2Dialog, diff --git a/binding/nodejs/test/index.test.ts b/binding/nodejs/test/index.test.ts index ecfdae0..abf24a4 100644 --- a/binding/nodejs/test/index.test.ts +++ b/binding/nodejs/test/index.test.ts @@ -17,6 +17,7 @@ import { GemmaChatDialog, Llama2ChatDialog, Llama3ChatDialog, + Llama32ChatDialog, MistralChatDialog, Phi2ChatDialog, Phi2QADialog, @@ -46,6 +47,7 @@ const DIALOG_CLASSES: { [key: string]: typeof Dialog } = { 'gemma-chat-dialog': GemmaChatDialog, "llama-2-chat-dialog": Llama2ChatDialog, "llama-3-chat-dialog": Llama3ChatDialog, + "llama-3.2-chat-dialog": Llama32ChatDialog, "mistral-chat-dialog": MistralChatDialog, 'phi2-chat-dialog': Phi2ChatDialog, 'phi2-qa-dialog': Phi2QADialog, @@ -65,6 +67,7 @@ type DialogExpectations = { 'gemma-chat-dialog': string, "llama-2-chat-dialog": string, "llama-3-chat-dialog": string, + "llama-3.2-chat-dialog": string, "mistral-chat-dialog": string, 'phi2-chat-dialog': string, 'phi2-qa-dialog': string, diff --git a/binding/python/_picollm.py b/binding/python/_picollm.py index 3055b4d..b273081 100644 --- a/binding/python/_picollm.py +++ b/binding/python/_picollm.py @@ -176,6 +176,15 @@ def prompt(self) -> str: return ''.join(res) +class Llama32ChatDialog(Llama3ChatDialog): + """ + Dialog helper for `llama-3.2-1b-instruct` and `llama-3.2-3b-instruct`. + """ + + def __init__(self, history: Optional[int] = None, system: Optional[str] = None) -> None: + super().__init__(history=history, system=system) + + class MistralChatDialog(Dialog): """ Dialog helper for `mistral-7b-instruct-v0.1` and `mistral-7b-instruct-v0.2`. @@ -975,6 +984,8 @@ def get_error_stack(self) -> Sequence[str]: 'llama-2-70b-chat': Llama2ChatDialog, 'llama-3-8b-instruct': Llama3ChatDialog, 'llama-3-70b-instruct': Llama3ChatDialog, + 'llama-3.2-1b-instruct': Llama32ChatDialog, + 'llama-3.2-3b-instruct': Llama32ChatDialog, 'mistral-7b-instruct-v0.1': MistralChatDialog, 'mistral-7b-instruct-v0.2': MistralChatDialog, 'mixtral-8x7b-instruct-v0.1': MixtralChatDialog, @@ -1034,6 +1045,7 @@ def get_dialog( 'GemmaChatDialog', 'Llama2ChatDialog', 'Llama3ChatDialog', + 'Llama32ChatDialog', 'MistralChatDialog', 'MixtralChatDialog', 'Phi2ChatDialog', diff --git a/binding/python/test_picollm.py b/binding/python/test_picollm.py index f58678a..b6920c3 100644 --- a/binding/python/test_picollm.py +++ b/binding/python/test_picollm.py @@ -33,6 +33,7 @@ GemmaChatDialog, Llama2ChatDialog, Llama3ChatDialog, + Llama32ChatDialog, MistralChatDialog, Phi2ChatDialog, Phi2QADialog, @@ -466,6 +467,7 @@ def setUpClass(cls) -> None: "gemma-chat-dialog": GemmaChatDialog, "llama-2-chat-dialog": Llama2ChatDialog, "llama-3-chat-dialog": Llama3ChatDialog, + "llama-3.2x-chat-dialog": Llama32ChatDialog, "mistral-chat-dialog": MistralChatDialog, "phi2-chat-dialog": Phi2ChatDialog, "phi2-qa-dialog": Phi2QADialog, diff --git a/binding/web/src/dialog.ts b/binding/web/src/dialog.ts index c7dc891..766b359 100644 --- a/binding/web/src/dialog.ts +++ b/binding/web/src/dialog.ts @@ -149,6 +149,13 @@ export class Llama3ChatDialog extends Dialog { } } +/** + * Dialog helper for `llama-3.2-1b-instruct` and `llama-3.2-3b-instruct`. + */ +export class Llama32ChatDialog extends Llama3ChatDialog { + +} + /** * Dialog helper for `mistral-7b-instruct-v0.1` and `mistral-7b-instruct-v0.2`. */ @@ -272,6 +279,8 @@ export const DIALOGS: { [key: string]: typeof Dialog | { [key: string]: typeof D 'llama-2-70b-chat': Llama2ChatDialog, 'llama-3-8b-instruct': Llama3ChatDialog, 'llama-3-70b-instruct': Llama3ChatDialog, + 'llama-3.2-1b-instruct': Llama32ChatDialog, + 'llama-3.2-3b-instruct': Llama32ChatDialog, 'mistral-7b-instruct-v0.1': MistralChatDialog, 'mistral-7b-instruct-v0.2': MistralChatDialog, 'mixtral-8x7b-instruct-v0.1': MixtralChatDialog, diff --git a/binding/web/src/index.ts b/binding/web/src/index.ts index 4fda9a6..a921782 100644 --- a/binding/web/src/index.ts +++ b/binding/web/src/index.ts @@ -6,6 +6,7 @@ import { GemmaChatDialog, Llama2ChatDialog, Llama3ChatDialog, + Llama32ChatDialog, MistralChatDialog, MixtralChatDialog, Phi2Dialog, @@ -54,6 +55,7 @@ export { GemmaChatDialog, Llama2ChatDialog, Llama3ChatDialog, + Llama32ChatDialog, MistralChatDialog, MixtralChatDialog, Phi2Dialog, diff --git a/binding/web/test/picollm.test.ts b/binding/web/test/picollm.test.ts index ad7973a..68841e2 100644 --- a/binding/web/test/picollm.test.ts +++ b/binding/web/test/picollm.test.ts @@ -3,6 +3,7 @@ import { GemmaChatDialog, Llama2ChatDialog, Llama3ChatDialog, + Llama32ChatDialog, MistralChatDialog, Phi2ChatDialog, Phi2QADialog, @@ -27,6 +28,7 @@ const DIALOG_CLASSES: { [key: string]: typeof Dialog } = { 'gemma-chat-dialog': GemmaChatDialog, "llama-2-chat-dialog": Llama2ChatDialog, "llama-3-chat-dialog": Llama3ChatDialog, + "llama-3.2-chat-dialog": Llama32ChatDialog, "mistral-chat-dialog": MistralChatDialog, 'phi2-chat-dialog': Phi2ChatDialog, 'phi2-qa-dialog': Phi2QADialog, diff --git a/resources/.test/test_data.json b/resources/.test/test_data.json index a30b86a..24e66ac 100644 --- a/resources/.test/test_data.json +++ b/resources/.test/test_data.json @@ -188,6 +188,7 @@ "gemma-chat-dialog": "user\nHi\nmodel\nHey\nuser\nHola\nmodel\n¡Oye!\nuser\nSalut\nmodel", "llama-2-chat-dialog": "[INST] Hi [/INST] Hey [INST] Hola [/INST] ¡Oye! [INST] Salut [/INST]", "llama-3-chat-dialog": "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\nHi<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nHey<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nHola<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n¡Oye!<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nSalut<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n", + "llama-3.2-chat-dialog": "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\nHi<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nHey<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nHola<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n¡Oye!<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nSalut<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n", "mistral-chat-dialog": "[INST] Hi [/INST] Hey[INST] Hola [/INST] ¡Oye![INST] Salut [/INST]", "phi2-chat-dialog": "Human: Hi\nAI: Hey\nHuman: Hola\nAI: ¡Oye!\nHuman: Salut\nAI:", "phi2-qa-dialog": "Instruct: Hi\nOutput: Hey\nInstruct: Hola\nOutput: ¡Oye!\nInstruct: Salut\nOutput:", @@ -198,6 +199,7 @@ "gemma-chat-dialog": "user\nHi\nmodel\nHey\nuser\nHola\nmodel\n¡Oye!\nuser\nSalut\nmodel", "llama-2-chat-dialog": "[INST] <>\nrespond with ❤️ and \uD83E\uDEE1\n<>\n\nHi [/INST] Hey [INST] Hola [/INST] ¡Oye! [INST] Salut [/INST]", "llama-3-chat-dialog": "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\nHi<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nHey<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nHola<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n¡Oye!<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nSalut<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n", + "llama-3.2-chat-dialog": "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\nHi<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nHey<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nHola<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n¡Oye!<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nSalut<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n", "mistral-chat-dialog": "[INST] Hi [/INST] Hey[INST] Hola [/INST] ¡Oye![INST] Salut [/INST]", "phi2-chat-dialog": "Human: Hi\nAI: Hey\nHuman: Hola\nAI: ¡Oye!\nHuman: Salut\nAI:", "phi2-qa-dialog": "Instruct: Hi\nOutput: Hey\nInstruct: Hola\nOutput: ¡Oye!\nInstruct: Salut\nOutput:", @@ -208,6 +210,7 @@ "gemma-chat-dialog": "user\nSalut\nmodel", "llama-2-chat-dialog": "[INST] Salut [/INST]", "llama-3-chat-dialog": "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\nSalut<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n", + "llama-3.2-chat-dialog": "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\nSalut<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n", "mistral-chat-dialog": "[INST] Salut [/INST]", "phi2-chat-dialog": "Human: Salut\nAI:", "phi2-qa-dialog": "Instruct: Salut\nOutput:", @@ -218,6 +221,7 @@ "gemma-chat-dialog": "user\nSalut\nmodel", "llama-2-chat-dialog": "[INST] <>\nrespond with ❤️ and \uD83E\uDEE1\n<>\n\nSalut [/INST]", "llama-3-chat-dialog": "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\nSalut<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n", + "llama-3.2-chat-dialog": "<|begin_of_text|><|start_header_id|>user<|end_header_id|>\n\nSalut<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n", "mistral-chat-dialog": "[INST] Salut [/INST]", "phi2-chat-dialog": "Human: Salut\nAI:", "phi2-qa-dialog": "Instruct: Salut\nOutput:",