Files
robinhood/backend/app/api/ollama.py
T
Krikorios 48e60d015f feat: Add Phase 4 advanced metrics and components
- Add advanced metrics dashboard with trade analytics
- Add new trading components (EntryTypeAnalysis, MultiDayPositionTracker, NewsEventTracker, etc.)
- Add strategy mode selector and trend confirmation
- Add risk automation panel and slippage correlation analysis
- Add daily trading plan enhancements with modal components
- Add custom hooks (useApi, useLocalStorage, useAdvancedTradeMetrics)
- Add broker service integration and trading API
- Add test setup and vitest configuration
- Include parquet data files for live market data
- Add comprehensive documentation in docs/ folder
2025-11-27 10:23:58 +02:00

126 lines
3.2 KiB
Python

"""
Ollama API endpoints for local AI status and simple tasks.
"""
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import Optional, List
from app.services.ollama_service import ollama_service
from app.config import settings
router = APIRouter(prefix="/api/ollama", tags=["Local AI"])
class OllamaStatus(BaseModel):
available: bool
model: str
embed_model: str
base_url: str
class GenerateRequest(BaseModel):
prompt: str
system: Optional[str] = None
temperature: float = 0.7
max_tokens: int = 500
class GenerateResponse(BaseModel):
response: Optional[str]
model: str
success: bool
class SentimentRequest(BaseModel):
text: str
class SentimentResponse(BaseModel):
sentiment: Optional[str]
confidence: Optional[float]
success: bool
class ClassifyRequest(BaseModel):
text: str
categories: List[str]
class ClassifyResponse(BaseModel):
category: Optional[str]
success: bool
class SummarizeRequest(BaseModel):
text: str
max_sentences: int = 2
class SummarizeResponse(BaseModel):
summary: Optional[str]
success: bool
@router.get("/status", response_model=OllamaStatus)
async def get_ollama_status():
"""Check if Ollama is available and configured."""
available = await ollama_service.is_available()
return OllamaStatus(
available=available,
model=settings.OLLAMA_MODEL,
embed_model=settings.OLLAMA_MODEL_EMBED,
base_url=settings.OLLAMA_BASE_URL
)
@router.post("/generate", response_model=GenerateResponse)
async def generate_text(request: GenerateRequest):
"""Generate text using local Ollama model."""
result = await ollama_service.generate(
prompt=request.prompt,
system=request.system,
temperature=request.temperature,
max_tokens=request.max_tokens
)
return GenerateResponse(
response=result,
model=settings.OLLAMA_MODEL,
success=result is not None
)
@router.post("/sentiment", response_model=SentimentResponse)
async def analyze_sentiment(request: SentimentRequest):
"""Quick sentiment analysis using local model."""
result = await ollama_service.quick_sentiment(request.text)
if result:
return SentimentResponse(
sentiment=result.get("sentiment"),
confidence=result.get("confidence"),
success=True
)
return SentimentResponse(sentiment=None, confidence=None, success=False)
@router.post("/classify", response_model=ClassifyResponse)
async def classify_text(request: ClassifyRequest):
"""Classify text into one of the provided categories."""
result = await ollama_service.quick_classify(request.text, request.categories)
return ClassifyResponse(
category=result,
success=result is not None
)
@router.post("/summarize", response_model=SummarizeResponse)
async def summarize_text(request: SummarizeRequest):
"""Quick text summarization using local model."""
result = await ollama_service.quick_summarize(
text=request.text,
max_sentences=request.max_sentences
)
return SummarizeResponse(
summary=result,
success=result is not None
)