From 8282f8e0dd03066b09d1d0b6a6e374d99c7685d7 Mon Sep 17 00:00:00 2001 From: Guillem Borrell Date: Sat, 25 May 2024 16:09:20 +0200 Subject: [PATCH] It works for the first template. V0.1 --- src/hellocomputer/main.py | 3 ++- src/hellocomputer/routers/analysis.py | 9 +++++++-- src/hellocomputer/routers/files.py | 4 +--- src/hellocomputer/static/script.js | 14 +++++++------- test/data/TestExcelHelloComputer.xlsx | Bin 10865 -> 10937 bytes test/data/~$TestExcelHelloComputer.xlsx | Bin 0 -> 165 bytes test/test_data.py | 2 +- 7 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 test/data/~$TestExcelHelloComputer.xlsx diff --git a/src/hellocomputer/main.py b/src/hellocomputer/main.py index fd54fc9..86f90c0 100644 --- a/src/hellocomputer/main.py +++ b/src/hellocomputer/main.py @@ -6,7 +6,7 @@ from pydantic import BaseModel import hellocomputer -from .routers import files, sessions +from .routers import files, sessions, analysis static_path = Path(hellocomputer.__file__).parent / "static" @@ -42,6 +42,7 @@ def get_health() -> HealthCheck: app.include_router(sessions.router) app.include_router(files.router) +app.include_router(analysis.router) app.mount( "/", StaticFiles(directory=static_path, html=True, packages=["bootstrap4"]), diff --git a/src/hellocomputer/routers/analysis.py b/src/hellocomputer/routers/analysis.py index b403d6f..07ded5a 100644 --- a/src/hellocomputer/routers/analysis.py +++ b/src/hellocomputer/routers/analysis.py @@ -14,12 +14,13 @@ router = APIRouter() @router.get("/query", response_class=PlainTextResponse, tags=["queries"]) async def query(sid: str = "", q: str = "") -> str: + print(q) query = f"Write a query that {q} in the current database" chat = Chat(api_key=settings.anyscale_api_key, temperature=0.5) db = ( DDB() - .gcs_secret(settings.gcs_secret, settings.gcs_secret) + .gcs_secret(settings.gcs_access, settings.gcs_secret) .load_folder_gcs(settings.gcs_bucketname, sid) ) @@ -32,7 +33,11 @@ async def query(sid: str = "", q: str = "") -> str: ] ) + print(prompt) + chat = await chat.eval("You're an expert sql developer", prompt) query = extract_code_block(chat.last_response_content()) + result = str(db.query(query)) + print(result) - return str(db.query(query)) + return result diff --git a/src/hellocomputer/routers/files.py b/src/hellocomputer/routers/files.py index 5787c5d..5000d9d 100644 --- a/src/hellocomputer/routers/files.py +++ b/src/hellocomputer/routers/files.py @@ -25,11 +25,9 @@ async def upload_file(file: UploadFile = File(...), sid: str = ""): await f.write(content) await f.flush() - gcs.makedir(f"{settings.gcs_bucketname}/{sid}") - print("successfully created directory") ( DDB() - .gcs_secret(settings.gcs_secret, settings.gcs_secret) + .gcs_secret(settings.gcs_access, settings.gcs_secret) .load_metadata(f.name) .dump_gcs(settings.gcs_bucketname, sid) ) diff --git a/src/hellocomputer/static/script.js b/src/hellocomputer/static/script.js index 9693814..01a941a 100644 --- a/src/hellocomputer/static/script.js +++ b/src/hellocomputer/static/script.js @@ -28,27 +28,27 @@ textarea.addEventListener('input', function () { }); // Function to fetch response -async function fetchResponse(message) { +async function fetchResponse(message, newMessage) { try { - const response = await fetch('/greetings'); + const response = await fetch('/query?sid=' + sessionStorage.getItem('helloComputerSession') + '&q=' + message); if (!response.ok) { throw new Error('Network response was not ok ' + response.statusText); } const data = await response.text(); // Hide spinner and display result - message.innerHTML = '
' + data + '
'; + newMessage.innerHTML = '
' + data + '
'; } catch (error) { - message.innerHTML = '' + 'Error: ' + error.message; + newMessage.innerHTML = '' + 'Error: ' + error.message; } } -function addAIMessage() { +function addAIMessage(messageContent) { const newMessage = document.createElement('div'); newMessage.classList.add('message', 'bg-white', 'p-2', 'mb-2', 'rounded'); newMessage.innerHTML = '
'; chatMessages.prepend(newMessage); // Add new message at the top - fetchResponse(newMessage); + fetchResponse(messageContent, newMessage); } function addAIManualMessage(m) { @@ -68,7 +68,7 @@ function addUserMessage() { textarea.value = ''; // Clear the textarea textarea.style.height = 'auto'; // Reset the textarea height textarea.style.overflowY = 'hidden'; - addAIMessage(); + addAIMessage(messageContent); } }; diff --git a/test/data/TestExcelHelloComputer.xlsx b/test/data/TestExcelHelloComputer.xlsx index c9e1c311c834f9f7b9f356aa58ad29208aea1bc8..556861628c906a6b96c15c7ad9a62ad73200d09b 100644 GIT binary patch delta 2708 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 delta 2618 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 rN(E?`LsI|z`W{BWUS9BD`Cl@Cpt3PI2ROH