Skip to Content

GIFI_BAL

Overview

The GIFI_BAL function assigns a GIFI (General Index of Financial Information) code to each row of a balance sheet financial statement [PDF version]. It takes as input either a 2D list (where each row is a label or a [label, value] pair) or a scalar string (a single label), and returns a column of strings with the suggested GIFI code for each input row. The function uses an AI model to select the most appropriate GIFI code from the list of asset codes (inlined from the GIFI table), or returns an empty string if it is unsure or if the input is not a financial statement row label (e.g., blank, separator, note).

This example function is provided as-is without any representation of accuracy.

Usage

To use the function in Excel:

=GIFI_BAL(input)
  • input (2D list or string, required): A balance sheet as a 2D list (each row is a label or [label, value]) or a single label as a string.

The function returns a column (2D list) of two strings per row: the first is the suggested GIFI code, and the second is the corresponding description for each input row. If no code is assigned, both values are empty strings.

Examples

Example 1: Simple Asset Labels

Inputs:

input
Cash
Accounts Receivable
Inventory
Prepaid Expenses

Excel formula:

=GIFI_BAL({"Cash";"Accounts Receivable";"Inventory";"Prepaid Expenses"})

Expected output:

CodeDescription
1001Current Assets: Cash
1060Current Assets: Accounts receivable
1120Current Assets: Inventories
1484Current Assets: Prepaid expenses

Example 2: Asset Labels with Values

Inputs:

input
Cash100
Accounts Receivable200
Inventory300
Prepaid Expenses400

Excel formula:

=GIFI_BAL({{"Cash",100};{"Accounts Receivable",200};{"Inventory",300};{"Prepaid Expenses",400}})

Expected output:

CodeDescription
1001Current Assets: Cash
1060Current Assets: Accounts receivable
1120Current Assets: Inventories
1484Current Assets: Prepaid expenses

Example 3: Non-asset or Blank Rows

Inputs:

input
Total Assets
Note 1
Cash

Excel formula:

=GIFI_BAL({"";"Total Assets";"Note 1";"Cash"})

Expected output:

CodeDescription
2599Long-term Assets: Total assets
1001Current Assets: Cash

Example 4: Single Label as Scalar

Inputs:

input
Inventory

Excel formula:

=GIFI_BAL("Inventory")

Expected output:

CodeDescription
1120Current Assets: Inventories

Python Code

import requests import json # Inlined GIFI codes GIFI_CODES = { "1000": "Current Assets: Cash and deposits", "1001": "Current Assets: Cash", "1002": "Current Assets: Deposits in Canadian banks and institutions – Canadian currency", "1003": "Current Assets: Deposits in Canadian banks and institutions – Foreign currency", "1004": "Current Assets: Deposits in foreign banks – Canadian currency", "1005": "Current Assets: Deposits in foreign banks – Foreign currency", "1006": "Current Assets: Credit union central deposits", "1007": "Current Assets: Other cash-like instruments", "1060": "Current Assets: Accounts receivable", "1061": "Current Assets: Allowance for doubtful accounts", "1062": "Current Assets: Trade accounts receivable", "1063": "Current Assets: Allowance for doubtful trade accounts receivable", "1064": "Current Assets: Trade accounts receivable from related parties", "1065": "Current Assets: Allowance for doubtful trade accounts receivable from related parties", "1066": "Current Assets: Taxes receivable", "1067": "Current Assets: Interest receivable", "1068": "Current Assets: Holdbacks receivable", "1069": "Current Assets: Leases receivable", "1070": "Current Assets: Allowance for doubtful amounts contained in leases receivable", "1071": "Current Assets: Accounts receivable from employees", "1072": "Current Assets: Allowance for doubtful accounts receivable from employees", "1073": "Current Assets: Amounts receivable from members of NPOs", "1120": "Current Assets: Inventories", "1121": "Current Assets: Inventory of goods for sale", "1122": "Current Assets: Inventory parts and supplies", "1123": "Current Assets: Inventory properties", "1124": "Current Assets: Inventory of aggregates", "1125": "Current Assets: Work in progress", "1126": "Current Assets: Raw materials", "1127": "Current Assets: Inventory of securities", "1180": "Current Assets: Short-term investments", "1181": "Current Assets: Canadian term deposits", "1182": "Current Assets: Canadian shares", "1183": "Current Assets: Canadian bonds", "1184": "Current Assets: Canadian treasury bills", "1185": "Current Assets: Securities purchased under resale agreements", "1186": "Current Assets: Other short-term Canadian investments", "1187": "Current Assets: Short-term foreign investments", "1240": "Current Assets: Loans and notes receivable", "1241": "Current Assets: Demand loans receivable", "1242": "Current Assets: Other loans receivable", "1243": "Current Assets: Notes receivable", "1244": "Current Assets: Mortgages receivable", "1300": "Current Assets: Due from shareholder(s)/director(s)", "1301": "Current Assets: Due from individual shareholder(s)", "1302": "Current Assets: Due from corporate shareholder(s)", "1303": "Current Assets: Due from director(s)", "1310": "Current Assets: Due from member(s)/general partner(s)", "1311": "Current Assets: Due from limited partners", "1312": "Current Assets: Due from members that are partnerships", "1313": "Current Assets: Due from general partners", "1314": "Current Assets: Due from specified members who are not limited partners", "1360": "Current Assets: Investment in joint venture(s)/partnership(s)", "1380": "Current Assets: Due from joint venture(s)/partnership(s)", "1400": "Current Assets: Due from/investment in related parties", "1401": "Current Assets: Demand notes from related parties", "1402": "Current Assets: Interest receivable from related parties", "1403": "Current Assets: Loans/advances due from related parties", "1460": "Current Assets: Customers' liability under acceptances", "1480": "Current Assets: Other current assets", "1481": "Current Assets: Future (deferred) income taxes", "1482": "Current Assets: Accrued investment income", "1483": "Current Assets: Taxes recoverable/refundable", "1484": "Current Assets: Prepaid expenses", "1485": "Current Assets: Drilling advances", "1486": "Current Assets: Security/tender deposits", "1599": "Current Assets: Total current assets", "1600": "Capital Assets: Land", "1601": "Capital Assets: Land improvements", "1602": "Capital Assets: Accumulated amortization of land improvements", "1620": "Capital Assets: Depletable assets", "1621": "Capital Assets: Accumulated amortization of depletable assets", "1622": "Capital Assets: Petroleum and natural gas properties", "1623": "Capital Assets: Accumulated amortization of petroleum and natural gas properties", "1624": "Capital Assets: Mining properties", "1625": "Capital Assets: Accumulated amortization of mining properties", "1626": "Capital Assets: Deferred exploration and development charges", "1627": "Capital Assets: Accumulated amortization of deferred exploration and development charges", "1628": "Capital Assets: Quarries", "1629": "Capital Assets: Accumulated amortization of quarries", "1630": "Capital Assets: Gravel pits", "1631": "Capital Assets: Accumulated amortization of gravel pits", "1632": "Capital Assets: Timber limits", "1633": "Capital Assets: Accumulated amortization of timber limits", "1680": "Capital Assets: Buildings", "1681": "Capital Assets: Accumulated amortization of buildings", "1682": "Capital Assets: Manufacturing and processing plant", "1683": "Capital Assets: Accumulated amortization of manufacturing and processing plant", "1684": "Capital Assets: Buildings under construction", "1740": "Capital Assets: Machinery, equipment, furniture, and fixtures", "1741": "Capital Assets: Accumulated amortization of machinery, equipment, furniture, and fixtures", "1742": "Capital Assets: Motor vehicles", "1743": "Capital Assets: Accumulated amortization of motor vehicles", "1744": "Capital Assets: Tools and dies", "1745": "Capital Assets: Accumulated amortization of tools and dies", "1746": "Capital Assets: Construction and excavating equipment", "1747": "Capital Assets: Accumulated amortization of construction and excavating equipment", "1748": "Capital Assets: Forestry and logging equipment", "1749": "Capital Assets: Accumulated amortization of forestry and logging equipment", "1750": "Capital Assets: Fishing gear and nets", "1751": "Capital Assets: Accumulated amortization of fishing gear and nets", "1752": "Capital Assets: Mining equipment", "1753": "Capital Assets: Accumulated amortization of mining equipment", "1754": "Capital Assets: Oil and gas systems", "1755": "Capital Assets: Accumulated amortization of oil and gas systems", "1756": "Capital Assets: Production equipment for resource industries", "1757": "Capital Assets: Accumulated amortization of production equipment for resource industries", "1758": "Capital Assets: Production equipment for other than resource industries", "1759": "Capital Assets: Accumulated amortization of production equipment for other than resource industries", "1760": "Capital Assets: Exploration equipment", "1761": "Capital Assets: Accumulated amortization of exploration equipment", "1762": "Capital Assets: Shipping equipment", "1763": "Capital Assets: Accumulated amortization of shipping equipment", "1764": "Capital Assets: Ships and boats", "1765": "Capital Assets: Accumulated amortization of ships and boats", "1766": "Capital Assets: Aircraft", "1767": "Capital Assets: Accumulated amortization of aircraft", "1768": "Capital Assets: Signs", "1769": "Capital Assets: Accumulated amortization of signs", "1770": "Capital Assets: Small tools", "1771": "Capital Assets: Accumulated amortization of small tools", "1772": "Capital Assets: Radio and communication equipment", "1773": "Capital Assets: Accumulated amortization of radio and communication equipment", "1774": "Capital Assets: Computer equipment/software", "1775": "Capital Assets: Accumulated amortization of computer equipment/software", "1776": "Capital Assets: Musical instruments", "1777": "Capital Assets: Accumulated amortization of musical instruments", "1778": "Capital Assets: Satellites", "1779": "Capital Assets: Accumulated amortization of satellites", "1780": "Capital Assets: Earth stations", "1781": "Capital Assets: Accumulated amortization of earth stations", "1782": "Capital Assets: Machinery and equipment under construction", "1783": "Capital Assets: Transportation equipment", "1784": "Capital Assets: Accumulated amortization of transportation equipment", "1785": "Capital Assets: Other machinery and equipment", "1786": "Capital Assets: Accumulated amortization of other machinery and equipment", "1787": "Capital Assets: Furniture and fixtures", "1788": "Capital Assets: Accumulated amortization of furniture and fixtures", "1900": "Capital Assets: Other tangible capital assets", "1901": "Capital Assets: Accumulated amortization of other tangible capital assets", "1902": "Capital Assets: Logging roads", "1903": "Capital Assets: Accumulated amortization of logging roads", "1904": "Capital Assets: Asphalt and parking areas", "1905": "Capital Assets: Accumulated amortization of asphalt and parking areas", "1906": "Capital Assets: Wharves", "1907": "Capital Assets: Accumulated amortization of wharves", "1908": "Capital Assets: Fences", "1909": "Capital Assets: Accumulated amortization of fences", "1910": "Capital Assets: Capital leases – Buildings", "1911": "Capital Assets: Accumulated amortization of capital leases – Buildings", "1912": "Capital Assets: Capital leases – Equipment", "1913": "Capital Assets: Accumulated amortization of capital leases – Equipment", "1914": "Capital Assets: Capital leases – Vehicles", "1915": "Capital Assets: Accumulated amortization of capital leases – Vehicles", "1916": "Capital Assets: Capital leases – Others", "1917": "Capital Assets: Accumulated amortization of capital leases – Others", "1918": "Capital Assets: Leasehold improvements", "1919": "Capital Assets: Accumulated amortization of leasehold improvements", "1920": "Capital Assets: Other capital assets under construction", "1921": "Capital Assets: Campsites", "1922": "Capital Assets: Accumulated amortization of campsites", "2008": "Capital Assets: Total tangible capital assets", "2009": "Capital Assets: Total accumulated amortization of tangible capital assets", "2010": "Intangible Capital Assets: Intangible assets", "2011": "Intangible Capital Assets: Accumulated amortization of intangible assets", "2012": "Intangible Capital Assets: Goodwill", "2013": "Intangible Capital Assets: Accumulated amortization of goodwill", "2014": "Intangible Capital Assets: Quota", "2015": "Intangible Capital Assets: Accumulated amortization of quota", "2016": "Intangible Capital Assets: Licences", "2017": "Intangible Capital Assets: Accumulated amortization of licences", "2018": "Intangible Capital Assets: Incorporation costs", "2019": "Intangible Capital Assets: Accumulated amortization of incorporation costs", "2020": "Intangible Capital Assets: Trademarks/patents", "2021": "Intangible Capital Assets: Accumulated amortization of trademarks/patents", "2022": "Intangible Capital Assets: Customer lists", "2023": "Intangible Capital Assets: Accumulated amortization of customer lists", "2024": "Intangible Capital Assets: Rights", "2025": "Intangible Capital Assets: Accumulated amortization of rights", "2026": "Intangible Capital Assets: Research and development", "2027": "Intangible Capital Assets: Accumulated amortization of research and development", "2070": "Intangible Capital Assets: Resource rights", "2071": "Intangible Capital Assets: Accumulated amortization of resource rights", "2072": "Intangible Capital Assets: Timber rights", "2073": "Intangible Capital Assets: Accumulated amortization of timber rights", "2074": "Intangible Capital Assets: Mining rights", "2075": "Intangible Capital Assets: Accumulated amortization of mining rights", "2076": "Intangible Capital Assets: Oil and gas rights", "2077": "Intangible Capital Assets: Accumulated amortization of oil and gas rights", "2178": "Intangible Capital Assets: Total intangible capital assets", "2179": "Intangible Capital Assets: Total accumulated amortization of intangible capital assets", "2180": "Long-term Assets: Due from shareholder(s)/director(s)", "2181": "Long-term Assets: Due from individual shareholder(s)", "2182": "Long-term Assets: Due from corporate shareholder(s)", "2183": "Long-term Assets: Due from director(s)", "2190": "Long-term Assets: Due from members", "2200": "Long-term Assets: Investment in joint venture(s)/partnership(s)", "2210": "Long-term Assets: Due from member(s)/general partner(s)", "2211": "Long-term Assets: Due from limited partners", "2212": "Long-term Assets: Due from members that are partnerships", "2213": "Long-term Assets: Due from general partners", "2214": "Long-term Assets: Due from specified members who are not limited partners", "2220": "Long-term Assets: Due from joint venture(s)/partnership(s)", "2240": "Long-term Assets: Due from/investment in related parties", "2241": "Long-term Assets: Due from/investment in Canadian related parties", "2242": "Long-term Assets: Shares in Canadian related corporations", "2243": "Long-term Assets: Loans/advances to Canadian related corporations", "2244": "Long-term Assets: Investment in Canadian related corporations at cost", "2245": "Long-term Assets: Investment in Canadian related corporations at equity", "2246": "Long-term Assets: Due from/investment in foreign related parties", "2247": "Long-term Assets: Shares in foreign related corporations", "2248": "Long-term Assets: Loans/advances to foreign related corporations", "2249": "Long-term Assets: Investment in foreign related corporations at cost", "2250": "Long-term Assets: Investment in foreign related corporations at equity", "2280": "Long-term Assets: Investment in co-tenancy", "2300": "Long-term Assets: Long-term investments", "2301": "Long-term Assets: Foreign shares", "2302": "Long-term Assets: Other types of foreign investments", "2303": "Long-term Assets: Canadian shares", "2304": "Long-term Assets: Government of Canada debt", "2305": "Long-term Assets: Canadian, provincial, and municipal government debt", "2306": "Long-term Assets: Canadian corporate bonds and debentures", "2307": "Long-term Assets: Debt securities", "2308": "Long-term Assets: Equity securities", "2309": "Long-term Assets: Securities purchased under resale agreements", "2310": "Long-term Assets: Central credit union shares", "2311": "Long-term Assets: Other Canadian long-term investments", "2360": "Long-term Assets: Long-term loans", "2361": "Long-term Assets: Mortgages", "2362": "Long-term Assets: Personal and credit card loans", "2363": "Long-term Assets: Business and government loans", "2364": "Long-term Assets: Line of credit", "2420": "Long-term Assets: Other long-term assets", "2421": "Long-term Assets: Future (deferred) income taxes", "2422": "Long-term Assets: Deferred pension charges", "2423": "Long-term Assets: Deferred unrealized exchange losses", "2424": "Long-term Assets: Other deferred items/charges", "2425": "Long-term Assets: Accumulated amortization of deferred charges", "2426": "Long-term Assets: Reserve fund", "2427": "Long-term Assets: Cash surrender value of life insurance", "2589": "Long-term Assets: Total long-term assets", "2590": "Long-term Assets: Assets held in trust", "2599": "Long-term Assets: Total assets", "2600": "Current Liabilities: Bank overdraft", "2620": "Current Liabilities: Amounts payable and accrued liabilities", "2621": "Current Liabilities: Trade payables", "2622": "Current Liabilities: Trade payables to related parties", "2623": "Current Liabilities: Holdbacks payable", "2624": "Current Liabilities: Wages payable", "2625": "Current Liabilities: Management fees payable", "2626": "Current Liabilities: Bonuses payable", "2627": "Current Liabilities: Employee deductions payable", "2628": "Current Liabilities: Withholding taxes payable", "2629": "Current Liabilities: Interest payable", "2630": "Current Liabilities: Amounts payable to members of NPOs", "2680": "Current Liabilities: Taxes payable", "2700": "Current Liabilities: Short-term debt", "2701": "Current Liabilities: Loans from Canadian banks", "2702": "Current Liabilities: Liability for securities sold short", "2703": "Current Liabilities: Liability for securities sold under repurchase agreements", "2704": "Current Liabilities: Gold and silver certificates", "2705": "Current Liabilities: Cheques and other items in transit", "2706": "Current Liabilities: Lien notes", "2707": "Current Liabilities: Credit card loans", "2770": "Current Liabilities: Deferred income", "2780": "Current Liabilities: Due to shareholder(s)/director(s)", "2781": "Current Liabilities: Due to individual shareholder(s)", "2782": "Current Liabilities: Due to corporate shareholder(s)", "2783": "Current Liabilities: Due to director(s)", "2790": "Current Liabilities: Due to member(s)/general partner(s)", "2791": "Current Liabilities: Due to limited partners", "2792": "Current Liabilities: Due to members that are partnerships", "2793": "Current Liabilities: Due to general partners", "2794": "Current Liabilities: Due to specified members who are not limited partners", "2840": "Current Liabilities: Due to joint venture(s)/partnership(s)", "2860": "Current Liabilities: Due to related parties", "2861": "Current Liabilities: Demand notes due to related parties", "2862": "Current Liabilities: Interest payable to related parties", "2863": "Current Liabilities: Advances due to related parties", "2920": "Current Liabilities: Current portion of long-term liability", "2940": "Current Liabilities: Bankers' acceptances", "2960": "Current Liabilities: Other current liabilities", "2961": "Current Liabilities: Deposits received", "2962": "Current Liabilities: Dividends payable", "2963": "Current Liabilities: Future (deferred) income taxes", "2964": "Current Liabilities: Reserves for guarantees, warranties, or indemnities", "2965": "Current Liabilities: General provisions/reserves", "2966": "Current Liabilities: Crew shares", "3139": "Current Liabilities: Total current liabilities", "3140": "Long-term Liabilities: Long-term debt", "3141": "Long-term Liabilities: Mortgages", "3142": "Long-term Liabilities: Farm Credit Corporation loan", "3143": "Long-term Liabilities: Chartered bank loan", "3144": "Long-term Liabilities: Credit Union/Caisse Populaire loan", "3145": "Long-term Liabilities: Provincial or territorial government loan", "3146": "Long-term Liabilities: Supply company loan", "3147": "Long-term Liabilities: Private loan", "3148": "Long-term Liabilities: Central, league, and federation loans", "3149": "Long-term Liabilities: Line of credit", "3150": "Long-term Liabilities: Liability for securities sold short", "3151": "Long-term Liabilities: Liability for securities sold under repurchase agreements", "3152": "Long-term Liabilities: Lien notes", "3200": "Long-term Liabilities: Deposit liabilities of financial institutions", "3210": "Long-term Liabilities: Bonds and debentures", "3220": "Long-term Liabilities: Deferred income", "3240": "Long-term Liabilities: Future (deferred) income taxes", "3260": "Long-term Liabilities: Due to shareholder(s)/director(s)", "3261": "Long-term Liabilities: Due to individual shareholder(s)", "3262": "Long-term Liabilities: Due to corporate shareholder(s)", "3263": "Long-term Liabilities: Due to director(s)", "3270": "Long-term Liabilities: Due to members", "3280": "Long-term Liabilities: Due to joint venture(s)/partnership(s)", "3300": "Long-term Liabilities: Due to related parties", "3301": "Long-term Liabilities: Amounts owing to related Canadian parties", "3302": "Long-term Liabilities: Amounts owing to related foreign parties", "3320": "Long-term Liabilities: Other long-term liabilities", "3321": "Long-term Liabilities: Long-term obligations/commitments/capital leases", "3322": "Long-term Liabilities: Reserves for guarantees, warranties, or indemnities", "3323": "Long-term Liabilities: Provision for site restoration", "3324": "Long-term Liabilities: Contributions to qualifying environmental trust", "3325": "Long-term Liabilities: General provisions/reserves", "3326": "Long-term Liabilities: Preference shares restated", "3327": "Long-term Liabilities: Member allocations", "3328": "Long-term Liabilities: Deferred revenue from incomplete contracts", "3450": "Long-term Liabilities: Total long-term liabilities", "3460": "Long-term Liabilities: Subordinated debt", "3470": "Long-term Liabilities: Amounts held in trust", "3499": "Long-term Liabilities: Total liabilities", "3500": "Equity: Common shares", "3520": "Equity: Preferred shares", "3540": "Equity: Contributed and other surplus", "3541": "Equity: Contributed surplus", "3542": "Equity: Appraisal surplus", "3543": "Equity: General reserve", "3570": "Equity: Head office account", "3580": "Equity: Accumulated other comprehensive income", "3600": "Equity: Retained earnings/deficit", "3620": "Equity: Total shareholder equity", "3640": "Equity: Total liabilities and shareholder equity", "3660": "Retained Earnings: Retained earnings/deficit – Start", "3680": "Retained Earnings: Net income/loss", "3700": "Retained Earnings: Dividends declared", "3701": "Retained Earnings: Cash dividends", "3702": "Retained Earnings: Patronage dividends", "3720": "Retained Earnings: Prior period adjustments", "3740": "Retained Earnings: Other items affecting retained earnings", "3741": "Retained Earnings: Share redemptions", "3742": "Retained Earnings: Special reserves", "3743": "Retained Earnings: Currency adjustments", "3744": "Retained Earnings: Unusual revenue items", "3745": "Retained Earnings: Interfund transfer", "3849": "Retained Earnings: Retained earnings/deficit – End" } def gifi_bal(input, api_key=None): """ Assign GIFI asset codes to balance sheet row labels using an AI model. Args: input: 2D list (each row is a label or [label, value]) or a scalar string. api_key: str, optional, API key for authentication. Returns: 2D list (columns: code, description): suggested GIFI code and its description for each input row, or both empty strings if not assigned. This example function is provided as-is without any representation of accuracy. """ # Hardcoded parameters temperature = 0.2 model = "mistral-small-latest" api_url = "https://api.mistral.ai/v1/chat/completions" # Demo login fallback if api_key is None: if "idToken" in globals(): api_key = globals()["idToken"] api_url = "https://llm.boardflare.com" else: return [["", "Login on the Functions tab for limited demo usage, or sign up for a free Mistral AI account at https://console.mistral.ai/ and add your own api_key."]] # Normalize input to 2D list of labels if isinstance(input, str): rows = [[input]] elif isinstance(input, list): if all(isinstance(row, list) for row in input): rows = input else: rows = [[x] for x in input] else: return [["", ""]] # Prepare all labels for batch prompt labels = [row[0] if row and isinstance(row[0], str) else "" for row in rows] code_choices = [f"{code}: {desc}" for code, desc in GIFI_CODES.items()] # Track which labels are blank is_blank = [not (isinstance(label, str) and label.strip()) for label in labels] non_blank_labels = [label for label, blank in zip(labels, is_blank) if not blank] # If all labels are blank, return all empty code/desc if all(is_blank): return [["", ""] for _ in labels] # Build prompt for only non-blank labels, enforce strict JSON output prompt = ( "Given the following list of balance sheet row labels, select the single most appropriate GIFI code from the list for each label. " "If none are appropriate, return an empty string for that label.\n\n" "Labels (one per line):\n" + "\n".join(non_blank_labels) + "\n\nGIFI Choices:\n" + json.dumps(code_choices, indent=2) + "\n\nReturn ONLY a JSON object with a key 'codes' whose value is a JSON array of the codes you selected, in the same order as the input labels. " + "Each code should be a string. Use an empty string for any label that should not be assigned a code. " + "Do not include any explanatory text, just the JSON object. " + 'For example: {"codes": ["1001", "", "1062"]}' ) payload = { "messages": [{"role": "user", "content": prompt}], "temperature": temperature, "model": model, "max_tokens": 500, "response_format": {"type": "json_object"} } headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json", "Accept": "application/json" } try: response = requests.post(api_url, headers=headers, json=payload) if response.status_code == 429: return [["", "Rate limit exceeded. Please try again later."]] response_data = response.json() content = response_data["choices"][0]["message"]["content"].strip() print(f"Response content: {content}") # Debugging output # Try to parse as JSON object and extract codes array try: codes_obj = json.loads(content) codes_list = codes_obj["codes"] if isinstance(codes_obj, dict) and "codes" in codes_obj else [] except Exception: return [["", "Error: Invalid response format. Expected JSON object with 'codes' array."]] # Validate codes and add descriptions valid_codes = list(GIFI_CODES.keys()) result = [] idx = 0 for blank in is_blank: if blank: result.append(["", ""]) else: code = "" desc = "" if idx < len(codes_list): c = codes_list[idx] if isinstance(c, str) and (c in valid_codes or c == ""): code = c else: for v in valid_codes: if v in str(c): code = v break if code: desc = GIFI_CODES.get(code, "") result.append([code, desc]) idx += 1 return result except Exception: return [["", ""] for _ in labels]
Last updated on