File size: 2,844 Bytes
dc66050
 
3674844
8586ebb
f1aaba3
 
 
 
 
 
 
 
 
 
 
af7f1fe
f1aaba3
cf29376
f1aaba3
592b501
 
f1aaba3
592b501
ee14926
e1a03f2
 
ee14926
cf29376
 
 
 
 
5992538
b7b7b9c
ee14926
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dc66050
 
8586ebb
ee14926
2d1e4f3
ee14926
2d1e4f3
 
 
 
3d2d75d
ee14926
2d1e4f3
 
 
 
 
 
 
 
 
 
ee14926
2d1e4f3
 
 
ee14926
 
 
 
 
 
 
 
 
 
 
 
2d1e4f3
 
3d2d75d
 
8586ebb
 
 
f1aaba3
3d2d75d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from huggingface_hub import InferenceClient
import os
from smolagents import tool, CodeAgent, HfApiModel, GradioUI
from sqlalchemy import (
    create_engine,
    MetaData,
    Table,
    Column,
    String,
    Integer,
    Float,
    insert,
    inspect,
    text,
    select,
)
import spaces

from dotenv import load_dotenv

engine = create_engine("sqlite:///:memory:")
load_dotenv()

# What is the average each customer paid? Create a sql statement and invoke your sql_engine tool


@spaces.GPU
def dummy():
    pass


@tool
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 = ""
    with engine.connect() as con:
        rows = con.execute(text(query))
        for row in rows:
            output += "\n" + str(row)
    return output


def init_db():

    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 recipts")).fetchall())


if __name__ == "__main__":
    init_db()
    # model = HfApiModel(
    #     model_id="HuggingFaceH4/zephyr-7b-beta",
    #     token=os.getenv("my_first_agents_hf_tokens"),
    # )

    # agent = CodeAgent(
    #     tools=[sql_engine_tool],
    #     #         system_prompt="""
    #     # You are a text to sql converter
    #     # """,
    #     model=model,
    #     max_steps=1,
    #     verbosity_level=1,
    # )
    # GradioUI(agent).launch()