scout / app.py
fudii0921's picture
Update app.py
3568707 verified
import gradio as gr
from gradio import ChatMessage
#from crewai.tools import tool, BaseTool
from groq import Groq
import requests
import uvicorn
import os
import mysql.connector
from qdrant_client import QdrantClient
from autogen import AssistantAgent, UserProxyAgent, GroupChat, GroupChatManager
from autogen.agentchat.contrib.retrieve_user_proxy_agent import RetrieveUserProxyAgent
# MySQLに接続
conn = mysql.connector.connect(
host="www.ryhintl.com",
user="smairuser",
password="smairuser",
port=36000,
database="smair"
)
# カーソルを取得
cursor = conn.cursor(dictionary=True)
# List API Keys
select_one_data_query = "SELECT * FROM agentic_apis"
cursor.execute(select_one_data_query)
result = cursor.fetchall()
# JSONをパースしてkeyを抽出
keys = [item['key'] for item in result]
os.environ["GROQ_API_KEY"] = keys[2]
os.environ["COHERE_API_KEY"] = keys[3]
js = """
function createGradioAnimation() {
var container = document.createElement('div');
container.id = 'gradio-animation';
container.style.fontSize = '2em';
container.style.fontWeight = 'bold';
container.style.textAlign = 'center';
container.style.marginBottom = '20px';
var text = 'プロジェクト・マッチング候補者のガイドライン';
for (var i = 0; i < text.length; i++) {
(function(i){
setTimeout(function(){
var letter = document.createElement('span');
var randomColor = "#" + Math.floor(Math.random() * 16777215).toString(16);
letter.style.color = randomColor;
letter.style.opacity = '0';
letter.style.transition = 'opacity 0.5s';
letter.innerText = text[i];
container.appendChild(letter);
setTimeout(function() {
letter.style.opacity = '1';
}, 50);
}, i * 250);
})(i);
}
var gradioContainer = document.querySelector('.gradio-container');
gradioContainer.insertBefore(container, gradioContainer.firstChild);
return 'Animation created';
}
"""
sel_method = "COHERE"
def on_change(selected_option):
global sel_method
sel_method = selected_option
return f"選択されたオプション: {selected_option}"
async def autogen(qry: str):
# Prompts
userPrompt=qry
assistant="あなたはヘッドハンティング会社のアナリストです。"
ragproxyagent="あなたは高度な知識を持つヘッドハンティング会社の上席コンサルタントです。assistantによる応答を分析し、詳細情報を提供します。"
global sel_method
if sel_method == "COHERE":
# Cohere config
config_list = [
{
"model": "command-r-plus-08-2024",
"api_key": os.environ["COHERE_API_KEY"],
"api_type": "cohere",
}
]
else:
# GROQ config
config_list = [
{
"model": "llama-3.3-70b-versatile",
"api_key": os.environ["GROQ_API_KEY"],
"api_type": "groq",
}
]
assistant = AssistantAgent(
name="assistant",
system_message="You are a helpful assistant.",
llm_config={
"timeout": 600,
"cache_seed": 42,
"config_list": config_list,
},
)
client = QdrantClient(url="https://02cbe366-829e-43a6-adf5-3b712a886c21.us-west-1-0.aws.cloud.qdrant.io", api_key="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3MiOiJtIn0.hWu5_qKaYHUhuMAjUScqw1R_1kkXiidv337wuGKcu9o")
# Create user proxy agent RetrieveUserProxyAgent(
ragproxyagent = RetrieveUserProxyAgent(
name="ragproxyagent",
human_input_mode="NEVER",
max_consecutive_auto_reply=3,
retrieve_config = {
"task": "qa",
"docs_path": [
"https://www.ryhintl.com/hunting.md"
],
"chunk_token_size": 2000,
"model": config_list[0]["model"],
"vector_db": "qdrant", # Qdrant Cloud database
"collection_name": "scouter_base",
#"db_config": {
#"connection_string": "https://02cbe366-829e-43a6-adf5-3b712a886c21.us-west-1-0.aws.cloud.qdrant.io", # Qdrant Cloud connection string
#"api_key": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3MiOiJtIn0.hWu5_qKaYHUhuMAjUScqw1R_1kkXiidv337wuGKcu9o", # Qdrant Cloud API key
#"database_name": "human_database", # Qdrant Cloud database (if applicable)
#"index_name": "scout_index",
#"wait_until_index_ready": 120.0, # Setting to wait 120 seconds or until index is constructed before querying
#"wait_until_document_ready": 120.0, # Setting to wait 120 seconds or until document is properly indexed after insertion/update
#},
"db_config": {"client": client},
"get_or_create": True, # set to False if you don't want to reuse an existing collection
"overwrite": True, # set to True if you want to overwrite an existing collection, each overwrite will force a index creation and reupload of documents
},
code_execution_config=False, # set to False if you don't want to execute the code
)
# Create a group chat between all agents
groupChat = GroupChat(
agents=[assistant, ragproxyagent],
messages=[],
max_round=3,
)
groupChatManager = GroupChatManager(
groupchat=groupChat,
llm_config={"config_list": config_list}
)
# Initiate the chat using the User Proxy Agent and pass the user prompt
#chat_result = ragproxyagent.initiate_chat(
#groupChatManager,
#message=userPrompt
#)
chat_result = ragproxyagent.initiate_chat(assistant, message=ragproxyagent.message_generator, problem=userPrompt)
#user_contents = [entry['content'] for entry in chat_result['chat_history'] if entry['role'] == 'user']
#chat_result = ragproxyagent.initiate_chat(assistant, message=userPrompt)
#print(chat_result)
chat_result_dict = vars(chat_result)
user_contents = [entry['content'] for entry in chat_result_dict['chat_history'] if entry['role'] == 'user']
#print("user_contents")
#print(user_contents)
#print("\n\n")
#print(user_contents[0])
#return user_contents[0]
basic_content = [entry["content"] for entry in chat_result_dict["chat_history"] if entry["role"] == "assistant"]
#print("basic_content")
#print(basic_content)
#return basic_content
return user_contents[0]+"\n\n"+basic_content[0]
#user_contents = [entry['content'] for entry in chat_result['chat_history'] if entry['role'] == 'user']
#basic_content = [entry["content"] for entry in chat_result_dict["chat_history"] if entry["name"] == "Basic_Assistant_Agent"]
#professional_content = [entry["content"] for entry in chat_result_dict["chat_history"] if entry["name"] == "Professional_Assistant_Agent"]
#professional_content = [entry['content'] for entry in chat_result['chat_history'] if entry['name'] == 'Professional_Assistant_Agent']
#summary = chat_result['summary']
#return chat_result
#comments = "Basic Assitant: \n"+str(basic_content[0])+"\n\nProfessional Assistant: \n"+str(professional_content[0])
#return comments
#return professional_content[0]
def process_rag(prompt):
if prompt == "":
return "プロンプトを入力してください。", "プロンプトは必須です。"
else:
url = 'http://www.ryhintl.com/eprag-be/llm?query='+prompt
res = requests.get(url)
rtn = res.content.decode('utf-8')
return rtn
def process_eprag(prompt):
if prompt == "":
return "プロンプトを入力してください。", "プロンプトは必須です。"
else:
client = Groq(api_key=os.environ["GROQ_API_KEY"])
# Set the system prompt
system_prompt = {
"role": "system",
"content": "あなたは便利なアシスタントです。質問には簡潔に答えてください。"
}
# Set the user prompt
user_input = prompt
user_prompt = {
"role": "user", "content": user_input
}
# Initialize the chat history
chat_history = [system_prompt, user_prompt]
response = client.chat.completions.create(
#model="llama3-70b-8192",
model="llama-3.3-70b-versatile",
messages=chat_history,
max_tokens=1024,
temperature=0)
return response.choices[0].message.content
with gr.Blocks(js=js,title="人材スカウトのガイドライン") as llm:
with gr.Tab("LLM"):
gr.Markdown("# 🗞️ LLM")
gr.Text(label="AIプロジェクト計画の実施の人材スカウト",value="弊社(スカウトファーム)は株式会社トータルソリューションズのAIプロジェクトの立ち上げに必要な専門知識を持っている人材が不足して悩んでいます。AIに関する専門知識を持っている専門家とPYTHONやAGENTの経験を持っている技術者を候補者リストDBから取得、分析し、AIプロジェクトの立ち上げをするための候補者をアドバイスします。",lines=3)
with gr.Row():
eprag_input = gr.Textbox(value="トータルソリューションズのAIプロジェクトの立ち上げに必要な専門知識を持っている人材が不足して悩んでいます。AIに関する専門知識を持っている専門家とPYTHONやAGENTの経験を持っている技術者をリスティングして、アドバイスしてください。",lines=5,label="プロンプト", type="text")
with gr.Row():
eprag_output = gr.Textbox(label="AIアシスタントの応答")
submit_button = gr.Button("LLM プロセス", variant="primary")
submit_button.click(
process_eprag,
inputs=[eprag_input],
outputs=[eprag_output]
)
with gr.Tab("RAG"):
gr.Markdown("# 🗞️ RAG")
gr.Text(label="AIプロジェクト計画の実施の人材スカウト",value="弊社(スカウトファーム)は株式会社トータルソリューションズのAIプロジェクトの立ち上げに必要な専門知識を持っている人材が不足して悩んでいます。AIに関する専門知識を持っている専門家とPYTHONやAGENTの経験を持っている技術者を候補者リストDBから取得、分析し、AIプロジェクトの立ち上げをするための候補者をアドバイスします。",lines=3)
with gr.Row():
rag_input = gr.Textbox(value="トータルソリューションズのAIプロジェクトの立ち上げに必要な専門知識を持っている人材が不足して悩んでいます。AIに関する専門知識を持っている専門家とPYTHONやAGENTの経験を持っている技術者をリスティングして、アドバイスしてください。",lines=5,label="プロンプト", type="text")
with gr.Row():
rag_output = gr.Textbox(label="AIアシスタントの応答")
submit_button = gr.Button("RAG プロセス", variant="primary")
submit_button.click(
process_rag,
inputs=[rag_input],
outputs=[rag_output]
)
with gr.Tab("AGENT AUTOGEN"):
gr.Markdown("# 🗞️ AGENTIC RAG AUTOGEN")
gr.Text(label="AIプロジェクト計画の実施の人材スカウト",value="弊社(スカウトファーム)は株式会社トータルソリューションズのAIプロジェクトの立ち上げに必要な専門知識を持っている人材が不足して悩んでいます。AIに関する専門知識を持っている専門家とPYTHONやAGENTの経験を持っている技術者を候補者リストDBから取得、分析し、AIプロジェクトの立ち上げをするための候補者をアドバイスします。",lines=3)
with gr.Row():
auto_input = gr.Textbox(value="トータルソリューションズのAIプロジェクトの立ち上げに必要な専門知識を持っている人材が不足して悩んでいます。AIに関する専門知識を持っている専門家とPYTHONやAGENTの経験を持っている技術者をリスティングして、アドバイスしてください。",lines=5,label="プロンプト", type="text")
with gr.Row():
method = gr.Dropdown(
["COHERE", "GROQ"], label="LLM", info="LLMを選んでください"
)
selected_method = gr.Text(label="Method", visible=False)
method.change(on_change, inputs=method, outputs=selected_method)
with gr.Row():
auto_output = gr.Textbox(label="AIアシスタントの応答")
submit_button = gr.Button("AUTOGEN プロセス", variant="primary")
submit_button.click(
autogen,
inputs=[auto_input],
outputs=[auto_output]
)
if __name__ == "__main__":
llm.launch()