ZeeAI1 commited on
Commit
ab73613
·
verified ·
1 Parent(s): 2de96a2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +88 -19
app.py CHANGED
@@ -3,6 +3,7 @@ import json
3
  import uuid
4
  import datetime
5
  import logging
 
6
 
7
  # Setup logging
8
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
@@ -17,6 +18,9 @@ except ImportError:
17
  AutoModelForCausalLM = None
18
  AutoTokenizer = None
19
 
 
 
 
20
  # Initialize AI model (distilbert as placeholder; replace with fine-tuned model or Mistral-7B)
21
  model_name = "distilbert-base-uncased" # Lightweight model for demo
22
  if TRANSFORMERS_AVAILABLE:
@@ -33,7 +37,7 @@ else:
33
  model = None
34
 
35
  # Database setup
36
- conn = sqlite3.connect("erp.db")
37
  cursor = conn.cursor()
38
 
39
  # Create tables
@@ -165,7 +169,7 @@ def generate_journal_entry(prompt, follow_up_response=None):
165
 
166
  # Handle ambiguous payment method
167
  if not payment_method and not follow_up_response:
168
- return {"status": "clarify", "message": "Wonderful, did you buy on credit? (Yes/No)"}
169
 
170
  # Determine credit account
171
  credit_account = None
@@ -245,26 +249,91 @@ def generate_t_account(account_name):
245
 
246
  return t_account
247
 
248
- # Example usage
249
- if __name__ == "__main__":
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
  initialize_chart_of_accounts()
 
 
 
 
 
 
 
251
 
252
- # Test prompt (cash purchase)
253
- prompt = "Bought a laptop for $200 on cash"
254
  result = generate_journal_entry(prompt)
255
- print(result)
 
 
 
 
 
 
 
256
 
257
- # Test prompt (ambiguous payment method)
258
- prompt = "Bought a laptop for $300"
259
- result = generate_journal_entry(prompt)
260
- print(result)
261
- if isinstance(result, dict) and result["status"] == "clarify":
262
- result = generate_journal_entry(prompt, "Yes")
263
- print(result)
 
264
 
265
- # Test T-account
266
- t_account = generate_t_account("Laptop")
267
- print(t_account)
 
 
 
 
268
 
269
- # Clean up
270
- conn.close()
 
3
  import uuid
4
  import datetime
5
  import logging
6
+ from flask import Flask, request, render_template_string, jsonify
7
 
8
  # Setup logging
9
  logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
 
18
  AutoModelForCausalLM = None
19
  AutoTokenizer = None
20
 
21
+ # Initialize Flask app
22
+ app = Flask(__name__)
23
+
24
  # Initialize AI model (distilbert as placeholder; replace with fine-tuned model or Mistral-7B)
25
  model_name = "distilbert-base-uncased" # Lightweight model for demo
26
  if TRANSFORMERS_AVAILABLE:
 
37
  model = None
38
 
39
  # Database setup
40
+ conn = sqlite3.connect("erp.db", check_same_thread=False)
41
  cursor = conn.cursor()
42
 
43
  # Create tables
 
169
 
170
  # Handle ambiguous payment method
171
  if not payment_method and not follow_up_response:
172
+ return {"status": "clarify", "message": "Wonderful, did you buy on credit? (Yes/No)", "original_prompt": prompt}
173
 
174
  # Determine credit account
175
  credit_account = None
 
249
 
250
  return t_account
251
 
252
+ # HTML template for web interface
253
+ HTML_TEMPLATE = """
254
+ <!DOCTYPE html>
255
+ <html>
256
+ <head>
257
+ <title>AI ERP System</title>
258
+ <style>
259
+ body { font-family: Arial, sans-serif; margin: 20px; }
260
+ h1 { color: #333; }
261
+ textarea, input { width: 100%; margin: 10px 0; }
262
+ pre { background: #f4f4f4; padding: 10px; white-space: pre-wrap; }
263
+ .error { color: red; }
264
+ </style>
265
+ </head>
266
+ <body>
267
+ <h1>AI ERP System</h1>
268
+ <h2>Enter Transaction Prompt</h2>
269
+ <form method="POST" action="/process_prompt">
270
+ <textarea name="prompt" rows="4" placeholder="e.g., Bought a laptop for $200 on cash"></textarea>
271
+ <input type="submit" value="Submit Prompt">
272
+ </form>
273
+ {% if result %}
274
+ <h2>Result</h2>
275
+ {% if result.status == 'clarify' %}
276
+ <p>{{ result.message }}</p>
277
+ <form method="POST" action="/process_follow_up">
278
+ <input type="hidden" name="original_prompt" value="{{ result.original_prompt }}">
279
+ <input type="text" name="follow_up" placeholder="Yes/No">
280
+ <input type="submit" value="Submit Response">
281
+ </form>
282
+ {% else %}
283
+ <pre>{{ result }}</pre>
284
+ {% endif %}
285
+ {% endif %}
286
+ <h2>View T-Account</h2>
287
+ <form method="POST" action="/t_account">
288
+ <input type="text" name="account_name" placeholder="e.g., Laptop">
289
+ <input type="submit" value="Generate T-Account">
290
+ </form>
291
+ {% if t_account %}
292
+ <h2>T-Account</h2>
293
+ <pre>{{ t_account }}</pre>
294
+ {% endif %}
295
+ </body>
296
+ </html>
297
+ """
298
+
299
+ # Flask routes
300
+ @app.route("/", methods=["GET", "POST"])
301
+ def index():
302
  initialize_chart_of_accounts()
303
+ return render_template_string(HTML_TEMPLATE, result=None, t_account=None)
304
+
305
+ @app.route("/process_prompt", methods=["POST"])
306
+ def process_prompt():
307
+ prompt = request.form.get("prompt")
308
+ if not prompt:
309
+ return render_template_string(HTML_TEMPLATE, result="No prompt provided.", t_account=None)
310
 
 
 
311
  result = generate_journal_entry(prompt)
312
+ return render_template_string(HTML_TEMPLATE, result=result, t_account=None)
313
+
314
+ @app.route("/process_follow_up", methods=["POST"])
315
+ def process_follow_up():
316
+ original_prompt = request.form.get("original_prompt")
317
+ follow_up = request.form.get("follow_up")
318
+ if not original_prompt or not follow_up:
319
+ return render_template_string(HTML_TEMPLATE, result="Missing prompt or response.", t_account=None)
320
 
321
+ result = generate_journal_entry(original_prompt, follow_up)
322
+ return render_template_string(HTML_TEMPLATE, result=result, t_account=None)
323
+
324
+ @app.route("/t_account", methods=["POST"])
325
+ def t_account():
326
+ account_name = request.form.get("account_name")
327
+ if not account_name:
328
+ return render_template_string(HTML_TEMPLATE, result=None, t_account="No account name provided.")
329
 
330
+ t_account = generate_t_account(account_name)
331
+ return render_template_string(HTML_TEMPLATE, result=None, t_account=t_account)
332
+
333
+ # Run the app
334
+ if __name__ == "__main__":
335
+ # Initialize chart of accounts
336
+ initialize_chart_of_accounts()
337
 
338
+ # Run Flask app (use port 7860 for Hugging Face Spaces)
339
+ app.run(host="0.0.0.0", port=7860, debug=False)