This commit is contained in:
2026-04-16 17:21:48 +03:00
parent c8fa4c442d
commit c8e7e4e927
116 changed files with 3720 additions and 4197 deletions
@@ -1,10 +1,10 @@
import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common';
import axios from 'axios';
import { GeminiService } from '../../gemini/gemini.service';
import { HttpException, HttpStatus, Injectable, Logger } from "@nestjs/common";
import axios from "axios";
import { GeminiService } from "../../gemini/gemini.service";
export type PredictionRiskLevel = 'LOW' | 'MEDIUM' | 'HIGH' | 'EXTREME';
export type PredictionDataQuality = 'HIGH' | 'MEDIUM' | 'LOW';
export type BetGrade = 'A' | 'B' | 'C' | 'PASS';
export type PredictionRiskLevel = "LOW" | "MEDIUM" | "HIGH" | "EXTREME";
export type PredictionDataQuality = "HIGH" | "MEDIUM" | "LOW";
export type BetGrade = "A" | "B" | "C" | "PASS";
export interface PredictionPickRow {
market: string;
@@ -128,7 +128,7 @@ export class SmartCouponService {
private readonly aiEngineUrl: string;
constructor(private readonly geminiService: GeminiService) {
this.aiEngineUrl = process.env.AI_ENGINE_URL || 'http://ai-engine:8000';
this.aiEngineUrl = process.env.AI_ENGINE_URL || "http://ai-engine:8000";
}
async analyzeMatch(matchId: string): Promise<SingleMatchPredictionPackage> {
@@ -147,7 +147,7 @@ export class SmartCouponService {
);
}
throw new HttpException(
'AI analyze failed',
"AI analyze failed",
HttpStatus.SERVICE_UNAVAILABLE,
);
}
@@ -168,7 +168,7 @@ export class SmartCouponService {
const result = await this.geminiService.generateText(
JSON.stringify(prediction, null, 2),
{
model: 'gemini-2.0-flash',
model: "gemini-2.0-flash",
temperature: 0.7,
maxTokens: 600,
systemPrompt: MATCH_COMMENTARY_SYSTEM_PROMPT,
@@ -176,7 +176,7 @@ export class SmartCouponService {
);
return result.text || null;
} catch (error) {
this.logger.warn('AI commentary generation failed, skipping', error);
this.logger.warn("AI commentary generation failed, skipping", error);
return null;
}
}
@@ -188,7 +188,7 @@ export class SmartCouponService {
return null;
}
return this.getSmartCoupon(matchIds, 'SAFE', {
return this.getSmartCoupon(matchIds, "SAFE", {
maxMatches: 2,
minConfidence: 78,
});
@@ -197,11 +197,11 @@ export class SmartCouponService {
async getSmartCoupon(
matchIds: string[],
strategy:
| 'SAFE'
| 'BALANCED'
| 'AGGRESSIVE'
| 'VALUE'
| 'MIRACLE' = 'BALANCED',
| "SAFE"
| "BALANCED"
| "AGGRESSIVE"
| "VALUE"
| "MIRACLE" = "BALANCED",
options: { maxMatches?: number; minConfidence?: number } = {},
): Promise<SmartCouponResult> {
try {
@@ -216,7 +216,7 @@ export class SmartCouponService {
);
return response.data;
} catch (error) {
this.logger.error('Failed to generate smart coupon', error);
this.logger.error("Failed to generate smart coupon", error);
if (axios.isAxiosError(error)) {
const detail = error.response?.data?.detail || error.message;
throw new HttpException(
@@ -225,7 +225,7 @@ export class SmartCouponService {
);
}
throw new HttpException(
'Coupon generation failed',
"Coupon generation failed",
HttpStatus.SERVICE_UNAVAILABLE,
);
}