fix: Pass user_id to Gemini for AI cost tracking
ZOPK news evaluation now properly attributes AI token usage to the user who triggered the evaluation. This enables: - Per-user cost tracking in AI monitoring dashboard - User rankings by AI token consumption - Company-level cost aggregation Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
b21b3739d7
commit
421d7c8e89
@ -586,13 +586,14 @@ Przykłady odpowiedzi:
|
|||||||
{{"relevant": false, "score": 1, "reason": "News sportowy bez związku z przemysłem"}}"""
|
{{"relevant": false, "score": 1, "reason": "News sportowy bez związku z przemysłem"}}"""
|
||||||
|
|
||||||
|
|
||||||
def evaluate_news_relevance(news_item, gemini_service=None) -> Dict:
|
def evaluate_news_relevance(news_item, gemini_service=None, user_id: int = None) -> Dict:
|
||||||
"""
|
"""
|
||||||
Evaluate a single news item for ZOPK relevance using Gemini AI.
|
Evaluate a single news item for ZOPK relevance using Gemini AI.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
news_item: ZOPKNews object or dict with title, description, source_name, published_at
|
news_item: ZOPKNews object or dict with title, description, source_name, published_at
|
||||||
gemini_service: Optional GeminiService instance (uses global if not provided)
|
gemini_service: Optional GeminiService instance (uses global if not provided)
|
||||||
|
user_id: ID of the user triggering the evaluation (for cost tracking)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Dict with keys: relevant (bool), reason (str), evaluated (bool)
|
Dict with keys: relevant (bool), reason (str), evaluated (bool)
|
||||||
@ -636,7 +637,8 @@ def evaluate_news_relevance(news_item, gemini_service=None) -> Dict:
|
|||||||
response = gemini_service.generate_text(
|
response = gemini_service.generate_text(
|
||||||
prompt,
|
prompt,
|
||||||
temperature=0.1,
|
temperature=0.1,
|
||||||
feature='zopk_news_evaluation'
|
feature='zopk_news_evaluation',
|
||||||
|
user_id=user_id
|
||||||
)
|
)
|
||||||
|
|
||||||
# Parse JSON response
|
# Parse JSON response
|
||||||
@ -717,7 +719,7 @@ def reevaluate_news_without_score(db_session, limit: int = 50, user_id: int = No
|
|||||||
}
|
}
|
||||||
|
|
||||||
for news in news_to_rescore:
|
for news in news_to_rescore:
|
||||||
result = evaluate_news_relevance(news, gemini)
|
result = evaluate_news_relevance(news, gemini, user_id=user_id)
|
||||||
|
|
||||||
if result['evaluated']:
|
if result['evaluated']:
|
||||||
news.ai_relevant = result['relevant']
|
news.ai_relevant = result['relevant']
|
||||||
@ -798,7 +800,7 @@ def evaluate_pending_news(db_session, limit: int = 50, user_id: int = None) -> D
|
|||||||
}
|
}
|
||||||
|
|
||||||
for news in pending_news:
|
for news in pending_news:
|
||||||
result = evaluate_news_relevance(news, gemini)
|
result = evaluate_news_relevance(news, gemini, user_id=user_id)
|
||||||
|
|
||||||
if result['evaluated']:
|
if result['evaluated']:
|
||||||
news.ai_relevant = result['relevant']
|
news.ai_relevant = result['relevant']
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user