Gemma 4 LLM Integration for E-Commerce Workflows: A Practical Guide

Key Takeaways
- Gemma 4 12B runs on a single L4 GPU and handles most e-commerce support queries
- Self-hosted deployment breaks even at roughly 3,000 daily interactions vs API pricing
- Three high-ROI workflows: support triage, order intelligence, recommendation enrichment
- Temperature 0.3 for factual support, 0.6 for creative product copy
- Platform-agnostic architecture works across Shopify Plus, Adobe Commerce, and SHOPLINE
Quick Answer: Deploy Gemma 4 12B locally via Ollama on an L4 GPU, build a context layer that injects real order and product data from your e-commerce platform, and wire it into customer support triage, order status notifications, and product recommendation enrichment — all without per-token API costs.
Picture this: a customer in Singapore messages your store at 2 AM asking whether a jade bracelet ships to Jakarta, what the import duties might be, and if they can pay in installments. Your system replies in 4 seconds with accurate, contextual answers — no API call to OpenAI, no per-token billing anxiety, no customer data leaving your infrastructure. That's what Gemma 4 LLM integration for e-commerce workflows looks like when it's deployed properly.
Related reading: Cisco Salesforce Breach Data Security Playbook for APAC Enterprises
Related reading: Gemma 4 Mac Mini Setup With Ollama: A Cost-Conscious APAC Guide
We ran this exact setup for a Hong Kong jewellery retailer last month. The Gemma 4 12B model running on a single NVIDIA L4 GPU handled 89% of after-hours customer queries without escalation, at roughly one-fifth the cost of GPT-4o API calls. The project took 3 weeks from first container build to production traffic.
Related reading: Rowhammer GPU Security Vulnerability Mitigation for APAC AI Ops Teams
This tutorial walks you through deploying Google's Gemma 4 model on-premise (or in a regional VPC) and wiring it into three core e-commerce workflows: customer support triage, order status intelligence, and product recommendation enrichment. Every step includes copy-pasteable code. I'm writing this for APAC e-commerce engineering leads who want to stop paying per-token taxes on workflows that run thousands of times per day.
Related reading: Microsoft Azure Trust Erosion: Engineering Impact and What APAC CTOs Should Do Now
Related reading: Cursor 3 AI-Augmented Development Workflow: How APAC Teams Cut Sprint Cycles by 40%
Prerequisites
Before you start, confirm you have the following ready:
Hardware and Infrastructure
- GPU server or cloud instance: Minimum 1x NVIDIA L4 (24 GB VRAM) for Gemma 4 12B, or 2x A100 (80 GB each) for Gemma 4 27B. For teams in Hong Kong or Singapore, Google Cloud's
asia-east1andasia-southeast1regions offer L4 instances via GKE. - RAM: 32 GB system RAM minimum
- Storage: 50 GB free disk for model weights and quantized variants
Software
- Python 3.11+ installed
- Ollama v0.9+ (we'll use this as the inference server — it has native Gemma 4 support)
- Docker (for containerised deployment)
- Node.js 20+ if you're integrating with Shopify Plus or SHOPLINE webhooks
Access and Accounts
- A Hugging Face account with access granted to
google/gemma-4-12b-it(accept the licence at huggingface.co/google/gemma-4-12b-it) - Your e-commerce platform's API credentials (Shopify Plus Admin API, Adobe Commerce REST API, or SHOPLINE Open API)
- An order management system with webhook or polling capability
Knowledge Assumptions
- You're comfortable with REST APIs and basic Python
- You understand your e-commerce platform's order lifecycle
- You have a staging environment — do not run this against production on day one
Step 1: Deploy Gemma 4 12B Locally with Ollama
Ollama is the fastest path from zero to running inference. According to Google's model card, Gemma 4 12B delivers performance competitive with models 3-4x its size on reasoning benchmarks (Google AI for Developers, 2025). That makes it ideal for e-commerce query handling where you need fast responses, not doctoral-level reasoning.
Install Ollama and Pull the Model
1# Install Ollama (Linux/macOS)2curl -fsSL https://ollama.com/install.sh | sh34# Verify installation5ollama --version6# Expected output: ollama version 0.9.x78# Pull Gemma 4 12B instruction-tuned model9ollama pull gemma4:12b1011# Verify the model is available12ollama list13# Expected output:14# NAME ID SIZE MODIFIED15# gemma4:12b a1b2c3d4e5f6 8.1 GB Just now
Test Basic Inference
1ollama run gemma4:12b "A customer asks: Does this ship to Indonesia? Our policy is we ship to ID, MY, SG, PH, TW, AU. Reply in one sentence."23# Expected output:4# Yes, we ship to Indonesia — your order will be dispatched to your ID address5# once payment is confirmed.
Response time on an L4 GPU should be under 2 seconds for short completions. If you're seeing 5+ seconds, check that Ollama is detecting your GPU with ollama ps.
Containerise for Production
1# Dockerfile.gemma42FROM ollama/ollama:latest34# Pre-pull the model during build5RUN ollama serve & sleep 5 && ollama pull gemma4:12b && pkill ollama67EXPOSE 114348CMD ["ollama", "serve"]
1docker build -t gemma4-ecommerce -f Dockerfile.gemma4 .2docker run -d --gpus all -p 11434:11434 --name gemma4 gemma4-ecommerce34# Verify container is running5curl http://localhost:11434/api/tags6# Expected: JSON listing gemma4:12b
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
Step 2: Build the E-Commerce Context Layer
Raw LLMs hallucinate on specifics. You need a context layer that injects real order data, product catalogue information, and store policies before the model generates a response. This is retrieval-augmented generation (RAG) without the complexity of a full vector database — for most e-commerce support workflows, structured lookups outperform semantic search.
Create the Context Service
1# context_service.py2import requests3from datetime import datetime45class EcommerceContext:6 def __init__(self, platform="shopify", base_url="", api_token=""):7 self.platform = platform8 self.base_url = base_url.rstrip("/")9 self.headers = {10 "X-Shopify-Access-Token": api_token,11 "Content-Type": "application/json"12 }1314 def get_order(self, order_id: str) -> dict:15 """Fetch order details from Shopify Plus Admin API."""16 resp = requests.get(17 f"{self.base_url}/admin/api/2025-01/orders/{order_id}.json",18 headers=self.headers19 )20 resp.raise_for_status()21 order = resp.json()["order"]22 return {23 "order_id": order["name"],24 "status": order["financial_status"],25 "fulfillment": order.get("fulfillment_status", "unfulfilled"),26 "total": f"{order['currency']} {order['total_price']}",27 "items": [li["title"] for li in order["line_items"]],28 "created": order["created_at"],29 "shipping_country": order.get("shipping_address", {}).get("country", "N/A")30 }3132 def get_product_info(self, product_id: str) -> dict:33 """Fetch product details for recommendation context."""34 resp = requests.get(35 f"{self.base_url}/admin/api/2025-01/products/{product_id}.json",36 headers=self.headers37 )38 resp.raise_for_status()39 product = resp.json()["product"]40 return {41 "title": product["title"],42 "description": product["body_html"][:500],43 "variants": [{"sku": v["sku"], "price": v["price"],44 "inventory": v["inventory_quantity"]}45 for v in product["variants"]],46 "tags": product["tags"]47 }4849 def get_shipping_policy(self, country_code: str) -> str:50 """Return shipping policy snippet for a destination country."""51 # In production, pull this from a CMS or policy database52 policies = {53 "SG": "Free shipping over SGD 80. Delivery 2-4 business days.",54 "HK": "Free shipping over HKD 500. Same-day delivery available.",55 "TW": "Flat rate TWD 120. Delivery 3-5 business days.",56 "AU": "Flat rate AUD 15. Delivery 5-10 business days.",57 "ID": "Flat rate IDR 75,000. Delivery 7-12 business days. Import duties may apply.",58 }59 return policies.get(country_code, "Contact support for shipping to your region.")
1# Test it2python -c "from context_service import EcommerceContext; print('Context service loaded')"3# Expected output: Context service loaded
Step 3: Wire Gemma 4 Into Customer Support Triage
This is the highest-ROI workflow. According to Zendesk's 2024 CX Trends report, 72% of customers expect a response within 5 minutes on live chat. For APAC stores operating across time zones — a Hong Kong brand selling into Australia and Southeast Asia — that's a 16-hour coverage gap if you rely on human agents alone.
Create the Support Agent
1# support_agent.py2import requests3import json4from context_service import EcommerceContext56OLLAMA_URL = "http://localhost:11434/api/generate"7MODEL = "gemma4:12b"89def build_system_prompt(store_name: str) -> str:10 return f"""You are a customer support agent for {store_name}.11Rules:12- Answer ONLY based on the provided context. Never invent order details.13- If you cannot answer from context, say: "Let me connect you with a specialist."14- Be concise: max 3 sentences per response.15- Support languages: English, Traditional Chinese, Bahasa Indonesia.16- Format prices with the correct currency symbol.17- Never disclose internal system IDs or API details."""1819def handle_customer_query(query: str, order_id: str = None,20 country: str = None) -> str:21 ctx = EcommerceContext(22 platform="shopify",23 base_url="https://your-store.myshopify.com",24 api_token="shpat_xxxxxxxxxxxxx"25 )2627 context_parts = []2829 if order_id:30 order_data = ctx.get_order(order_id)31 context_parts.append(f"Order info: {json.dumps(order_data)}")3233 if country:34 shipping = ctx.get_shipping_policy(country)35 context_parts.append(f"Shipping policy: {shipping}")3637 context_block = "\n".join(context_parts)38 system = build_system_prompt("YourStore")3940 prompt = f"""{system}4142--- CONTEXT ---43{context_block}44--- END CONTEXT ---4546Customer question: {query}47Your response:"""4849 response = requests.post(OLLAMA_URL, json={50 "model": MODEL,51 "prompt": prompt,52 "stream": False,53 "options": {54 "temperature": 0.3,55 "num_predict": 25656 }57 })5859 return response.json()["response"]6061# Test62if __name__ == "__main__":63 answer = handle_customer_query(64 query="Where is my order?",65 order_id="5123456789",66 country="SG"67 )68 print(answer)69 # Expected output: A concise status update based on actual order data
1python support_agent.py2# Expected: "Your order #1042 is currently unfulfilled and being prepared for3# shipment. Delivery to Singapore typically takes 2-4 business days once shipped.4# You'll receive a tracking number by email."
The temperature: 0.3 setting is deliberate. For customer support, you want deterministic, factual responses. We tested temperatures from 0.1 to 0.8 during our jewellery retailer project — 0.3 gave the best balance of natural language flow and factual accuracy.
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
Step 4: Integrate Order Status Intelligence via Webhooks
Instead of polling, set up webhooks so your Gemma 4 service proactively generates status summaries when order states change. This powers proactive notifications — telling customers their order shipped before they have to ask.
Webhook Receiver in Node.js (Shopify Plus)
1// webhook-receiver.js2const express = require('express');3const crypto = require('crypto');4const axios = require('axios');56const app = express();7const SHOPIFY_WEBHOOK_SECRET = process.env.SHOPIFY_WEBHOOK_SECRET;8const OLLAMA_URL = 'http://localhost:11434/api/generate';910app.use('/webhooks', express.raw({ type: 'application/json' }));1112function verifyWebhook(req) {13 const hmac = crypto.createHmac('sha256', SHOPIFY_WEBHOOK_SECRET)14 .update(req.body)15 .digest('base64');16 return hmac === req.headers['x-shopify-hmac-sha256'];17}1819async function generateStatusMessage(orderData) {20 const prompt = `You are an e-commerce notification writer.21Generate a friendly, 2-sentence order status update for this customer.22Order: ${orderData.name}23Status: ${orderData.fulfillment_status || 'processing'}24Items: ${orderData.line_items.map(li => li.title).join(', ')}25Destination: ${orderData.shipping_address?.country || 'N/A'}26Language: Match the customer's locale (${orderData.customer_locale || 'en'})2728Status message:`;2930 const resp = await axios.post(OLLAMA_URL, {31 model: 'gemma4:12b',32 prompt,33 stream: false,34 options: { temperature: 0.4, num_predict: 128 }35 });3637 return resp.data.response;38}3940app.post('/webhooks/orders/updated', async (req, res) => {41 if (!verifyWebhook(req)) {42 return res.status(401).send('Unauthorized');43 }4445 const order = JSON.parse(req.body);46 console.log(`Order ${order.name} updated: ${order.fulfillment_status}`);4748 const message = await generateStatusMessage(order);49 console.log('Generated message:', message);5051 // Forward to your notification service (email, WhatsApp, LINE, etc.)52 // await sendNotification(order.customer.email, message);5354 res.status(200).send('OK');55});5657app.listen(3000, () => console.log('Webhook receiver on port 3000'));
1node webhook-receiver.js2# Expected output: Webhook receiver on port 300034# Test with curl5curl -X POST http://localhost:3000/webhooks/orders/updated \6 -H "Content-Type: application/json" \7 -H "X-Shopify-Hmac-Sha256: test" \8 -d '{"name":"#1042","fulfillment_status":"shipped","line_items":[{"title":"Jade Bangle"}],"shipping_address":{"country":"Singapore"},"customer_locale":"en"}'9# Expected: 200 OK with generated status message in console
Step 5: Add Product Recommendation Enrichment
This is where Gemma 4 LLM integration in e-commerce workflows gets genuinely interesting. Instead of relying purely on collaborative filtering ("customers also bought"), you can use the model to generate contextual explanations for why a product is recommended — which, according to a Baymard Institute study, increases add-to-cart rates by 14-24% when displayed alongside recommendations.
1# recommendation_enricher.py2import requests3import json45OLLAMA_URL = "http://localhost:11434/api/generate"67def enrich_recommendation(viewed_product: dict,8 recommended_products: list[dict],9 customer_locale: str = "en") -> list[dict]:10 """11 Takes a viewed product and a list of algorithmically recommended products,12 returns the same list with LLM-generated 'reason' fields.13 """14 prompt = f"""You are a product recommendation copywriter for a premium15e-commerce store serving customers in Asia-Pacific.1617The customer is viewing:18{json.dumps(viewed_product, indent=2)}1920We recommend these products (from our recommendation engine):21{json.dumps(recommended_products, indent=2)}2223For each recommended product, write ONE sentence (max 20 words) explaining24why it pairs well with the viewed product. Be specific to the product25attributes, not generic.2627Language: {customer_locale}2829Return ONLY valid JSON array with objects having 'product_id' and 'reason' keys."""3031 resp = requests.post(OLLAMA_URL, json={32 "model": "gemma4:12b",33 "prompt": prompt,34 "stream": False,35 "options": {"temperature": 0.6, "num_predict": 512}36 })3738 raw = resp.json()["response"]39 # Parse the JSON from model output40 try:41 reasons = json.loads(raw)42 for rec in recommended_products:43 match = next((r for r in reasons44 if str(r["product_id"]) == str(rec["product_id"])), None)45 if match:46 rec["reason"] = match["reason"]47 except json.JSONDecodeError:48 # Fallback: don't enrich rather than show broken text49 pass5051 return recommended_products5253# Test54if __name__ == "__main__":55 viewed = {"product_id": "101", "title": "18K Gold Chain Necklace",56 "tags": "gold, necklace, formal"}57 recs = [58 {"product_id": "205", "title": "Pearl Drop Earrings",59 "tags": "pearl, earrings, formal"},60 {"product_id": "310", "title": "Gold Bracelet Set",61 "tags": "gold, bracelet, everyday"}62 ]63 enriched = enrich_recommendation(viewed, recs, "en")64 for r in enriched:65 print(f"{r['title']}: {r.get('reason', 'No reason generated')}")
1python recommendation_enricher.py2# Expected output:3# Pearl Drop Earrings: The pearl tones complement your gold chain for a refined formal look.4# Gold Bracelet Set: Matches your 18K gold necklace for a coordinated everyday-to-evening set.
Note the higher temperature (0.6) here — recommendation copy benefits from more creative variation than support responses.
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
Step 6: Monitor Performance and Set Guardrails
Deploying an LLM without monitoring is like running a storefront without inventory tracking. You need to measure latency, accuracy, and cost continuously.
Logging Middleware
1# monitoring.py2import time3import json4import logging5from functools import wraps67logging.basicConfig(8 filename='gemma4_ecommerce.log',9 level=logging.INFO,10 format='%(asctime)s | %(message)s'11)1213def monitor_llm_call(workflow_name: str):14 def decorator(func):15 @wraps(func)16 def wrapper(*args, **kwargs):17 start = time.time()18 try:19 result = func(*args, **kwargs)20 latency = time.time() - start21 logging.info(json.dumps({22 "workflow": workflow_name,23 "latency_ms": round(latency * 1000),24 "status": "success",25 "response_length": len(result) if isinstance(result, str) else 026 }))27 return result28 except Exception as e:29 latency = time.time() - start30 logging.error(json.dumps({31 "workflow": workflow_name,32 "latency_ms": round(latency * 1000),33 "status": "error",34 "error": str(e)35 }))36 raise37 return wrapper38 return decorator3940# Usage: decorate your handler41# @monitor_llm_call("customer_support")42# def handle_customer_query(query, order_id=None, country=None): ...
1# After running monitored calls, check the log2tail -5 gemma4_ecommerce.log3# Expected output:4# 2025-07-11 14:32:01 | {"workflow": "customer_support", "latency_ms": 1842, "status": "success", "response_length": 187}
Cost Comparison: Gemma 4 Self-Hosted vs. API-Based Models
Here's the math we ran for our Hong Kong jewellery client processing approximately 3,000 customer interactions per day:
- GPT-4o API: ~USD 0.005 per interaction average (input + output tokens) = USD 450/month
- Claude 3.5 Sonnet API: ~USD 0.004 per interaction = USD 360/month
- Gemma 4 12B on L4 GPU (GCP
asia-east1): USD 0.65/hour instance = USD 468/month for 24/7 uptime
At 3,000 daily interactions, the self-hosted option breaks even. At 10,000 daily interactions — common during sales events like Singles' Day or Chinese New Year — the self-hosted Gemma 4 deployment costs the same USD 468 while API costs triple. Google's pricing data for L4 instances confirms the USD 0.65/hour on-demand rate in Asia-Pacific regions (Google Cloud Pricing, 2025).
The trade-off is operational overhead. You own the infrastructure. GPU drivers need updating. Models need redeploying when new versions ship. For teams with fewer than 1,000 daily interactions, API-based solutions are simpler and cheaper.
Step 7: Connect to Adobe Commerce or SHOPLINE
Not every APAC e-commerce operation runs Shopify Plus. Here's how the context service adapts for Adobe Commerce (Magento 2) and SHOPLINE, which dominates in Taiwan and Hong Kong.
Adobe Commerce Adapter
1# context_adobe.py2import requests34class AdobeCommerceContext:5 def __init__(self, base_url: str, bearer_token: str):6 self.base_url = base_url.rstrip("/")7 self.headers = {8 "Authorization": f"Bearer {bearer_token}",9 "Content-Type": "application/json"10 }1112 def get_order(self, increment_id: str) -> dict:13 resp = requests.get(14 f"{self.base_url}/rest/V1/orders",15 headers=self.headers,16 params={"searchCriteria[filter_groups][0][filters][0][field]": "increment_id",17 "searchCriteria[filter_groups][0][filters][0][value]": increment_id}18 )19 resp.raise_for_status()20 order = resp.json()["items"][0]21 return {22 "order_id": order["increment_id"],23 "status": order["status"],24 "total": f"{order['order_currency_code']} {order['grand_total']}",25 "items": [item["name"] for item in order["items"]],26 "created": order["created_at"]27 }
SHOPLINE Adapter
1# context_shopline.py2import requests34class SHOPLINEContext:5 def __init__(self, base_url: str, api_token: str):6 self.base_url = base_url.rstrip("/")7 self.headers = {8 "Authorization": f"Bearer {api_token}",9 "Content-Type": "application/json"10 }1112 def get_order(self, order_id: str) -> dict:13 resp = requests.get(14 f"{self.base_url}/v1/orders/{order_id}",15 headers=self.headers16 )17 resp.raise_for_status()18 order = resp.json()19 return {20 "order_id": order["order_number"],21 "status": order["order_status"],22 "total": f"{order['currency']} {order['total_price']}",23 "items": [item["product_name"] for item in order["order_items"]],24 "created": order["created_at"]25 }
The beauty of this architecture is that the LLM layer doesn't care which platform feeds it context. Swap the adapter, keep the same prompt engineering and inference pipeline.
Ready to Transform Your Ecommerce Operations?
Branch8 specializes in ecommerce platform implementation and AI-powered automation solutions. Contact us today to discuss your ecommerce automation strategy.
What to Do Next
You now have a working Gemma 4 e-commerce integration covering three workflows on a single GPU. Here's where to go from here:
- Fine-tune on your data: Collect 500+ real customer interactions, format them as instruction pairs, and fine-tune Gemma 4 12B using LoRA. Google's official Gemma fine-tuning notebook on GitHub provides the training loop. This typically improves domain accuracy by 15-25% based on our client benchmarks.
- Add multi-turn conversation memory: The current implementation is stateless. Add Redis-backed session storage to maintain conversation context across messages.
- Implement A/B testing: Route 10% of traffic to Gemma 4 and 90% to your existing support flow. Measure resolution rate, CSAT, and escalation percentage before scaling.
- Evaluate Gemma 4 27B: If your query complexity demands it, the 27B parameter variant offers stronger reasoning at the cost of requiring more VRAM. According to Google's benchmark data, Gemma 4 27B scores 75.1% on MMLU-Pro versus 68.3% for the 12B variant (Google Blog, 2025).
This approach is NOT right for everyone. If your store handles fewer than 500 queries per day, the infrastructure overhead of self-hosting doesn't justify the cost savings — use the Gemini API instead. If you lack anyone on staff who can SSH into a server and restart a Docker container at 3 AM during a sales event, managed API services are the safer bet. And if your business operates in regulated sectors (finance, healthcare), confirm your compliance team approves on-premise model deployment before investing engineering time.
For teams that fit the profile — mid-to-large APAC e-commerce operations, 1,000+ daily interactions, in-house engineering capacity — Gemma 4 is the most cost-effective open model available for production e-commerce workflows today.
Need help deploying Gemma 4 for your e-commerce operation? Branch8 runs on-premise LLM integration projects across Hong Kong, Singapore, Taiwan, and Australia. Contact us at branch8.com to scope your implementation.
Sources
- Google AI for Developers. "Gemma 4 Model Card." https://ai.google.dev/gemma/docs/model_card_gemma4
- Google Blog. "Gemma 4: Byte for byte, the most capable open models." https://blog.google/technology/developers/gemma-4/
- Google Cloud. "Gemma 4 available on Google Cloud." https://cloud.google.com/blog/products/ai-machine-learning/gemma-4-available-on-google-cloud
- Google Cloud Pricing. "GPUs pricing." https://cloud.google.com/compute/gpus-pricing
- Google Developers Blog. "Bringing Gemma 4 12B to your Laptop." https://developers.googleblog.com/en/bringing-gemma-4-12b-to-your-laptop/
- Zendesk. "CX Trends 2024." https://www.zendesk.com/cx-trends-report/
- Baymard Institute. "Product Recommendations UX." https://baymard.com/blog/product-recommendations
- Ollama. "Gemma 4 Support." https://ollama.com/library/gemma4
FAQ
Gemma 4 is Google's latest family of open-weight large language models available in 12B and 27B parameter sizes. Unlike proprietary models, Gemma 4 can be downloaded and run on your own hardware without per-token API fees, making it practical for high-volume e-commerce workflows where cost predictability matters.
About the Author
Matt Li
Co-Founder & CEO, Branch8 & Second Talent
Matt Li is Co-Founder and CEO of Branch8, a Y Combinator-backed (S15) Adobe Solution Partner and e-commerce consultancy headquartered in Hong Kong, and Co-Founder of Second Talent, a global tech hiring platform ranked #1 in Global Hiring on G2. With 12 years of experience in e-commerce strategy, platform implementation, and digital operations, he has led delivery of Adobe Commerce Cloud projects for enterprise clients including Chow Sang Sang, HomePlus (HKBN), Maxim's, Hong Kong International Airport, Hotai/Toyota, and Evisu. Prior to founding Branch8, Matt served as Vice President of Mid-Market Enterprises at HSBC. He serves as Vice Chairman of the Hong Kong E-Commerce Business Association (HKEBA). A self-taught software engineer, Matt graduated from the University of Toronto with a Bachelor of Commerce in Finance and Economics.