sunbal7 commited on
Commit
f39c7e1
·
verified ·
1 Parent(s): f1fd0f1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -20
app.py CHANGED
@@ -1,14 +1,13 @@
1
  import os
2
  import streamlit as st
3
  from dotenv import load_dotenv
4
- from openai import OpenAI # Novita-compatible OpenAI interface
5
  import ast
6
  import subprocess
7
  import tempfile
8
 
9
  load_dotenv()
10
 
11
- # --- Story-to-Code Converter ---
12
  class StoryToCodeConverter:
13
  def __init__(self):
14
  api_key = os.getenv("NOVITA_API_KEY")
@@ -22,7 +21,7 @@ class StoryToCodeConverter:
22
  def generate_code(self, story: str) -> str:
23
  prompt = f"""
24
  Convert this children's story into Python animation code using turtle graphics.
25
- Include comments explaining loops, movement, colors—easy for kids.
26
 
27
  Story:
28
  \"\"\"{story}\"\"\"
@@ -30,12 +29,12 @@ Story:
30
  Wrap the code in triple backticks like ```python ... ```
31
  """
32
  response = self.client.chat.completions.create(
33
- model="meta-llama/Llama-4-Scout-17B-16E-Instruct", # or another supported model
34
  messages=[
35
- {"role": "system", "content": "You are a friendly teacher for kids."},
36
  {"role": "user", "content": prompt}
37
  ],
38
- max_tokens=512
39
  )
40
  return self._extract_code(response.choices[0].message.content)
41
 
@@ -44,7 +43,7 @@ Wrap the code in triple backticks like ```python ... ```
44
  return content.split("```python")[1].split("```")[0]
45
  return content
46
 
47
- # --- Safe Code Executor ---
48
  class CodeExecutor:
49
  def execute_safely(self, code: str) -> bool:
50
  try:
@@ -58,27 +57,26 @@ class CodeExecutor:
58
  st.error(f"Robot Chef burned the cake: {e}")
59
  return False
60
 
61
- # --- Streamlit Interface ---
62
  st.set_page_config(page_title="CodeTales", page_icon="✨")
63
  with st.sidebar:
64
  st.header("🍰 How It Works")
65
  st.markdown("""
66
- 1. Kids write a story.
67
- 2. AI (Novita) turns it into Python-turtle code.
68
- 3. You see it! 🎮
69
- 4. Robot Teacher explains concepts 🎈
70
  """)
71
 
72
  st.title("✨ CodeTales: Storytime + Coding Magic")
73
-
74
  story = st.text_area("Write your story here:", height=200,
75
- placeholder="A turtle walks forward, draws a rainbow circle...")
76
 
77
  if st.button("✨ Bake My Story Cake!"):
78
  if not story.strip():
79
  st.warning("Please enter a story!")
80
  else:
81
- with st.spinner("Baking your story cake... 🍰"):
82
  try:
83
  converter = StoryToCodeConverter()
84
  code = converter.generate_code(story)
@@ -94,12 +92,12 @@ if st.button("✨ Bake My Story Cake!"):
94
  st.balloons()
95
  with st.expander("🤖 Robot Teacher Says:"):
96
  st.markdown("""
97
- - `turtle.forward(100)`: moves forward
98
- - `turtle.color("red")`: changes color
99
- - `for` loops: repeat actions
100
  """)
101
- st.success("🎉 Your animation came to life!")
102
  else:
103
  st.error("Oops, something went wrong.")
104
 
105
- st.caption("Made with ❤️ for kids | Powered by Novita AI + Python Turtle")
 
1
  import os
2
  import streamlit as st
3
  from dotenv import load_dotenv
4
+ from openai import OpenAI
5
  import ast
6
  import subprocess
7
  import tempfile
8
 
9
  load_dotenv()
10
 
 
11
  class StoryToCodeConverter:
12
  def __init__(self):
13
  api_key = os.getenv("NOVITA_API_KEY")
 
21
  def generate_code(self, story: str) -> str:
22
  prompt = f"""
23
  Convert this children's story into Python animation code using turtle graphics.
24
+ Include comments that explain loops, movement, colors—easy for kids.
25
 
26
  Story:
27
  \"\"\"{story}\"\"\"
 
29
  Wrap the code in triple backticks like ```python ... ```
30
  """
31
  response = self.client.chat.completions.create(
32
+ model="meta-llama/llama-3.1-8b-instruct",
33
  messages=[
34
+ {"role": "system", "content": "You are a friendly teacher and coder for kids."},
35
  {"role": "user", "content": prompt}
36
  ],
37
+ max_tokens=512,
38
  )
39
  return self._extract_code(response.choices[0].message.content)
40
 
 
43
  return content.split("```python")[1].split("```")[0]
44
  return content
45
 
46
+
47
  class CodeExecutor:
48
  def execute_safely(self, code: str) -> bool:
49
  try:
 
57
  st.error(f"Robot Chef burned the cake: {e}")
58
  return False
59
 
60
+
61
  st.set_page_config(page_title="CodeTales", page_icon="✨")
62
  with st.sidebar:
63
  st.header("🍰 How It Works")
64
  st.markdown("""
65
+ 1. 📝 Kids write a story
66
+ 2. 🔮 Novita AI turns it into Pythonturtle code
67
+ 3. 🎮 Animation plays
68
+ 4. 🤖 Robot Teacher explains concepts
69
  """)
70
 
71
  st.title("✨ CodeTales: Storytime + Coding Magic")
 
72
  story = st.text_area("Write your story here:", height=200,
73
+ placeholder="A turtle draws a rainbow circle...")
74
 
75
  if st.button("✨ Bake My Story Cake!"):
76
  if not story.strip():
77
  st.warning("Please enter a story!")
78
  else:
79
+ with st.spinner("Baking your story code... 🍰"):
80
  try:
81
  converter = StoryToCodeConverter()
82
  code = converter.generate_code(story)
 
92
  st.balloons()
93
  with st.expander("🤖 Robot Teacher Says:"):
94
  st.markdown("""
95
+ - `turtle.forward(100)` Moves forward
96
+ - `turtle.color("red")` Changes color
97
+ - `for` loops Repeat patterns
98
  """)
99
+ st.success("🎉 Animation ready!")
100
  else:
101
  st.error("Oops, something went wrong.")
102
 
103
+ st.caption("Made with ❤️ for young coders | Powered by Novita AI + Python Turtle")