File size: 2,743 Bytes
e90c1d5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
from flask import Flask, request, jsonify
import os
from langchain.prompts import ChatPromptTemplate
from langchain.agents import Tool, create_openai_tools_agent, AgentExecutor
from langchain_core.prompts import MessagesPlaceholder
from skills.vision import get_chat_completion
from skills.serch import search_tool
from skills.wiki import wikipedia_tool
from langchain_groq import ChatGroq
# Initialize the Groq API key
GROQ_API_KEY = "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" # Replace with your actual API key
os.environ["GROQ_API_KEY"] = GROQ_API_KEY
# Initialize the Groq LLM
llm = ChatGroq(
model_name="mixtral-8x7b-32768",
temperature=0.7,
max_tokens=4096
)
def analyse(query):
response = get_chat_completion(query,image_file)
return response
# Initialize external tools
tools = [
Tool(name="analyseimage", func=analyse, description="Tool for image vision LLM model queries"),
Tool(name="Search", func=search_tool, description="Search the internet for current information"),
Tool(name="Wikipedia", func=wikipedia_tool, description="Query Wikipedia for detailed topic information"),
]
# Create the agent prompt
template_messages = [
("system", "You are an AI assistant capable of using tools to analyze images, search the internet, and query Wikipedia."),
("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
]
prompt = ChatPromptTemplate.from_messages(template_messages)
# Create the agent
agent = create_openai_tools_agent(llm=llm, tools=tools, prompt=prompt)
# Create the agent executor
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
handle_parsing_errors=True
)
# Initialize Flask app
app = Flask(__name__)
@app.route('/analyze', methods=['POST'])
def analyze():
global image_file
global query
try:
query = request.form.get('query')
if not query:
return jsonify({"error": "Query is required"}), 400
image_file = request.files.get('image')
response = agent_executor.invoke({"input": query})
return jsonify({"response": response["output"]})
except Exception as e:
return jsonify({"error": f"Server error: {str(e)}"}), 500
# CORS Headers
@app.after_request
def after_request(response):
response.headers.add('Access-Control-Allow-Origin', '*')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type')
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
return response
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=5000)
|