Ganesh Chintalapati commited on
Commit
bc2875c
·
1 Parent(s): 75a63b2

Working files locally testing

Browse files
Files changed (1) hide show
  1. app.py +90 -6
app.py CHANGED
@@ -1,8 +1,21 @@
1
  import os
 
2
  from fastapi import FastAPI, Request
3
  from pydantic import BaseModel
4
  from fastapi.responses import JSONResponse
5
  import httpx
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
  app = FastAPI()
8
 
@@ -23,19 +36,20 @@ async def ask_question(request: QueryRequest):
23
  if provider == "openai":
24
  return await ask_openai(query)
25
  elif provider == "anthropic":
26
- return {"error": "Anthropic support not implemented yet"}
27
  elif provider == "gemini":
28
- return {"error": "Gemini support not implemented yet"}
29
  else:
30
  return JSONResponse(content={"error": f"Unknown provider: {provider}"}, status_code=400)
31
  except Exception as e:
 
32
  return JSONResponse(content={"error": str(e)}, status_code=500)
33
 
34
  async def ask_openai(query: str):
35
  openai_api_key = os.getenv("OPENAI_API_KEY")
36
-
37
  if not openai_api_key:
38
- return {"error": "API key not provided."}
 
39
 
40
  headers = {
41
  "Authorization": f"Bearer {openai_api_key}",
@@ -56,6 +70,76 @@ async def ask_openai(query: str):
56
  return {"response": answer}
57
 
58
  except httpx.HTTPStatusError as e:
59
- return {"error": f"HTTP Status Error: {e.response.status_code}, {e.response.text}"}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
  except Exception as e:
61
- return {"error": f"An error occurred: {str(e)}"}
 
 
1
  import os
2
+ import logging
3
  from fastapi import FastAPI, Request
4
  from pydantic import BaseModel
5
  from fastapi.responses import JSONResponse
6
  import httpx
7
+ from dotenv import load_dotenv
8
+
9
+ # Configure logging
10
+ logging.basicConfig(level=logging.INFO)
11
+ logger = logging.getLogger(__name__)
12
+
13
+ # Load environment variables from .env file
14
+ load_dotenv()
15
+ logger.info("Environment variables loaded from .env file")
16
+ logger.info(f"OPENAI_API_KEY present: {'OPENAI_API_KEY' in os.environ}")
17
+ logger.info(f"ANTHROPIC_API_KEY present: {'ANTHROPIC_API_KEY' in os.environ}")
18
+ logger.info(f"GEMINI_API_KEY present: {'GEMINI_API_KEY' in os.environ}")
19
 
20
  app = FastAPI()
21
 
 
36
  if provider == "openai":
37
  return await ask_openai(query)
38
  elif provider == "anthropic":
39
+ return await ask_anthropic(query)
40
  elif provider == "gemini":
41
+ return await ask_gemini(query)
42
  else:
43
  return JSONResponse(content={"error": f"Unknown provider: {provider}"}, status_code=400)
44
  except Exception as e:
45
+ logger.error(f"Error processing request: {str(e)}")
46
  return JSONResponse(content={"error": str(e)}, status_code=500)
47
 
48
  async def ask_openai(query: str):
49
  openai_api_key = os.getenv("OPENAI_API_KEY")
 
50
  if not openai_api_key:
51
+ logger.error("OpenAI API key not provided")
52
+ return {"error": "OpenAI API key not provided."}
53
 
54
  headers = {
55
  "Authorization": f"Bearer {openai_api_key}",
 
70
  return {"response": answer}
71
 
72
  except httpx.HTTPStatusError as e:
73
+ logger.error(f"OpenAI HTTP Status Error: {e.response.status_code}, {e.response.text}")
74
+ return {"error": f"OpenAI HTTP Status Error: {e.response.status_code}, {e.response.text}"}
75
+ except Exception as e:
76
+ logger.error(f"OpenAI Error: {str(e)}")
77
+ return {"error": f"OpenAI Error: {str(e)}"}
78
+
79
+ async def ask_anthropic(query: str):
80
+ anthropic_api_key = os.getenv("ANTHROPIC_API_KEY")
81
+ if not anthropic_api_key:
82
+ logger.error("Anthropic API key not provided")
83
+ return {"error": "Anthropic API key not provided."}
84
+
85
+ headers = {
86
+ "x-api-key": anthropic_api_key,
87
+ "anthropic-version": "2023-06-01",
88
+ "Content-Type": "application/json"
89
+ }
90
+
91
+ payload = {
92
+ "model": "claude-3-5-sonnet-20241022",
93
+ "max_tokens": 1024,
94
+ "messages": [{"role": "user", "content": query}]
95
+ }
96
+
97
+ try:
98
+ async with httpx.AsyncClient() as client:
99
+ logger.info(f"Sending Anthropic request: {payload}")
100
+ response = await client.post("https://api.anthropic.com/v1/messages", headers=headers, json=payload)
101
+
102
+ response.raise_for_status()
103
+ logger.info(f"Anthropic response: {response.json()}")
104
+ answer = response.json()['content'][0]['text']
105
+ return {"response": answer}
106
+
107
+ except httpx.HTTPStatusError as e:
108
+ logger.error(f"Anthropic HTTP Status Error: {e.response.status_code}, {e.response.text}")
109
+ return {"error": f"Anthropic HTTP Status Error: {e.response.status_code}, {e.response.text}"}
110
+ except Exception as e:
111
+ logger.error(f"Anthropic Error: {str(e)}")
112
+ return {"error": f"Anthropic Error: {str(e)}"}
113
+
114
+ async def ask_gemini(query: str):
115
+ gemini_api_key = os.getenv("GEMINI_API_KEY")
116
+ if not gemini_api_key:
117
+ logger.error("Gemini API key not provided")
118
+ return {"error": "Gemini API key not provided."}
119
+
120
+ headers = {
121
+ "Content-Type": "application/json"
122
+ }
123
+
124
+ payload = {
125
+ "contents": [{"parts": [{"text": query}]}]
126
+ }
127
+
128
+ try:
129
+ async with httpx.AsyncClient() as client:
130
+ response = await client.post(
131
+ f"https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key={gemini_api_key}",
132
+ headers=headers,
133
+ json=payload
134
+ )
135
+
136
+ response.raise_for_status()
137
+ answer = response.json()['candidates'][0]['content']['parts'][0]['text']
138
+ return {"response": answer}
139
+
140
+ except httpx.HTTPStatusError as e:
141
+ logger.error(f"Gemini HTTP Status Error: {e.response.status_code}, {e.response.text}")
142
+ return {"error": f"Gemini HTTP Status Error: {e.response.status_code}, {e.response.text}"}
143
  except Exception as e:
144
+ logger.error(f"Gemini Error: {str(e)}")
145
+ return {"error": f"Gemini Error: {str(e)}"}