From e799afccc3b95b9b530e9cd767814ec59f8c89bf Mon Sep 17 00:00:00 2001 From: aaron <> Date: Thu, 15 May 2025 19:24:17 +0800 Subject: [PATCH] update --- .../__pycache__/binance_api.cpython-313.pyc | Bin 9729 -> 9804 bytes cryptoai/api/binance_api.py | 7 +-- cryptoai/routes/crypto.py | 47 +++++++++++++++++- docker-compose.yml | 2 +- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/cryptoai/api/__pycache__/binance_api.cpython-313.pyc b/cryptoai/api/__pycache__/binance_api.cpython-313.pyc index 6e4225ab71d1d072a11c172830af4f13ee2c45ae..fe33dda7b1ba7bb29002faf60b44b66684556e1a 100644 GIT binary patch delta 1268 zcmZXTUrbw79LLY^-2UUXmvwC^<8m$A$>uZHfvuKB62(UQuc#8!O?jDk}d;akw$AMJ=k1l{ykLdGFVjWF&SoqTF<_nR+?uvg$DB8xAa z1dK9~zbtSHaRKdV!->h&iELpaiw)=CsAxC|FYYvq*o+s%kye2=fp&oofg=Ll0#U@A zigF{0+u)SY5MBr=~KA>>7P-d`*haqzn&Mvvx$_pS3gK0Dt5< zQ1S$~7RY+#K3?JOivLzhoYfDt(5*wuhgMuGy?1K9n$7pe3fk#aZMdKfZxEv66WAmq zc$8kF*IKXdc^C}e>R9er(N^?AL-&18o}DQKhgO4nA*iE#1b-jOL&t=?t>6ssJMQ7C z=I$2qO^Y0@m+nbgv`)Gg1`*epqxBr@<+*mx_h4Z-nlZ=~Z!3)Q<6afs&P{vo0*r9Y zHwAJ2p3e_Aa<_d;6h6*1RHY?nQk<9;NC~9*r~dNB-Qt>kb}F4Xo;fyS#1lmY$|5GC zMyPjnMvDLG@BM$X!I}>EGRJFL!EEa5>l@@h22wD@J5^s~XH?N;KwwnBBp^N{BQ7v0 z@H$^mpM`V$u9{3AFl(Pg*9p2W8n@m3=ktSSzH8r(^GPG0oi8LWY-jj)>7l16x_&xH z@u~LE7-o1BODTG8H@-;UpuZDxk@iTa5^hVVHimMG+P45pyeAYhU&cv(;me^kFzyU5 s+Ly#+qG-IsZ-#xq`Dfue^%V)c8$@vHh?PL|y2$~}A5?A;blYFR-*Y}IYybcN delta 1198 zcmZWoZERCj7(VCReykt2tn1p{Zl$+(>0Bz}44Vi7({_m&Y!tWCvV~pIehKUPK~C8q zqGb?K_{k0?hClu?jsy)!6T>e-NX#Vs=#3^bjfsENgxF;)#`wqgl)A)ta^L5D&+|U# zJ@38e+{crbCgn|8wj&s?-Wxc*a9#deIgJte1nG!jiWs4oNt7@X4e$`&jd$`m_V?|i zHr-6^U{>8eVxi7nlsDxubJ8Hcj0gFbSn)b(SDSTHwWW9KE`A&PWefGRGhH;aLj0-j z_S8$Yme8tubhF+)Ld?+Dh>3dJd0#v4gN=K@6x~k!VE@%SX>VKKL;IL=N{;l`-XpKu zm5fEaXM1#jm%uiE!aUmZ67Q6EU<-G9L$0J{2vIVHskEPztX!8hY~@vX2=FU;P_j}R zUzRogm+bUFJP0+Y!-K{H2$ec!&vV7KYxulij|LHPpb$!0!$?DOoj|pQ6{U8A);8z) zm!Zz2jW4+lIc!l|7*V+dzV?mlSB&@ZFFL=~7C~5X11zI@D!ra68mVHv^udp*DjNWn zjq>a6*wMoxJR)EcpaQ3eLd+}XaRJ8wmcS~4fdZuh-%JnlBpCXjSQPL_F>0tXo zz|}6V=QRjeR6q=1Q4@UK<>TqDoW;&W`}~(3{udgSg~EI(S80&!yA3H*F0gJ$Rm80d zZI5T2OmW5YysZhDWz_5q@Ci?J=BW#*+GnMkrPb*>j$3cvA6ZKn!RhtjaRZ*2>JPz- zS7TQ%Ts!tNsH!)stLZxdgJSdDf{YG9}=o0FwamuduX$ zQv%NMd)mu5%eStxm+!RR= z_^#t52{Tv pd.DataFrame: + def get_historical_klines(self, symbol: str, interval: str, start_str: Optional[str] = None, end_str: Optional[str] = None, limit: Optional[int] = None, ts_transform: bool = True) -> pd.DataFrame: """ 获取历史K线数据 @@ -114,8 +114,9 @@ class BinanceAPI: ]) # 转换数据类型 - df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms', utc=True).map(lambda x: x.tz_convert('Asia/Shanghai')) - df['close_time'] = pd.to_datetime(df['close_time'], unit='ms', utc=True).map(lambda x: x.tz_convert('Asia/Shanghai')) + if ts_transform: + df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms', utc=True).map(lambda x: x.tz_convert('Asia/Shanghai')) + df['close_time'] = pd.to_datetime(df['close_time'], unit='ms', utc=True).map(lambda x: x.tz_convert('Asia/Shanghai')) for col in ['open', 'high', 'low', 'close', 'volume', 'quote_asset_volume', 'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume']: diff --git a/cryptoai/routes/crypto.py b/cryptoai/routes/crypto.py index f48ca23..39d9846 100644 --- a/cryptoai/routes/crypto.py +++ b/cryptoai/routes/crypto.py @@ -36,7 +36,7 @@ async def get_crypto_kline(symbol: str, timeframe: Optional[str] = None, limit: binance_api = get_binance_api() - kline = binance_api.get_historical_klines(symbol=symbol, interval=timeframe, limit=limit) + kline = binance_api.get_historical_klines(symbol=symbol, interval=timeframe, limit=limit, ts_transform=False) data_processor = DataProcessor() @@ -47,6 +47,51 @@ async def get_crypto_kline(symbol: str, timeframe: Optional[str] = None, limit: return result +@router.post("/analysis_v2") +async def analysis_crypto_v2(request: CryptoAnalysisRequest, + current_user: dict = Depends(get_current_user)): + + if request.symbol.endswith("USDT"): + symbol = request.symbol + else: + symbol = request.symbol + "USDT" + + url = 'https://mate.aimateplus.com/v1/workflows/run' + token = 'app-BbaqIAMPi0ktgaV9IizMlc2N' + headers = { + 'Authorization': f'Bearer {token}', + 'Content-Type': 'application/json' + } + + data = { + "inputs" : { + "symbol" : symbol, + "timeframe" : request.timeframe + }, + "response_mode": "streaming", + "user": current_user["mail"] + } + + # 保存用户提问 + get_db_manager().save_user_question(current_user["id"], symbol, "请分析以下加密货币:" + symbol + ",并给出分析报告。") + + response = requests.post(url, headers=headers, json=data, stream=True) + + # 如果响应不成功,返回错误 + if response.status_code != 200: + raise HTTPException( + status_code=response.status_code, + detail=f"Failed to get response from Dify API: {response.text}" + ) + + # 获取response的stream + def stream_response(): + for chunk in response.iter_content(chunk_size=1024): + if chunk: + yield chunk + + return StreamingResponse(stream_response(), media_type="text/plain") + @router.post("/analysis") async def analysis_crypto(request: CryptoAnalysisRequest, current_user: dict = Depends(get_current_user)): diff --git a/docker-compose.yml b/docker-compose.yml index 47236b4..641728f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,7 +29,7 @@ services: cryptoai-api: build: . container_name: cryptoai-api - image: cryptoai-api:0.0.26 + image: cryptoai-api:0.0.27 restart: always ports: - "8000:8000"