bharathmunakala commited on
Commit
a74034c
Β·
verified Β·
1 Parent(s): 2794cf4

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +50 -40
src/streamlit_app.py CHANGED
@@ -1,40 +1,50 @@
1
- import altair as alt
2
- import numpy as np
3
- import pandas as pd
4
- import streamlit as st
5
-
6
- """
7
- # Welcome to Streamlit!
8
-
9
- Edit `/streamlit_app.py` to customize this app to your heart's desire :heart:.
10
- If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community
11
- forums](https://discuss.streamlit.io).
12
-
13
- In the meantime, below is an example of what you can do with just a few lines of code:
14
- """
15
-
16
- num_points = st.slider("Number of points in spiral", 1, 10000, 1100)
17
- num_turns = st.slider("Number of turns in spiral", 1, 300, 31)
18
-
19
- indices = np.linspace(0, 1, num_points)
20
- theta = 2 * np.pi * num_turns * indices
21
- radius = indices
22
-
23
- x = radius * np.cos(theta)
24
- y = radius * np.sin(theta)
25
-
26
- df = pd.DataFrame({
27
- "x": x,
28
- "y": y,
29
- "idx": indices,
30
- "rand": np.random.randn(num_points),
31
- })
32
-
33
- st.altair_chart(alt.Chart(df, height=700, width=700)
34
- .mark_point(filled=True)
35
- .encode(
36
- x=alt.X("x", axis=None),
37
- y=alt.Y("y", axis=None),
38
- color=alt.Color("idx", legend=None, scale=alt.Scale()),
39
- size=alt.Size("rand", legend=None, scale=alt.Scale(range=[1, 150])),
40
- ))
 
 
 
 
 
 
 
 
 
 
 
1
+ import os, asyncio, time, logging, streamlit as st
2
+ from google.adk.agents import Agent
3
+ from google.adk.sessions import InMemorySessionService
4
+ from google.adk.runners import Runner
5
+ from google.adk.tools import google_search
6
+ from google.genai import types
7
+ from dotenv import load_dotenv
8
+
9
+ load_dotenv(); logging.basicConfig(level=logging.ERROR)
10
+ MODEL,APP_NAME,USER_ID = "gemini-2.0-flash-exp", "search_assistant_app", "streamlit_user_search"
11
+ agent = Agent(name="search_assistant", model=MODEL, instruction="You are a helpful assistant Answer user questions using Google Search when needed.", description="An assistant that can search the web.", tools=[google_search])
12
+
13
+ @st.cache_resource
14
+ def init_adk():
15
+ ss = InMemorySessionService(); r = Runner(agent=agent, app_name=APP_NAME, session_service=ss)
16
+ sid = st.session_state.get("adk_session_id") or f"session_{int(time.time())}_{os.urandom(4).hex()}"; st.session_state["adk_session_id"] = sid
17
+ try: ss.create_session(app_name=APP_NAME, user_id=USER_ID, session_id=sid, state={})
18
+ except: ss.create_session(app_name=APP_NAME, user_id=USER_ID, session_id=sid, state={})
19
+ return r, sid
20
+
21
+ async def run_adk(r, sid, q):
22
+ try:
23
+ async for e in r.run_async(user_id=USER_ID, session_id=sid, new_message=types.Content(role="user", parts=[types.Part(text=q)])):
24
+ if e.is_final_response() and e.content and e.content.parts: return e.content.parts[0].text
25
+ except Exception as err: return f"Error: {err}"
26
+ return "[No response]"
27
+
28
+ def main():
29
+ st.set_page_config(page_title="Search", page_icon="πŸ”", layout="wide");
30
+ st.markdown(
31
+ f'<h1><img src="https://cdn-images-1.medium.com/v2/resize:fill:1600:480/gravity:fp:0.5:0.4/1*A4-k_sI5kmrphjS4tJ_rpA.png" width="60"/> Agent Development Kit <img src="https://images.seeklogo.com/logo-png/44/2/streamlit-logo-png_seeklogo-441815.png" width="60"/></h1>',
32
+ unsafe_allow_html=True
33
+ )
34
+ if not os.environ.get("GOOGLE_API_KEY"): st.error("API Key missing!"); st.stop()
35
+ try: r, sid = init_adk(); # st.sidebar.success(f"ADK Connected (Session: ...{sid[-8:]})", icon="βœ…")
36
+ except Exception as e: st.error(f"ADK failed: {e}", icon="❌"); st.stop()
37
+ if "msgs" not in st.session_state: st.session_state.msgs = []
38
+ for msg in st.session_state.msgs:
39
+ with st.chat_message(msg["role"]): st.markdown(msg["content"])
40
+ if prompt := st.chat_input("Ask..."):
41
+ st.session_state.msgs.append({"role": "user", "content": prompt});
42
+ with st.chat_message("user"): st.markdown(prompt)
43
+ with st.chat_message("assistant"):
44
+ placeholder = st.empty()
45
+ with st.spinner("Searching..."): response = asyncio.run(run_adk(r, sid, prompt)); placeholder.markdown(response)
46
+ st.session_state.msgs.append({"role": "assistant", "content": response})
47
+ st.sidebar.image("https://cdn-images-1.medium.com/v2/resize:fill:1600:480/gravity:fp:0.5:0.4/1*A4-k_sI5kmrphjS4tJ_rpA.png", use_container_width=True)
48
+ st.sidebar.caption(f"**Model**: **{MODEL}**")
49
+
50
+ if __name__ == "__main__": main()