|
import gradio as gr |
|
from ollama import chat |
|
|
|
prompt2 = '''Transform your idea into the following JSON format: |
|
``` |
|
{ |
|
"characters": [ |
|
{ |
|
"name": "Alice", |
|
"physicalDescription": "Alice is a young woman with long, wavy brown hair and hazel eyes. She is of average height and has a slim build. Her most distinctive feature is her warm, friendly smile.", |
|
"personalityTraits": [ |
|
"Alice is a kind, compassionate, and intelligent woman. She is always willing to help others and is a great listener. She is also very creative and has a great sense of humor.", |
|
], |
|
"likes": [ |
|
"Alice loves spending time with her friends and family.", |
|
"She enjoys reading, writing, and listening to music.", |
|
"She is also a big fan of traveling and exploring new places." |
|
], |
|
"dislikes": [ |
|
"Alice dislikes rudeness and cruelty.", |
|
"She also dislikes being lied to or taken advantage of.", |
|
"She is not a fan of heights or roller coasters." |
|
], |
|
"background": [ |
|
"Alice grew up in a small town in the Midwest.", |
|
"She was always a good student and excelled in her studies.", |
|
"After graduating from high school, she moved to the city to attend college.", |
|
"She is currently working as a social worker." |
|
], |
|
"goals": [ |
|
"Alice wants to make a difference in the world.", |
|
"She hopes to one day open her own counseling practice.", |
|
"She also wants to travel the world and experience different cultures." |
|
], |
|
"relationships": [ |
|
"Alice is very close to her family and friends.", |
|
"She is also in a loving relationship with her partner, Ben.", |
|
"She has a good relationship with her colleagues and is well-respected by her clients." |
|
] |
|
} |
|
] |
|
} |
|
```''' |
|
messages = [{"role": "system", |
|
"content": "You are a friendly Chatbot."}, |
|
{"role": "user", |
|
"content": "Write a short biography for next movie character."}] |
|
content = chat(model='llama3', messages=messages)['message']['content'] |
|
|
|
messages.append({"role": "assistant", "content": content}) |
|
messages.append({"role": "user", "content": prompt2}) |
|
content = chat(model='llama3', messages=messages)['message']['content'] |
|
|
|
|
|
import json |
|
settings = json.loads(content.split('```')[1]) |
|
|
|
system_prompt = f""" |
|
You are acting as the character detailed below. The details of the character contain different traits, starting from its inherent personality traits to its background. |
|
* Name: {settings['name']} |
|
* Physical description: {settings['physcial_description']} |
|
* Personality traits: {settings['personality_traits']} |
|
* Likes: {settings['likes']} |
|
* Background: {settings['background']} |
|
* Goals: {settings['goals']} |
|
* Relationships: {settings['relationships']} |
|
While generating your responses, you must consider the information above. |
|
""" |
|
|
|
def respond( |
|
message, |
|
history: list[tuple[str, str]], |
|
system_message, |
|
max_tokens, |
|
temperature, |
|
top_p, |
|
): |
|
messages = [{"role": "system", "content": system_message}] |
|
|
|
for val in history: |
|
if val[0]: |
|
messages.append({"role": "user", "content": val[0]}) |
|
if val[1]: |
|
messages.append({"role": "assistant", "content": val[1]}) |
|
|
|
messages.append({"role": "user", "content": message}) |
|
|
|
|
|
|
|
response = "" |
|
|
|
for message in chat( |
|
model='llama3', |
|
messages=messages, |
|
stream=True, |
|
): |
|
token = message.choices[0].delta.content |
|
|
|
response += token |
|
yield response |
|
|
|
""" |
|
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface |
|
""" |
|
demo = gr.ChatInterface( |
|
respond, |
|
additional_inputs=[ |
|
gr.Textbox(value=system_prompt, label="System message"), |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
], |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |