Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -5,6 +5,9 @@ from datetime import datetime
|
|
| 5 |
import plotly.graph_objects as go
|
| 6 |
import re
|
| 7 |
from urllib.parse import urlparse
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
class StartupValuationCalculator:
|
| 10 |
def __init__(self):
|
|
@@ -79,6 +82,111 @@ class StartupValuationCalculator:
|
|
| 79 |
}
|
| 80 |
}
|
| 81 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
def calculate_berkus_score(self, berkus_data):
|
| 83 |
"""λ²ν¬μ€ λ°©λ²μΌλ‘ νκ° (μ΅λ $2.5M)"""
|
| 84 |
scores = {}
|
|
@@ -104,7 +212,7 @@ class StartupValuationCalculator:
|
|
| 104 |
|
| 105 |
# 3. μ°μν ν (Quality Team)
|
| 106 |
team_score = min(100,
|
| 107 |
-
berkus_data["team_experience"] *
|
| 108 |
berkus_data["domain_expertise"] * 15 +
|
| 109 |
berkus_data["startup_experience"] * 15
|
| 110 |
)
|
|
@@ -133,7 +241,7 @@ class StartupValuationCalculator:
|
|
| 133 |
adjustments = {}
|
| 134 |
|
| 135 |
# κ° μμλ³ μ‘°μ λΉμ¨ κ³μ° (0.5 ~ 1.5)
|
| 136 |
-
adjustments["team"] = scorecard_data["team_strength"] / 100
|
| 137 |
adjustments["market_size"] = scorecard_data["market_opportunity"] / 100
|
| 138 |
adjustments["product"] = scorecard_data["product_stage"] / 100
|
| 139 |
adjustments["competition"] = scorecard_data["competitive_advantage"] / 100
|
|
@@ -332,7 +440,7 @@ def create_ui():
|
|
| 332 |
calculator = StartupValuationCalculator()
|
| 333 |
|
| 334 |
def process_valuation(
|
| 335 |
-
language,
|
| 336 |
# κΈ°λ³Έ μ 보
|
| 337 |
company_name, founded_year, industry, stage, revenue_type,
|
| 338 |
# λ§€μΆ μ 보
|
|
@@ -351,7 +459,9 @@ def create_ui():
|
|
| 351 |
# λ°μ΄ν° μ€λΉ
|
| 352 |
data = {
|
| 353 |
"company_name": company_name,
|
|
|
|
| 354 |
"industry": industry,
|
|
|
|
| 355 |
"revenue_type": revenue_type,
|
| 356 |
"monthly_revenue": monthly_revenue * 1000,
|
| 357 |
"growth_rate": growth_rate,
|
|
@@ -465,6 +575,25 @@ def create_ui():
|
|
| 465 |
## π {t['financial_health']}
|
| 466 |
- **Cash Runway**: {results['runway']:.1f} months
|
| 467 |
- **Monthly Burn Rate**: ${burn_rate}K
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 468 |
"""
|
| 469 |
|
| 470 |
# μ°¨νΈ μμ±
|
|
@@ -497,23 +626,29 @@ def create_ui():
|
|
| 497 |
|
| 498 |
# Gradio UI
|
| 499 |
with gr.Blocks(title="Startup Valuation Calculator", theme=gr.themes.Soft()) as demo:
|
| 500 |
-
# μΈμ΄ μ ν
|
| 501 |
-
language = gr.Radio(
|
| 502 |
-
choices=[("νκ΅μ΄", "ko"), ("English", "en")],
|
| 503 |
-
value="ko",
|
| 504 |
-
label="Language / μΈμ΄",
|
| 505 |
-
type="value"
|
| 506 |
-
)
|
| 507 |
-
|
| 508 |
gr.Markdown("""
|
| 509 |
-
# π¦ μ€ννΈμ
κ°μΉνκ° μλν μμ€ν
v3.
|
| 510 |
-
###
|
| 511 |
""")
|
| 512 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 513 |
with gr.Tab("κΈ°λ³Έ μ 보 / Basic Info"):
|
| 514 |
with gr.Row():
|
| 515 |
company_name = gr.Textbox(label="νμ¬λͺ
/ Company Name", value="μ°λ¦¬ μ€ννΈμ
")
|
| 516 |
-
founded_year = gr.Slider(
|
| 517 |
|
| 518 |
with gr.Row():
|
| 519 |
industry = gr.Dropdown(
|
|
@@ -550,7 +685,7 @@ def create_ui():
|
|
| 550 |
|
| 551 |
gr.Markdown("### π₯ ν μλ / Team Quality")
|
| 552 |
with gr.Row():
|
| 553 |
-
team_experience = gr.Slider(0,
|
| 554 |
label="ν νκ· κ²½λ ₯(λ
) / Average Experience (years)")
|
| 555 |
domain_expertise = gr.Slider(0, 5, value=3, step=1,
|
| 556 |
label="λλ©μΈ μ λ¬Έμ± / Domain Expertise (1-5)")
|
|
@@ -573,6 +708,7 @@ def create_ui():
|
|
| 573 |
|
| 574 |
with gr.Tab("μ€μ½μ΄μΉ΄λ νκ° / Scorecard"):
|
| 575 |
gr.Markdown("### κ° μμλ₯Ό λμΌ μ€ν
μ΄μ§ νκ· λλΉ νκ° (50 = νκ· )")
|
|
|
|
| 576 |
|
| 577 |
team_strength = gr.Slider(0, 100, value=60, step=5,
|
| 578 |
label="ν μλ / Team Strength")
|
|
@@ -636,7 +772,7 @@ def create_ui():
|
|
| 636 |
evaluate_btn.click(
|
| 637 |
process_valuation,
|
| 638 |
inputs=[
|
| 639 |
-
language,
|
| 640 |
company_name, founded_year, industry, stage, revenue_type,
|
| 641 |
monthly_revenue, growth_rate, arpu, gross_margin, monthly_churn,
|
| 642 |
retention_rate, new_customers, monthly_marketing, monthly_sales,
|
|
@@ -655,13 +791,13 @@ def create_ui():
|
|
| 655 |
with gr.Row():
|
| 656 |
gr.Button("μ΄κΈ° μ€ννΈμ
/ Early Startup").click(
|
| 657 |
lambda: [
|
| 658 |
-
"ko", "ν
ν¬ μ€ννΈμ
", 2023, "AI/λ₯ν
ν¬", "MVP/λ² ν", "ꡬλ
ν (SaaS)",
|
| 659 |
0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 50,
|
| 660 |
-
80, 7, "λ² ν λ²μ ",
|
| 661 |
70, 65, 55, 60, 45, 50, 50
|
| 662 |
],
|
| 663 |
outputs=[
|
| 664 |
-
language, company_name, founded_year, industry, stage, revenue_type,
|
| 665 |
monthly_revenue, growth_rate, arpu, gross_margin, monthly_churn,
|
| 666 |
retention_rate, new_customers, monthly_marketing, monthly_sales,
|
| 667 |
cash_balance, burn_rate,
|
|
@@ -675,13 +811,13 @@ def create_ui():
|
|
| 675 |
|
| 676 |
gr.Button("μ±μ₯ λ¨κ³ / Growth Stage").click(
|
| 677 |
lambda: [
|
| 678 |
-
"en", "SaaS Corp", 2021, "SaaS - B2B", "μ±μ₯ λ¨κ³", "ꡬλ
ν (SaaS)",
|
| 679 |
100, 150, 200, 75, 2, 90, 40, 30, 20, 2000, 120,
|
| 680 |
-
90, 9, "μΆμ λ²μ ",
|
| 681 |
85, 80, 75, 70, 65, 75, 60
|
| 682 |
],
|
| 683 |
outputs=[
|
| 684 |
-
language, company_name, founded_year, industry, stage, revenue_type,
|
| 685 |
monthly_revenue, growth_rate, arpu, gross_margin, monthly_churn,
|
| 686 |
retention_rate, new_customers, monthly_marketing, monthly_sales,
|
| 687 |
cash_balance, burn_rate,
|
|
|
|
| 5 |
import plotly.graph_objects as go
|
| 6 |
import re
|
| 7 |
from urllib.parse import urlparse
|
| 8 |
+
import requests
|
| 9 |
+
import json
|
| 10 |
+
import os
|
| 11 |
|
| 12 |
class StartupValuationCalculator:
|
| 13 |
def __init__(self):
|
|
|
|
| 82 |
}
|
| 83 |
}
|
| 84 |
|
| 85 |
+
def call_llm_api(self, prompt, api_key):
|
| 86 |
+
"""LLM APIλ₯Ό νΈμΆνμ¬ κ³ κΈ λΆμ μν"""
|
| 87 |
+
if not api_key:
|
| 88 |
+
return None
|
| 89 |
+
|
| 90 |
+
url = "https://api.fireworks.ai/inference/v1/chat/completions"
|
| 91 |
+
|
| 92 |
+
payload = {
|
| 93 |
+
"model": "accounts/fireworks/models/qwen3-235b-a22b-instruct-2507",
|
| 94 |
+
"max_tokens": 4096,
|
| 95 |
+
"top_p": 1,
|
| 96 |
+
"top_k": 40,
|
| 97 |
+
"presence_penalty": 0,
|
| 98 |
+
"frequency_penalty": 0,
|
| 99 |
+
"temperature": 0.6,
|
| 100 |
+
"messages": [
|
| 101 |
+
{
|
| 102 |
+
"role": "system",
|
| 103 |
+
"content": "You are an expert startup valuation analyst and strategic advisor with deep knowledge of venture capital, financial analysis, and business strategy."
|
| 104 |
+
},
|
| 105 |
+
{
|
| 106 |
+
"role": "user",
|
| 107 |
+
"content": prompt
|
| 108 |
+
}
|
| 109 |
+
]
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
headers = {
|
| 113 |
+
"Accept": "application/json",
|
| 114 |
+
"Content-Type": "application/json",
|
| 115 |
+
"Authorization": f"Bearer {api_key}"
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
try:
|
| 119 |
+
response = requests.post(url, headers=headers, data=json.dumps(payload))
|
| 120 |
+
if response.status_code == 200:
|
| 121 |
+
return response.json()['choices'][0]['message']['content']
|
| 122 |
+
else:
|
| 123 |
+
return None
|
| 124 |
+
except:
|
| 125 |
+
return None
|
| 126 |
+
|
| 127 |
+
def generate_strategic_report(self, data, results, language, api_key):
|
| 128 |
+
"""LLMμ μ¬μ©νμ¬ μ λ΅μ λ³΄κ³ μ μμ±"""
|
| 129 |
+
|
| 130 |
+
if language == "ko":
|
| 131 |
+
prompt = f"""
|
| 132 |
+
λ€μ μ€ννΈμ
μ κ°μΉνκ° κ²°κ³Όλ₯Ό λΆμνκ³ μ λ΅μ μ‘°μΈμ ν¬ν¨ν μμΈ λ³΄κ³ μλ₯Ό μμ±ν΄μ£ΌμΈμ:
|
| 133 |
+
|
| 134 |
+
νμ¬ μ 보:
|
| 135 |
+
- νμ¬λͺ
: {data['company_name']}
|
| 136 |
+
- μ€λ¦½λ
λ: {data['founded_year']}
|
| 137 |
+
- μ°μ
: {data['industry']}
|
| 138 |
+
- μ¬μ
λ¨κ³: {data['stage']}
|
| 139 |
+
|
| 140 |
+
νκ° κ²°κ³Ό:
|
| 141 |
+
- μ΅μ’
κΈ°μ
κ°μΉ: ${results['final_valuation']/1000000:.2f}M
|
| 142 |
+
- λ²ν¬μ€ νκ°: ${results['berkus_valuation']/1000000:.2f}M
|
| 143 |
+
- ARR: ${results['arr']/1000000:.2f}M
|
| 144 |
+
- μ±μ₯λ₯ : {data['growth_rate']}%
|
| 145 |
+
- LTV/CAC: {results['ltv_cac_ratio']:.1f}
|
| 146 |
+
- λ°μ¨μ΄: {results['runway']:.1f}κ°μ
|
| 147 |
+
- μ€μ½μ΄μΉ΄λ μ μλ€: {results['scorecard_adjustments']}
|
| 148 |
+
|
| 149 |
+
λ€μμ ν¬ν¨νμ¬ μμ±ν΄μ£ΌμΈμ:
|
| 150 |
+
1. κ°μΉνκ° κ²°κ³Όμ νλΉμ± λΆμ
|
| 151 |
+
2. λμ’
μ
κ³ λλΉ ν¬μ§μ
λ
|
| 152 |
+
3. μ£Όμ κ°μ κ³Ό κ°μ νμ μμ
|
| 153 |
+
4. ν₯ν 6-12κ°μ μ λ΅μ μ°μ μμ
|
| 154 |
+
5. μκΈμ‘°λ¬ μ λ΅ λ° μ μ μ‘°λ¬ κ·λͺ¨
|
| 155 |
+
6. μ£Όμ 리μ€ν¬μ μν λ°©μ
|
| 156 |
+
7. ν΅μ¬ KPIμ λ§μΌμ€ν€ μ μ
|
| 157 |
+
"""
|
| 158 |
+
else:
|
| 159 |
+
prompt = f"""
|
| 160 |
+
Please analyze the following startup valuation results and provide a comprehensive strategic report:
|
| 161 |
+
|
| 162 |
+
Company Information:
|
| 163 |
+
- Company Name: {data['company_name']}
|
| 164 |
+
- Founded: {data['founded_year']}
|
| 165 |
+
- Industry: {data['industry']}
|
| 166 |
+
- Stage: {data['stage']}
|
| 167 |
+
|
| 168 |
+
Valuation Results:
|
| 169 |
+
- Final Valuation: ${results['final_valuation']/1000000:.2f}M
|
| 170 |
+
- Berkus Valuation: ${results['berkus_valuation']/1000000:.2f}M
|
| 171 |
+
- ARR: ${results['arr']/1000000:.2f}M
|
| 172 |
+
- Growth Rate: {data['growth_rate']}%
|
| 173 |
+
- LTV/CAC: {results['ltv_cac_ratio']:.1f}
|
| 174 |
+
- Runway: {results['runway']:.1f} months
|
| 175 |
+
- Scorecard Scores: {results['scorecard_adjustments']}
|
| 176 |
+
|
| 177 |
+
Please include:
|
| 178 |
+
1. Valuation validity analysis
|
| 179 |
+
2. Industry positioning
|
| 180 |
+
3. Key strengths and improvement areas
|
| 181 |
+
4. Strategic priorities for next 6-12 months
|
| 182 |
+
5. Fundraising strategy and optimal round size
|
| 183 |
+
6. Key risks and mitigation strategies
|
| 184 |
+
7. Core KPIs and milestone recommendations
|
| 185 |
+
"""
|
| 186 |
+
|
| 187 |
+
llm_response = self.call_llm_api(prompt, api_key)
|
| 188 |
+
return llm_response
|
| 189 |
+
|
| 190 |
def calculate_berkus_score(self, berkus_data):
|
| 191 |
"""λ²ν¬μ€ λ°©λ²μΌλ‘ νκ° (μ΅λ $2.5M)"""
|
| 192 |
scores = {}
|
|
|
|
| 212 |
|
| 213 |
# 3. μ°μν ν (Quality Team)
|
| 214 |
team_score = min(100,
|
| 215 |
+
min(berkus_data["team_experience"], 10) * 10 + # μ΅λ 10λ
κΉμ§λ§ κ°μ°
|
| 216 |
berkus_data["domain_expertise"] * 15 +
|
| 217 |
berkus_data["startup_experience"] * 15
|
| 218 |
)
|
|
|
|
| 241 |
adjustments = {}
|
| 242 |
|
| 243 |
# κ° μμλ³ μ‘°μ λΉμ¨ κ³μ° (0.5 ~ 1.5)
|
| 244 |
+
adjustments["team"] = scorecard_data["team_strength"] / 100
|
| 245 |
adjustments["market_size"] = scorecard_data["market_opportunity"] / 100
|
| 246 |
adjustments["product"] = scorecard_data["product_stage"] / 100
|
| 247 |
adjustments["competition"] = scorecard_data["competitive_advantage"] / 100
|
|
|
|
| 440 |
calculator = StartupValuationCalculator()
|
| 441 |
|
| 442 |
def process_valuation(
|
| 443 |
+
api_key, language,
|
| 444 |
# κΈ°λ³Έ μ 보
|
| 445 |
company_name, founded_year, industry, stage, revenue_type,
|
| 446 |
# λ§€μΆ μ 보
|
|
|
|
| 459 |
# λ°μ΄ν° μ€λΉ
|
| 460 |
data = {
|
| 461 |
"company_name": company_name,
|
| 462 |
+
"founded_year": founded_year,
|
| 463 |
"industry": industry,
|
| 464 |
+
"stage": stage,
|
| 465 |
"revenue_type": revenue_type,
|
| 466 |
"monthly_revenue": monthly_revenue * 1000,
|
| 467 |
"growth_rate": growth_rate,
|
|
|
|
| 575 |
## π {t['financial_health']}
|
| 576 |
- **Cash Runway**: {results['runway']:.1f} months
|
| 577 |
- **Monthly Burn Rate**: ${burn_rate}K
|
| 578 |
+
"""
|
| 579 |
+
|
| 580 |
+
# LLM κΈ°λ° μ λ΅μ λΆμ μΆκ°
|
| 581 |
+
strategic_report = None
|
| 582 |
+
if api_key and api_key.strip():
|
| 583 |
+
strategic_report = calculator.generate_strategic_report(data, results, language, api_key)
|
| 584 |
+
|
| 585 |
+
if strategic_report:
|
| 586 |
+
if language == "ko":
|
| 587 |
+
valuation_text += f"""
|
| 588 |
+
## π€ AI μ λ΅μ λΆμ
|
| 589 |
+
|
| 590 |
+
{strategic_report}
|
| 591 |
+
"""
|
| 592 |
+
else:
|
| 593 |
+
valuation_text += f"""
|
| 594 |
+
## π€ AI Strategic Analysis
|
| 595 |
+
|
| 596 |
+
{strategic_report}
|
| 597 |
"""
|
| 598 |
|
| 599 |
# μ°¨νΈ μμ±
|
|
|
|
| 626 |
|
| 627 |
# Gradio UI
|
| 628 |
with gr.Blocks(title="Startup Valuation Calculator", theme=gr.themes.Soft()) as demo:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 629 |
gr.Markdown("""
|
| 630 |
+
# π¦ μ€ννΈμ
κ°μΉνκ° μλν μμ€ν
v3.5
|
| 631 |
+
### AI κΈ°λ° μ λ΅μ λΆμμ ν¬ν¨ν μ’
ν© νκ° μμ€ν
|
| 632 |
""")
|
| 633 |
|
| 634 |
+
# API ν€μ μΈμ΄ μ ν
|
| 635 |
+
with gr.Row():
|
| 636 |
+
api_key = gr.Textbox(
|
| 637 |
+
label="Fireworks API Key (μ νμ¬ν - AI λΆμμ©)",
|
| 638 |
+
placeholder="AI μ λ΅μ λΆμμ μνμλ©΄ API ν€λ₯Ό μ
λ ₯νμΈμ",
|
| 639 |
+
type="password"
|
| 640 |
+
)
|
| 641 |
+
language = gr.Radio(
|
| 642 |
+
choices=[("νκ΅μ΄", "ko"), ("English", "en")],
|
| 643 |
+
value="ko",
|
| 644 |
+
label="Language / μΈμ΄",
|
| 645 |
+
type="value"
|
| 646 |
+
)
|
| 647 |
+
|
| 648 |
with gr.Tab("κΈ°λ³Έ μ 보 / Basic Info"):
|
| 649 |
with gr.Row():
|
| 650 |
company_name = gr.Textbox(label="νμ¬λͺ
/ Company Name", value="μ°λ¦¬ μ€ννΈμ
")
|
| 651 |
+
founded_year = gr.Slider(2000, 2025, value=2022, step=1, label="μ€λ¦½μ°λ / Founded Year")
|
| 652 |
|
| 653 |
with gr.Row():
|
| 654 |
industry = gr.Dropdown(
|
|
|
|
| 685 |
|
| 686 |
gr.Markdown("### π₯ ν μλ / Team Quality")
|
| 687 |
with gr.Row():
|
| 688 |
+
team_experience = gr.Slider(0, 30, value=5, step=1,
|
| 689 |
label="ν νκ· κ²½λ ₯(λ
) / Average Experience (years)")
|
| 690 |
domain_expertise = gr.Slider(0, 5, value=3, step=1,
|
| 691 |
label="λλ©μΈ μ λ¬Έμ± / Domain Expertise (1-5)")
|
|
|
|
| 708 |
|
| 709 |
with gr.Tab("μ€μ½μ΄μΉ΄λ νκ° / Scorecard"):
|
| 710 |
gr.Markdown("### κ° μμλ₯Ό λμΌ μ€ν
μ΄μ§ νκ· λλΉ νκ° (50 = νκ· )")
|
| 711 |
+
gr.Markdown("### Rate each factor compared to same-stage average (50 = average)")
|
| 712 |
|
| 713 |
team_strength = gr.Slider(0, 100, value=60, step=5,
|
| 714 |
label="ν μλ / Team Strength")
|
|
|
|
| 772 |
evaluate_btn.click(
|
| 773 |
process_valuation,
|
| 774 |
inputs=[
|
| 775 |
+
api_key, language,
|
| 776 |
company_name, founded_year, industry, stage, revenue_type,
|
| 777 |
monthly_revenue, growth_rate, arpu, gross_margin, monthly_churn,
|
| 778 |
retention_rate, new_customers, monthly_marketing, monthly_sales,
|
|
|
|
| 791 |
with gr.Row():
|
| 792 |
gr.Button("μ΄κΈ° μ€ννΈμ
/ Early Startup").click(
|
| 793 |
lambda: [
|
| 794 |
+
"", "ko", "ν
ν¬ μ€ννΈμ
", 2023, "AI/λ₯ν
ν¬", "MVP/λ² ν", "ꡬλ
ν (SaaS)",
|
| 795 |
0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 50,
|
| 796 |
+
80, 7, "λ² ν λ²μ ", 3, 4, 1, 1, 2, 3, False, 0, 70,
|
| 797 |
70, 65, 55, 60, 45, 50, 50
|
| 798 |
],
|
| 799 |
outputs=[
|
| 800 |
+
api_key, language, company_name, founded_year, industry, stage, revenue_type,
|
| 801 |
monthly_revenue, growth_rate, arpu, gross_margin, monthly_churn,
|
| 802 |
retention_rate, new_customers, monthly_marketing, monthly_sales,
|
| 803 |
cash_balance, burn_rate,
|
|
|
|
| 811 |
|
| 812 |
gr.Button("μ±μ₯ λ¨κ³ / Growth Stage").click(
|
| 813 |
lambda: [
|
| 814 |
+
"", "en", "SaaS Corp", 2021, "SaaS - B2B", "μ±μ₯ λ¨κ³", "ꡬλ
ν (SaaS)",
|
| 815 |
100, 150, 200, 75, 2, 90, 40, 30, 20, 2000, 120,
|
| 816 |
+
90, 9, "μΆμ λ²μ ", 8, 5, 3, 5, 5, 20, True, 8, 95,
|
| 817 |
85, 80, 75, 70, 65, 75, 60
|
| 818 |
],
|
| 819 |
outputs=[
|
| 820 |
+
api_key, language, company_name, founded_year, industry, stage, revenue_type,
|
| 821 |
monthly_revenue, growth_rate, arpu, gross_margin, monthly_churn,
|
| 822 |
retention_rate, new_customers, monthly_marketing, monthly_sales,
|
| 823 |
cash_balance, burn_rate,
|