Add version
This commit is contained in:
@@ -61,4 +61,7 @@ LENGTH_DEFINITIONS = {
|
|||||||
"3": {"label": "Novella", "words": "20,000 - 40,000", "chapters": 15, "depth": 2},
|
"3": {"label": "Novella", "words": "20,000 - 40,000", "chapters": 15, "depth": 2},
|
||||||
"4": {"label": "Novel", "words": "60,000 - 80,000", "chapters": 30, "depth": 3},
|
"4": {"label": "Novel", "words": "60,000 - 80,000", "chapters": 30, "depth": 3},
|
||||||
"5": {"label": "Epic", "words": "100,000+", "chapters": 50, "depth": 4}
|
"5": {"label": "Epic", "words": "100,000+", "chapters": 50, "depth": 4}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- SYSTEM ---
|
||||||
|
VERSION = "1.1.0"
|
||||||
@@ -80,7 +80,9 @@ def get_optimal_model(base_type="pro"):
|
|||||||
if "latest" in n: return 50
|
if "latest" in n: return 50
|
||||||
return 100
|
return 100
|
||||||
return sorted(candidates, key=score, reverse=True)[0]
|
return sorted(candidates, key=score, reverse=True)[0]
|
||||||
except: return f"models/gemini-1.5-{base_type}"
|
except Exception as e:
|
||||||
|
utils.log("SYSTEM", f"⚠️ Error finding optimal model: {e}")
|
||||||
|
return f"models/gemini-1.5-{base_type}"
|
||||||
|
|
||||||
def get_default_models():
|
def get_default_models():
|
||||||
return {
|
return {
|
||||||
@@ -116,7 +118,12 @@ def select_best_models(force_refresh=False):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
utils.log("SYSTEM", "Refreshing AI model list from API...")
|
utils.log("SYSTEM", "Refreshing AI model list from API...")
|
||||||
models = [m.name for m in genai.list_models() if 'generateContent' in m.supported_generation_methods and 'gemini' in m.name.lower()]
|
all_models = list(genai.list_models())
|
||||||
|
raw_model_names = [m.name for m in all_models]
|
||||||
|
utils.log("SYSTEM", f"Found {len(all_models)} raw models from Google API.")
|
||||||
|
|
||||||
|
models = [m.name for m in all_models if 'generateContent' in m.supported_generation_methods and 'gemini' in m.name.lower()]
|
||||||
|
utils.log("SYSTEM", f"Identified {len(models)} compatible Gemini models: {models}")
|
||||||
|
|
||||||
bootstrapper = get_optimal_model("flash")
|
bootstrapper = get_optimal_model("flash")
|
||||||
utils.log("SYSTEM", f"Bootstrapping model selection with: {bootstrapper}")
|
utils.log("SYSTEM", f"Bootstrapping model selection with: {bootstrapper}")
|
||||||
@@ -160,7 +167,12 @@ def select_best_models(force_refresh=False):
|
|||||||
|
|
||||||
if not os.path.exists(config.DATA_DIR): os.makedirs(config.DATA_DIR)
|
if not os.path.exists(config.DATA_DIR): os.makedirs(config.DATA_DIR)
|
||||||
with open(cache_path, 'w') as f:
|
with open(cache_path, 'w') as f:
|
||||||
json.dump({"timestamp": int(time.time()), "models": selection, "available_at_time": models}, f, indent=2)
|
json.dump({
|
||||||
|
"timestamp": int(time.time()),
|
||||||
|
"models": selection,
|
||||||
|
"available_at_time": models,
|
||||||
|
"raw_models": raw_model_names
|
||||||
|
}, f, indent=2)
|
||||||
return selection
|
return selection
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
utils.log("SYSTEM", f"AI Model Selection failed: {e}.")
|
utils.log("SYSTEM", f"AI Model Selection failed: {e}.")
|
||||||
|
|||||||
@@ -37,6 +37,10 @@ login_manager.init_app(app)
|
|||||||
def load_user(user_id):
|
def load_user(user_id):
|
||||||
return db.session.get(User, int(user_id))
|
return db.session.get(User, int(user_id))
|
||||||
|
|
||||||
|
@app.context_processor
|
||||||
|
def inject_globals():
|
||||||
|
return dict(app_version=config.VERSION)
|
||||||
|
|
||||||
# --- SETUP ---
|
# --- SETUP ---
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
db.create_all()
|
db.create_all()
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<nav class="navbar navbar-expand-lg navbar-dark bg-dark mb-4">
|
<nav class="navbar navbar-expand-lg navbar-dark bg-dark mb-4">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<a class="navbar-brand" href="/"><i class="fas fa-book-open me-2"></i>BookApp AI</a>
|
<a class="navbar-brand" href="/"><i class="fas fa-book-open me-2"></i>BookApp AI <small class="text-muted fs-6 ms-1">v{{ app_version }}</small></a>
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||||||
<span class="navbar-toggler-icon"></span>
|
<span class="navbar-toggler-icon"></span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -16,6 +16,13 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if cache.error %}
|
||||||
|
<div class="alert alert-danger shadow-sm">
|
||||||
|
<h5 class="alert-heading"><i class="fas fa-exclamation-triangle me-2"></i>Last Scan Error</h5>
|
||||||
|
<p class="mb-0">{{ cache.error }}</p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div class="card shadow-sm mb-4">
|
<div class="card shadow-sm mb-4">
|
||||||
<div class="card-header bg-light">
|
<div class="card-header bg-light">
|
||||||
<h5 class="mb-0"><i class="fas fa-robot me-2"></i>AI Model Selection</h5>
|
<h5 class="mb-0"><i class="fas fa-robot me-2"></i>AI Model Selection</h5>
|
||||||
@@ -102,6 +109,30 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Raw API Output -->
|
||||||
|
<div class="card shadow-sm mb-4">
|
||||||
|
<div class="card-header bg-light d-flex justify-content-between align-items-center" style="cursor: pointer;" data-bs-toggle="collapse" data-bs-target="#rawOutput">
|
||||||
|
<h5 class="mb-0"><i class="fas fa-terminal me-2"></i>Raw API Output</h5>
|
||||||
|
<span class="badge bg-secondary">Click to Toggle</span>
|
||||||
|
</div>
|
||||||
|
<div id="rawOutput" class="collapse">
|
||||||
|
<div class="card-body bg-dark text-light font-monospace">
|
||||||
|
<p class="text-muted mb-2"># Full list of models returned by google.generativeai.list_models():</p>
|
||||||
|
<ul class="list-unstyled mb-0" style="column-count: 2;">
|
||||||
|
{% if cache.raw_models %}
|
||||||
|
{% for m in cache.raw_models %}
|
||||||
|
<li>
|
||||||
|
<span class="{{ 'text-success' if 'gemini' in m else 'text-muted' }}">{{ m }}</span>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
<li class="text-muted">No raw data available. Run "Refresh & Optimize".</li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Cache Info -->
|
<!-- Cache Info -->
|
||||||
<div class="card shadow-sm">
|
<div class="card shadow-sm">
|
||||||
<div class="card-header bg-light">
|
<div class="card-header bg-light">
|
||||||
|
|||||||
Reference in New Issue
Block a user