fix
This commit is contained in:
+125
-2
@@ -7,6 +7,8 @@ from fastapi import FastAPI, HTTPException
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import List, Optional
|
||||
import uuid
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from ai_service.models.model_service import model_service
|
||||
from ai_service.models.chat_service import chat_service
|
||||
@@ -120,7 +122,7 @@ async def test_ollama_connection():
|
||||
|
||||
try:
|
||||
# Try to connect to Ollama API
|
||||
response = requests.get(f"{config.OLLAMA_API_URL}/api/tags", timeout=5)
|
||||
response = requests.get(f"{config.OLLAMA_API_URL}/api/tags", timeout=config.API_TIMEOUT)
|
||||
response.raise_for_status()
|
||||
|
||||
# Return the models from Ollama
|
||||
@@ -130,6 +132,106 @@ async def test_ollama_connection():
|
||||
"ollama_url": config.OLLAMA_API_URL,
|
||||
"models": response.json()
|
||||
}
|
||||
except requests.exceptions.Timeout as e:
|
||||
return {
|
||||
"status": "error",
|
||||
"message": f"Timeout connecting to Ollama API: {str(e)}. The request exceeded the {config.API_TIMEOUT} second timeout.",
|
||||
"ollama_url": config.OLLAMA_API_URL
|
||||
}
|
||||
except requests.exceptions.ConnectionError as e:
|
||||
return {
|
||||
"status": "error",
|
||||
"message": f"Connection error to Ollama API: {str(e)}. Please check if Ollama is running at {config.OLLAMA_API_URL}.",
|
||||
"ollama_url": config.OLLAMA_API_URL
|
||||
}
|
||||
except Exception as e:
|
||||
return {
|
||||
"status": "error",
|
||||
"message": f"Failed to connect to Ollama API: {str(e)}",
|
||||
"ollama_url": config.OLLAMA_API_URL
|
||||
}
|
||||
|
||||
@app.post("/test-chat")
|
||||
async def test_chat_completion():
|
||||
"""
|
||||
Test the chat completion with a simple prompt.
|
||||
|
||||
Returns:
|
||||
Model response.
|
||||
"""
|
||||
try:
|
||||
# Use the model service directly
|
||||
response = model_service.generate_response(
|
||||
model_id=config.DEFAULT_MODEL,
|
||||
prompt="Hello, how are you?",
|
||||
context=[],
|
||||
use_rag=False
|
||||
)
|
||||
|
||||
return {
|
||||
"status": "success",
|
||||
"model": config.DEFAULT_MODEL,
|
||||
"response": response,
|
||||
"ollama_url": config.OLLAMA_API_URL
|
||||
}
|
||||
except Exception as e:
|
||||
return {
|
||||
"status": "error",
|
||||
"message": f"Failed to get chat completion: {str(e)}",
|
||||
"ollama_url": config.OLLAMA_API_URL
|
||||
}
|
||||
|
||||
@app.post("/test-ollama-direct")
|
||||
async def test_ollama_direct():
|
||||
"""
|
||||
Test the Ollama API directly with a simple chat request.
|
||||
|
||||
Returns:
|
||||
Raw Ollama API response.
|
||||
"""
|
||||
import requests
|
||||
|
||||
try:
|
||||
# Prepare a simple chat request
|
||||
request_json = {
|
||||
"model": config.DEFAULT_MODEL,
|
||||
"messages": [
|
||||
{"role": "system", "content": "You are a helpful assistant."},
|
||||
{"role": "user", "content": "Hello, how are you?"}
|
||||
],
|
||||
"stream": False
|
||||
}
|
||||
|
||||
# Make the API call to Ollama
|
||||
print(f"Sending direct request to Ollama API at: {config.OLLAMA_API_URL}/api/chat")
|
||||
response = requests.post(
|
||||
f"{config.OLLAMA_API_URL}/api/chat",
|
||||
headers={"Content-Type": "application/json"},
|
||||
json=request_json,
|
||||
timeout=config.API_TIMEOUT
|
||||
)
|
||||
|
||||
response.raise_for_status()
|
||||
result = response.json()
|
||||
|
||||
return {
|
||||
"status": "success",
|
||||
"ollama_url": config.OLLAMA_API_URL,
|
||||
"request": request_json,
|
||||
"response": result
|
||||
}
|
||||
except requests.exceptions.Timeout as e:
|
||||
return {
|
||||
"status": "error",
|
||||
"message": f"Timeout connecting to Ollama API: {str(e)}. The request exceeded the {config.API_TIMEOUT} second timeout.",
|
||||
"ollama_url": config.OLLAMA_API_URL
|
||||
}
|
||||
except requests.exceptions.ConnectionError as e:
|
||||
return {
|
||||
"status": "error",
|
||||
"message": f"Connection error to Ollama API: {str(e)}. Please check if Ollama is running at {config.OLLAMA_API_URL}.",
|
||||
"ollama_url": config.OLLAMA_API_URL
|
||||
}
|
||||
except Exception as e:
|
||||
return {
|
||||
"status": "error",
|
||||
@@ -151,6 +253,7 @@ async def get_config():
|
||||
"openwebui_url": config.OPENWEBUI_URL,
|
||||
"ollama_api_url": config.OLLAMA_API_URL,
|
||||
"default_model": config.DEFAULT_MODEL,
|
||||
"api_timeout": config.API_TIMEOUT,
|
||||
"available_models": list(model_service.AVAILABLE_MODELS.keys())
|
||||
}
|
||||
|
||||
@@ -251,6 +354,11 @@ async def send_message(chat_id: str, request: MessageRequest):
|
||||
Bot response message.
|
||||
"""
|
||||
try:
|
||||
print(f"Processing message for chat {chat_id} from user {request.user_id}")
|
||||
print(f"Message: {request.message[:50]}...") # Print first 50 chars of message
|
||||
print(f"Using RAG: {request.use_rag}")
|
||||
print(f"Model parameters: temperature={request.temperature}, max_tokens={request.max_tokens}")
|
||||
|
||||
# Extract model parameters from the request
|
||||
response = chat_service.get_chat_response(
|
||||
chat_id=chat_id,
|
||||
@@ -270,10 +378,25 @@ async def send_message(chat_id: str, request: MessageRequest):
|
||||
function_calling=request.function_calling
|
||||
)
|
||||
|
||||
print(f"Response received. Length: {len(response.get('content', ''))}")
|
||||
return response
|
||||
|
||||
except ValueError as e:
|
||||
raise HTTPException(status_code=404, detail=str(e))
|
||||
error_msg = f"Chat not found: {str(e)}"
|
||||
print(f"ERROR: {error_msg}")
|
||||
raise HTTPException(status_code=404, detail=error_msg)
|
||||
except Exception as e:
|
||||
error_msg = f"Error processing message: {str(e)}"
|
||||
print(f"ERROR: {error_msg}")
|
||||
# Return an error message instead of raising an exception
|
||||
# This ensures the client gets a proper response
|
||||
return {
|
||||
"id": str(uuid.uuid4()),
|
||||
"content": f"Error processing message: {str(e)}",
|
||||
"user_id": None,
|
||||
"is_user_message": False,
|
||||
"timestamp": datetime.now(timezone.utc).isoformat()
|
||||
}
|
||||
|
||||
@app.post("/chats/{chat_id}/members/{user_id}")
|
||||
async def add_team_member(chat_id: str, user_id: str):
|
||||
|
||||
Reference in New Issue
Block a user