Spaces:
Running
Running
Update orchestrator/gemini.py
Browse files- orchestrator/gemini.py +39 -11
orchestrator/gemini.py
CHANGED
@@ -1,30 +1,58 @@
|
|
1 |
import os
|
2 |
import streamlit as st
|
|
|
|
|
3 |
try:
|
4 |
import google.generativeai as genai
|
5 |
except ImportError:
|
6 |
genai = None
|
7 |
|
8 |
def get_gemini_api_key():
|
|
|
|
|
|
|
|
|
9 |
if hasattr(st.secrets, "GEMINI_API_KEY"):
|
10 |
return st.secrets["GEMINI_API_KEY"]
|
|
|
11 |
return os.getenv("GEMINI_API_KEY")
|
12 |
|
13 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
api_key = get_gemini_api_key()
|
15 |
if not api_key:
|
16 |
-
raise RuntimeError("Gemini API key not set
|
17 |
-
if genai is None:
|
18 |
-
raise ImportError("Please install google-generativeai!")
|
19 |
genai.configure(api_key=api_key)
|
20 |
model_obj = genai.GenerativeModel(model)
|
21 |
response = model_obj.generate_content(prompt)
|
|
|
22 |
return response.text if hasattr(response, "text") else str(response)
|
23 |
|
24 |
-
def
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
)
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import os
|
2 |
import streamlit as st
|
3 |
+
|
4 |
+
# Try to import the Gemini client
|
5 |
try:
|
6 |
import google.generativeai as genai
|
7 |
except ImportError:
|
8 |
genai = None
|
9 |
|
10 |
def get_gemini_api_key():
|
11 |
+
"""
|
12 |
+
Return Gemini API key from Streamlit secrets or environment variable.
|
13 |
+
"""
|
14 |
+
# Try Streamlit Secrets (recommended on Spaces)
|
15 |
if hasattr(st.secrets, "GEMINI_API_KEY"):
|
16 |
return st.secrets["GEMINI_API_KEY"]
|
17 |
+
# Fallback to environment variable
|
18 |
return os.getenv("GEMINI_API_KEY")
|
19 |
|
20 |
+
def ensure_genai():
|
21 |
+
if genai is None:
|
22 |
+
raise ImportError(
|
23 |
+
"google-generativeai is not installed. Please add it to requirements.txt and re-deploy."
|
24 |
+
)
|
25 |
+
|
26 |
+
def gemini_generate(prompt, model="gemini-1.5-pro"):
|
27 |
+
"""
|
28 |
+
Simple Gemini text completion for Q&A or summarization.
|
29 |
+
"""
|
30 |
+
ensure_genai()
|
31 |
api_key = get_gemini_api_key()
|
32 |
if not api_key:
|
33 |
+
raise RuntimeError("Gemini API key not set in Streamlit secrets or environment variable.")
|
|
|
|
|
34 |
genai.configure(api_key=api_key)
|
35 |
model_obj = genai.GenerativeModel(model)
|
36 |
response = model_obj.generate_content(prompt)
|
37 |
+
# Try to return the 'text' property (for Gemini's Python client), fallback to string
|
38 |
return response.text if hasattr(response, "text") else str(response)
|
39 |
|
40 |
+
def gemini_generate_code(system_instruction, user_prompt, model="gemini-1.5-pro"):
|
41 |
+
"""
|
42 |
+
Use Gemini for code generation with a system prompt and a user prompt.
|
43 |
+
Returns: generated code as string.
|
44 |
+
"""
|
45 |
+
ensure_genai()
|
46 |
+
api_key = get_gemini_api_key()
|
47 |
+
if not api_key:
|
48 |
+
raise RuntimeError("Gemini API key not set in Streamlit secrets or environment variable.")
|
49 |
+
genai.configure(api_key=api_key)
|
50 |
+
model_obj = genai.GenerativeModel(model)
|
51 |
+
# Compose prompt as role-annotated list for best model behavior
|
52 |
+
prompt = [
|
53 |
+
{"role": "system", "parts": [system_instruction]},
|
54 |
+
{"role": "user", "parts": [user_prompt]},
|
55 |
+
]
|
56 |
+
response = model_obj.generate_content(prompt)
|
57 |
+
# Try to return the 'text' property (for Gemini's Python client), fallback to string
|
58 |
+
return response.text if hasattr(response, "text") else str(response)
|