themissingCRAM
blocks experiment i am stuck in this situation of table not existing within gradio blocks or GradioUI
b52c028
| import gradio as gr | |
| from huggingface_hub import InferenceClient | |
| import os | |
| from smolagents import ( | |
| tool, | |
| CodeAgent, | |
| HfApiModel, | |
| GradioUI, | |
| MultiStepAgent, | |
| stream_to_gradio, | |
| ) | |
| from sqlalchemy import ( | |
| create_engine, | |
| MetaData, | |
| Table, | |
| Column, | |
| String, | |
| Integer, | |
| Float, | |
| insert, | |
| inspect, | |
| text, | |
| select, | |
| Engine, | |
| ) | |
| import spaces | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| # What is the average each customer paid? | |
| # Create a sql statement and invoke your sql_engine tool | |
| def dummy(): | |
| pass | |
| def sql_engine_tool(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 = "" | |
| print("debug sql_engine_tool") | |
| print(engine) | |
| with engine.begin() as con: | |
| print(con.connection) | |
| print(metadata_objects.tables.keys()) | |
| result = con.execute( | |
| text( | |
| "SELECT name FROM sqlite_master WHERE type='table' AND name='receipts'" | |
| ) | |
| ) | |
| print("tables available:", result.fetchone()) | |
| rows = con.execute(text(query)) | |
| for row in rows: | |
| output += "\n" + str(row) | |
| return output | |
| def init_db(engine): | |
| metadata_obj = MetaData() | |
| def insert_rows_into_table(rows, table, engine=engine): | |
| for row in rows: | |
| stmt = insert(table).values(**row) | |
| with engine.begin() as connection: | |
| connection.execute(stmt) | |
| 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, | |
| }, | |
| ] | |
| insert_rows_into_table(rows, receipts) | |
| with engine.begin() as conn: | |
| print("SELECT test", conn.execute(text("SELECT * FROM receipts")).fetchall()) | |
| print("init_db debug") | |
| print(engine) | |
| print() | |
| return engine, metadata_obj | |
| if __name__ == "__main__": | |
| engine = create_engine("sqlite:///:memory:") | |
| engine, metadata_objects = init_db(engine) | |
| model = HfApiModel( | |
| model_id="meta-llama/Meta-Llama-3.1-8B-Instruct", | |
| token=os.getenv("my_first_agents_hf_tokens"), | |
| ) | |
| agent = CodeAgent( | |
| tools=[sql_engine_tool], | |
| model=model, | |
| max_steps=1, | |
| verbosity_level=1, | |
| use_e2b_executor=True, # TODO Remove if I am at the stage of doing multiagents | |
| ) | |
| # agent.run("What is the average each customer paid?") | |
| # GradioUI(agent).launch() | |
| print( | |
| "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx test:", sql_engine_tool("SELECT * FROM receipts") | |
| ) | |
| def enter_message(message, chat_history): | |
| print() | |
| print("enter_message debug") | |
| print("engine", engine) | |
| print("message:", message) | |
| print("chat_history", chat_history) | |
| chat_history.append({"role": "user", "content": message}) | |
| x = stream_to_gradio(agent, message) | |
| print(type(x)) | |
| print("\n\n\n", x, "\n\n\n") | |
| return "", x | |
| with gr.Blocks() as b: | |
| chatbot = gr.Chatbot(type="messages") | |
| input = gr.Textbox() | |
| button = gr.Button("reply") | |
| button.click(enter_message, [input, chatbot], [input, chatbot]) | |
| b.launch() | |