Я пытаюсь автоматизировать внутридневной финансовый анализ, используя бесплатные модели OpenRouter. Мой скрипт Python проходит через несколько конечных точек LLM, отправляя подсказку о символе акции, ее изменении и цене закрытия. Если какая-либо модель терпит неудачу (ошибка API, пустой ответ и т. д.), она пытается использовать следующую; если все не удается, он возвращается к анализу на основе правил.
Я установил свой ключ API OpenRouter в переменную среды, но я не уверен, что моя обработка ошибок и ротация надежны. Кроме того, существуют ли передовые методы передачи пользовательских заголовков или быстрого форматирования финансовых данных? Является ли использование предоставленной стратегии ротации и резервных вариантов разумным подходом для получения четких и кратких финансовых сводок за день?
Вот мой код (для справки):
import os
import requests
import json
# ================================================================
# ENV-BASED API KEY (YOU MUST SET IN TERMINAL or ~/.zshrc)
# ================================================================
OPENROUTER_API_KEY = os.getenv("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", "")
OPENROUTER_URL = "https://openrouter.ai/api/v1/chat/completions"
# ==========================
# MULTI-MODEL ROTATION LIST
# ==========================
FREE_MODELS = [
"x-ai/grok-4.1-fast:free",
"z-ai/glm-4.5-air:free",
"deepseek/deepseek-chat-v3-0324:free",
"deepseek/deepseek-r1-0528:free",
"qwen/qwen3-coder:free",
"nvidia/nemotron-nano-12b-v2-vl:free",
"google/gemma-3-27b-it:free",
]
# ================================================================
# RULE-BASED FALLBACK
# ================================================================
def fallback_insight(symbol, change, close_price):
direction = "up" if change > 0 else "down" if change < 0 else "flat"
return (
f"[Fallback] {symbol}: price is {direction} ({change:+.2f}) at {close_price:.2f}. "
f"LLM unavailable, using rule-based analysis."
)
# ================================================================
# MAIN FUNCTION (called from Pathway)
# ================================================================
def generate_market_insight(symbol, change, close_price):
print("\n=====================================================")
print(f"[DEBUG] LLM call triggered for {symbol}")
print("=====================================================\n")
if not OPENROUTER_API_KEY or not OPENROUTER_API_KEY.startswith("sk-or-"):
print("[ERROR] Missing or invalid OPENROUTER_API_KEY")
return fallback_insight(symbol, change, close_price)
prompt = f"""
You are a professional financial market analyst.
Write a short intraday analysis in clean, concise English.
Instrument:
- Symbol: {symbol}
- Change: {change:+.2f}
- Last Close: {close_price:.2f}
Rules:
- Trend should be based on magnitude and direction of move.
- Mention risk (low/medium/high).
- Explain if the move is normal intraday noise or meaningful.
- Write 5–7 bullet points.
- Must be unique for this specific stock. No generic filler.
"""
# Try each model one by one
for model in FREE_MODELS:
print(f"\n[DEBUG] Trying model: {model}")
body = {
"model": model,
"messages": [
{"role": "user", "content": prompt.strip()}
],
"max_tokens": 220,
"temperature": 0.9,
"top_p": 0.9,
}
headers = {
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"Content-Type": "application/json",
"HTTP-Referer": "http://localhost",
"X-Title": "GGSIPU-Financial-Monitoring",
}
try:
print("[DEBUG] Sending request to OpenRouter...")
resp = requests.post(OPENROUTER_URL, json=body, headers=headers, timeout=40)
print(f"[DEBUG] HTTP Status = {resp.status_code}")
if resp.status_code != 200:
print("[ERROR] Model failed:", model, resp.text[:180])
continue
data = resp.json()
if "error" in data:
print("[ERROR] API Model Error:", data["error"])
continue
content = data["choices"][0]["message"]["content"]
if not content:
print("[ERROR] Model returned empty content.")
continue
print(f"[DEBUG] SUCCESS with model: {model}")
return content.strip()
except Exception as e:
print(f"[EXCEPTION] Model crashed: {model} → {repr(e)}")
continue
print("[ERROR] ALL MODELS FAILED → fallback triggered.")
return fallback_insight(symbol, change, close_price)
Подробнее здесь: https://stackoverflow.com/questions/798 ... ot-working
Мой код с API Openrouter не работает ⇐ Python
Программы на Python
1763744561
Anonymous
Я пытаюсь автоматизировать внутридневной финансовый анализ, используя бесплатные модели OpenRouter. Мой скрипт Python проходит через несколько конечных точек LLM, отправляя подсказку о символе акции, ее изменении и цене закрытия. Если какая-либо модель терпит неудачу (ошибка API, пустой ответ и т. д.), она пытается использовать следующую; если все не удается, он возвращается к анализу на основе правил.
Я установил свой ключ API OpenRouter в переменную среды, но я не уверен, что моя обработка ошибок и ротация надежны. Кроме того, существуют ли передовые методы передачи пользовательских заголовков или быстрого форматирования финансовых данных? Является ли использование предоставленной стратегии ротации и резервных вариантов разумным подходом для получения четких и кратких финансовых сводок за день?
Вот мой код (для справки):
import os
import requests
import json
# ================================================================
# ENV-BASED API KEY (YOU MUST SET IN TERMINAL or ~/.zshrc)
# ================================================================
OPENROUTER_API_KEY = os.getenv("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", "")
OPENROUTER_URL = "https://openrouter.ai/api/v1/chat/completions"
# ==========================
# MULTI-MODEL ROTATION LIST
# ==========================
FREE_MODELS = [
"x-ai/grok-4.1-fast:free",
"z-ai/glm-4.5-air:free",
"deepseek/deepseek-chat-v3-0324:free",
"deepseek/deepseek-r1-0528:free",
"qwen/qwen3-coder:free",
"nvidia/nemotron-nano-12b-v2-vl:free",
"google/gemma-3-27b-it:free",
]
# ================================================================
# RULE-BASED FALLBACK
# ================================================================
def fallback_insight(symbol, change, close_price):
direction = "up" if change > 0 else "down" if change < 0 else "flat"
return (
f"[Fallback] {symbol}: price is {direction} ({change:+.2f}) at {close_price:.2f}. "
f"LLM unavailable, using rule-based analysis."
)
# ================================================================
# MAIN FUNCTION (called from Pathway)
# ================================================================
def generate_market_insight(symbol, change, close_price):
print("\n=====================================================")
print(f"[DEBUG] LLM call triggered for {symbol}")
print("=====================================================\n")
if not OPENROUTER_API_KEY or not OPENROUTER_API_KEY.startswith("sk-or-"):
print("[ERROR] Missing or invalid OPENROUTER_API_KEY")
return fallback_insight(symbol, change, close_price)
prompt = f"""
You are a professional financial market analyst.
Write a short intraday analysis in clean, concise English.
Instrument:
- Symbol: {symbol}
- Change: {change:+.2f}
- Last Close: {close_price:.2f}
Rules:
- Trend should be based on magnitude and direction of move.
- Mention risk (low/medium/high).
- Explain if the move is normal intraday noise or meaningful.
- Write 5–7 bullet points.
- Must be unique for this specific stock. No generic filler.
"""
# Try each model one by one
for model in FREE_MODELS:
print(f"\n[DEBUG] Trying model: {model}")
body = {
"model": model,
"messages": [
{"role": "user", "content": prompt.strip()}
],
"max_tokens": 220,
"temperature": 0.9,
"top_p": 0.9,
}
headers = {
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
"Content-Type": "application/json",
"HTTP-Referer": "http://localhost",
"X-Title": "GGSIPU-Financial-Monitoring",
}
try:
print("[DEBUG] Sending request to OpenRouter...")
resp = requests.post(OPENROUTER_URL, json=body, headers=headers, timeout=40)
print(f"[DEBUG] HTTP Status = {resp.status_code}")
if resp.status_code != 200:
print("[ERROR] Model failed:", model, resp.text[:180])
continue
data = resp.json()
if "error" in data:
print("[ERROR] API Model Error:", data["error"])
continue
content = data["choices"][0]["message"]["content"]
if not content:
print("[ERROR] Model returned empty content.")
continue
print(f"[DEBUG] SUCCESS with model: {model}")
return content.strip()
except Exception as e:
print(f"[EXCEPTION] Model crashed: {model} → {repr(e)}")
continue
print("[ERROR] ALL MODELS FAILED → fallback triggered.")
return fallback_insight(symbol, change, close_price)
Подробнее здесь: [url]https://stackoverflow.com/questions/79826779/my-code-with-openrouter-api-is-not-working[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия