{"id":50537070,"url":"https://github.com/ebicoglu/chat-with-your-data-conference","last_synced_at":"2026-06-03T17:30:25.682Z","repository":{"id":356591170,"uuid":"1217930052","full_name":"ebicoglu/chat-with-your-data-conference","owner":"ebicoglu","description":"Presentation file and source code for the \"Chat with Your Data\" talk I gave at the conference.","archived":false,"fork":false,"pushed_at":"2026-06-01T18:54:15.000Z","size":37202,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-01T20:28:45.208Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ebicoglu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-22T11:10:23.000Z","updated_at":"2026-06-01T18:55:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ebicoglu/chat-with-your-data-conference","commit_stats":null,"previous_names":["ebicoglu/chat-with-your-data-conference"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ebicoglu/chat-with-your-data-conference","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebicoglu%2Fchat-with-your-data-conference","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebicoglu%2Fchat-with-your-data-conference/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebicoglu%2Fchat-with-your-data-conference/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebicoglu%2Fchat-with-your-data-conference/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ebicoglu","download_url":"https://codeload.github.com/ebicoglu/chat-with-your-data-conference/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ebicoglu%2Fchat-with-your-data-conference/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33876327,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-03T17:30:24.754Z","updated_at":"2026-06-03T17:30:25.675Z","avatar_url":"https://github.com/ebicoglu.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# About Me\nI'm Alper Ebicoglu, a software architect and co-founder of [Volosoft](http://volosoft.com/). \u003cbr\u003e\nI've been programming since 1997.  \u003cbr\u003e\nBased on my practical experience, I give presentations at various global conferences. \u003cbr\u003e\nYou can follow me on:\n\n\u003ctable cellspacing=\"0\" cellpadding=\"0\" style=\"border: none;\"\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://www.linkedin.com/in/ebicoglu/\"\u003e\u003cimg src=\"https://img.icons8.com/color/32/linkedin.png\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://www.linkedin.com/in/ebicoglu/\"\u003elinkedin.com/in/ebicoglu\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://x.com/alperebicoglu\"\u003e\u003cimg src=\"https://img.icons8.com/color/32/twitterx.png\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://x.com/alperebicoglu\"\u003ex.com/alperebicoglu\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://alperonline.medium.com/\"\u003e\u003cimg src=\"https://img.icons8.com/color/32/medium.png\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://alperonline.medium.com/\"\u003ealperonline.medium.com\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/ebicoglu\"\u003e\u003cimg src=\"https://img.icons8.com/color/32/github.png\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://github.com/ebicoglu\"\u003egithub.com/ebicoglu\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003ca href=\"https://abp.io/community/members/alper\"\u003e\u003cimg src=\"https://abp.io/assets/favicon.ico/32x32/light-favicon.png\"/\u003e\u003c/a\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003ca href=\"https://abp.io/community/members/alper\"\u003eabp.io/community/members/alper\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \n\u003c/table\u003e\n\n\n# About Project\n\nThis repo is a demonstration of how humans can chat with their data using AI. To prove it works, there are 2 applications. Both are .NET demo projects that answers natural-language questions against a **SQLite** database. They read the live schema, asks an **OpenAI** model to produce SQL, runs the query (with retries if SQL fails), then optionally builds an **Excel** export, a chart as HTML, and suggests follow-up questions. Both projects use `chinook.db`. You can find more info about this database in the [Database section](#Database). Both projects use OpenAI's `gpt-5.4` model. And for the chart creation, they both use [Vega charts](https://github.com/vega/vega). For excel export they use [ClosedXML](https://www.nuget.org/packages/closedxml/). All these components are replacable, I just picked them because they're easy to use and show.\n\nThere are 2 projects in this repo.\n\n* **Chat.Console**: This is the core and actual project. To strip the UI and other non-related stuff I created a simple console app, so that you can focus the real solution. So if you want to understand the pipeline check this one.\n\n* **Talk.Web**: When people see event an amazing idea working in a simple console app, it's not giving the wow effect. That's why I want to show this idea in a web application. But still I kept this project simple and understandable. When you implement in your app you can do better I guess. For more technical info check out [Talk.Web ReadMe](/Talk.Web/README.md). \n\n \n\n  \u003e  AI is not deterministic so, it might change the generated SQL query even you use the same input. So when your query works good, implement a save/load query section in your project. Users can save a query after it successfully runs. They can share the queries among the other users, etc...\n\n# Prerequirements\n\n* Install a **.NET 10** SDK.\n* It's using OpenAI, set your own `OPENAI_API_KEY` environment variable value.\n\n# Run the demo \n\nTo run **Chat.Console** app;\n\n```powershell\ncd Chat.Console\n$env:OPENAI_API_KEY = \"sk-...\"   # session only\ndotnet run\n```\n\n## Demo questions based on Chinook DB\n\n- which artists have the most albums?\n- how many songs are there in each genre?\n- write down the top 3 best-selling songs?\n- which music track is related to festival?\n- which countries generate the most sales, list only top 5?\n- how many invoices were created per month in 2009? Show in YYYY-MM format.\n- What is the monthly revenue trend over the last 24 months?\n- Which are the top 10 genres by total revenue?\n- What is the percentage share of total sales by country?\n- Is there a relationship between number of items per invoice and invoice total amount?\n\n## Application flow pipeline\n\n1. Loads schema from SQLite database. Then caches the schema at the output folder's `Output/db-schema.txt`\n2. User asks a question → model returns `SELECT` only\n3. Runs the generated SQL query\n4. On a failure, automatic retry mechanism works\n5. Prints the table on the terminal window\n6. Writes an Excel file at the output folder's `Output/excel.xlsx`\n7. Generates related chart at the output folder's `Output/chart.html`\n8. Suggests 3 follow-up questions\n\n\nFor debug environment, the output folder is `./bin/Debug/net10.0/Output/` (relative to the process working directory).\n\n\n# Database\n\nIt's using a sample SQLite DB for demo. \nThis database is called **Chinook DB**.\nFor more info about this little DB, read [about-db](about-db.md).\n\n# Issues, Limitations \u0026 Improvements\n\n- For large databases, split the schema into chunks\n- If the table/column names are not user-friendly, use Table/Column comments in the database or create an extra table for more metadata to explain AI what's what. \n\n  - For example you can add comments like this:\n\n    \u003e COMMENT ON TABLE users IS 'Stores application users';\n    \u003e COMMENT ON COLUMN users.email IS 'User primary email address';\n\n  - And read it back like this:\n    \u003e SELECT obj_description('users'::regclass);\n    \u003e SELECT col_description('users'::regclass, 2); -- column position\n- Row-level user permissions are missing, so only power/admin users must use this with the current implementation.\n- Multi-tenancy filtering is absent.\n- I didn't figure out working in microservice architecture for this demo.\n- Need to improve implementation for paged-listing and exporting large set of data.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Febicoglu%2Fchat-with-your-data-conference","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Febicoglu%2Fchat-with-your-data-conference","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Febicoglu%2Fchat-with-your-data-conference/lists"}