Spaces:
Sleeping
Sleeping
File size: 3,662 Bytes
23f2703 72831f0 23f2703 2bcb787 72831f0 2bcb787 72831f0 1195f6d c9f0eeb 23f2703 7bf11dd 23f2703 1195f6d c9f0eeb 72831f0 c9f0eeb 0dd6b64 72831f0 c9f0eeb 7dbebbe 2bcb787 7dbebbe c9f0eeb da52af7 c9f0eeb 7dbebbe 2bcb787 c9f0eeb 72831f0 c9f0eeb 23f2703 72831f0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
import streamlit as st
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, ManagedAgent, VisitWebpageTool, tool
from sqlalchemy import (
create_engine,
MetaData,
Table,
Column,
String,
Integer,
Float,
insert,
inspect,
text,
)
engine = create_engine("sqlite:///:memory:")
metadata_obj = MetaData()
# create city SQL table
table_name = "receipts"
receipts = Table(
table_name,
metadata_obj,
Column("receipt_id", Integer, primary_key=True),
Column("customer_name", String(16), primary_key=True),
Column("price", Float),
Column("tip", Float),
)
metadata_obj.create_all(engine)
rows = [
{"receipt_id": 1, "customer_name": "Alan Payne", "price": 12.06, "tip": 1.20},
{"receipt_id": 2, "customer_name": "Alex Mason", "price": 23.86, "tip": 0.24},
{"receipt_id": 3, "customer_name": "Woodrow Wilson", "price": 53.43, "tip": 5.43},
{"receipt_id": 4, "customer_name": "Margaret James", "price": 21.11, "tip": 1.00},
]
for row in rows:
stmt = insert(receipts).values(**row)
with engine.begin() as connection:
cursor = connection.execute(stmt)
inspector = inspect(engine)
columns_info = [(col["name"], col["type"]) for col in inspector.get_columns("receipts")]
table_description = "Columns:\n" + "\n".join([f" - {name}: {col_type}" for name, col_type in columns_info])
print(table_description)
@tool
def sql_engine(query: str) -> str:
"""
Allows you to perform SQL queries on the table. Returns a string representation of the result.
The table is named 'receipts'. Its description is as follows:
Columns:
- receipt_id: INTEGER
- customer_name: VARCHAR(16)
- price: FLOAT
- tip: FLOAT
Args:
query: The query to perform. This should be correct SQL.
"""
output = ""
with engine.connect() as con:
rows = con.execute(text(query))
for row in rows:
output += "\n" + str(row)
return output
sql_agent = CodeAgent(
tools=[sql_engine],
model=HfApiModel(),
# additional_authorized_imports=['pyparsing', 'matplotlib', 'datetime', 'statistics', 'bs4', 'request', 'unicodedata', 'queue', 'time', 'collections', 're', 'math', 'stat', 'random', 'itertools'],
)
# Function to log agent actions
def log_agent_action(prompt, result, agent_name):
st.write(f"### Agent Activity ({agent_name}):")
st.write("**Prompt Sent to Agent:**")
st.code(prompt, language="text")
st.write("**Agent Output:**")
st.code(result, language="text")
# Streamlit app title
st.title("AI SQL Agent researching your query and summarizing it")
# App description
st.write("Generate SQL queries using human speech powered by SmolAgents.")
# Input blog topic or prompt
prompt = st.text_area("Enter the your prompt:", placeholder="E.g., Can you give me the name of the client who got the most expensive receipt?")
# Button to generate blog content
if st.button("Generate Summary"):
if prompt:
with st.spinner("Generating content..."):
try:
# Run the blog agent with the given prompt
result = sql_agent.run(prompt)
# Display the generated blog content
st.subheader("Generated Summary:")
st.write(result)
# Log backend activity
log_agent_action(prompt, result, "SQL Agent")
except Exception as e:
st.error(f"An error occurred: {e}")
else:
st.warning("Please enter a blog topic or prompt to proceed.")
# Footer
st.markdown("---")
st.caption("Powered by SmolAgents, and Streamlit")
|