Spaces:
Sleeping
Sleeping
| from agents import Agent, ModelSettings, Runner, RunConfig,OpenAIResponsesModel ,AsyncOpenAI,function_tool,OpenAIChatCompletionsModel | |
| from pydantic import BaseModel | |
| from datetime import datetime, date | |
| from dotenv import load_dotenv | |
| load_dotenv(dotenv_path="./.env.local") | |
| import asyncio | |
| from typing import List | |
| from .VectorDBManagers import VectorDBManager | |
| from chatkit.agents import AgentContext | |
| import os | |
| import nest_asyncio | |
| nest_asyncio.apply() | |
| from .function_tool import suggestion_ragtool | |
| kimi_model = OpenAIResponsesModel( | |
| model="moonshotai/kimi-k2-instruct-0905", # Valid Groq model | |
| openai_client=AsyncOpenAI( | |
| base_url="https://api.groq.com/openai/v1", | |
| api_key=os.getenv("GROQ_API_KEY"), | |
| ) | |
| ) | |
| google_model = OpenAIChatCompletionsModel( | |
| model="google/gemini-2.5-flash", # Google Gemini via OpenRouter | |
| openai_client=AsyncOpenAI( | |
| base_url="https://openrouter.ai/api/v1", | |
| api_key=os.getenv("OPENROUTER_API_KEY"), | |
| ) | |
| ) | |
| deepseek_model = OpenAIChatCompletionsModel( | |
| model="deepseek/deepseek-chat", # DeepSeek via OpenRouter | |
| openai_client=AsyncOpenAI( | |
| base_url="https://openrouter.ai/api/v1", | |
| api_key=os.getenv("OPENROUTER_API_KEY"), | |
| ) | |
| ) | |
| sumary_model = OpenAIResponsesModel( | |
| model="meta-llama/llama-4-scout-17b-16e-instruct", # Valid Groq model | |
| openai_client=AsyncOpenAI( | |
| base_url="https://api.groq.com/openai/v1", | |
| api_key=os.getenv("GROQ_API_KEY") | |
| ) | |
| ) | |
| def build_sugguestion_information_agent()-> Agent[AgentContext]: | |
| current_time = datetime.now() | |
| current_date = date.today() | |
| current_day = datetime.today().strftime("%A") | |
| information_agent = Agent[AgentContext]( | |
| name="company_suggestion_information", | |
| instructions=( | |
| "You are an information agent and customer service representative for the company. " | |
| "Your goal is to provide clear, concise answers using ONLY the suggestion_ragtool tool. " | |
| "For greeting do not call tool reply by your self add company name " | |
| "Always speak as the company using 'we'. Do NOT guess or assume. " | |
| "If information is not found, reply politely: " | |
| "phraphse according to your intellgence 'No information is available regarding to this . You may book an appointment or speak to our sales agent for more details.' praphrase it " | |
| "Make only ONE suggestion_ragtool query that fully represents the user’s request. " | |
| "All company-related answers must come strictly from the suggestion_ragtool tool. " | |
| "Do not create or assume any details. Always use the correct company name. " | |
| "The suggestion_ragtool result is your official answer. " | |
| "Respond in under not more than 80 words, in a friendly customer-service tone. " | |
| "Never leave incomplete replies and never ignore earlier conversation context. " | |
| "As a customer support agent, always answer using official company information found through the suggestion_ragtool tool. for partcular question liek greeting and user info if you have so do not use tool reply by self " | |
| f"Current system time : {current_time}, date: {current_date}, day: {current_day}. " | |
| ), | |
| model=deepseek_model, | |
| tools=[ | |
| suggestion_ragtool | |
| ], | |
| model_settings=ModelSettings( | |
| temperature=1, | |
| top_p=1, | |
| max_tokens=2048, | |
| ), | |
| ) | |
| return information_agent | |
| def build_summarizer_agent() -> Agent[AgentContext]: | |
| """ | |
| Creates a summarizer agent that condenses chat history | |
| into a short, factual summary for context preservation. | |
| """ | |
| summarizer_agent = Agent[AgentContext]( | |
| name="Summarizer Agent", | |
| instructions=""" | |
| You are a summarization assistant. | |
| Your job is to take several user and assistant messages and produce a concise, | |
| factual summary that captures key intents, facts, and outcomes. | |
| Guidelines: | |
| - Keep the summary under 80 words. | |
| - Focus on what the user is asking for and the assistant's key responses. | |
| - Do NOT add new information. | |
| - Preserve important context like customer concerns, preferences, or goals. | |
| - Write in plain English. | |
| """, | |
| model=sumary_model, # or use default_model if configured in your environment | |
| model_settings=ModelSettings( | |
| temperature=0.3, | |
| top_p=0.9, | |
| max_tokens=300, | |
| ), | |
| ) | |
| return summarizer_agent | |
| def build_kimi_information_agent()-> Agent[AgentContext]: | |
| current_time = datetime.now() | |
| current_date = date.today() | |
| current_day = datetime.today().strftime("%A") | |
| information_agent = Agent[AgentContext]( | |
| name="company_suggestion_information", | |
| instructions=( | |
| "You are an information agent and customer service representative for the company. " | |
| "Your goal is to provide clear, concise answers using ONLY the suggestion_ragtool tool. " | |
| "For greeting do not call tool reply by your self add company name " | |
| "Always speak as the company using 'we'. Do NOT guess or assume. " | |
| "If information is not found, reply politely: " | |
| "phraphse according to your intellgence 'No information is available regarding to this . You may book an appointment or speak to our sales agent for more details.' praphrase it " | |
| "Make only ONE suggestion_ragtool query that fully represents the user’s request. " | |
| "All company-related answers must come strictly from the suggestion_ragtool tool. " | |
| "Do not create or assume any details. Always use the correct company name. " | |
| "The suggestion_ragtool result is your official answer. " | |
| "Respond in under not more than 80 words, in a friendly customer-service tone. " | |
| "Never leave incomplete replies and never ignore earlier conversation context. " | |
| "As a customer support agent, always answer using official company information found through the suggestion_ragtool tool. for partcular question liek greeting and user info if you have so do not use tool reply by self " | |
| f"Current system time : {current_time}, date: {current_date}, day: {current_day}. " | |
| ), | |
| model=kimi_model, | |
| tools=[ | |
| suggestion_ragtool | |
| ], | |
| model_settings=ModelSettings( | |
| temperature=1, | |
| top_p=1, | |
| max_tokens=2048, | |
| ), | |
| ) | |
| return information_agent | |
| def build_google_information_agent()-> Agent[AgentContext]: | |
| current_time = datetime.now() | |
| current_date = date.today() | |
| current_day = datetime.today().strftime("%A") | |
| information_agent = Agent[AgentContext]( | |
| name="company_suggestion_information", | |
| instructions=( | |
| "You are an information agent and customer service representative for the company. " | |
| "Your goal is to provide clear, concise answers using ONLY the suggestion_ragtool tool. " | |
| "For greeting do not call tool reply by your self add company name " | |
| "Always speak as the company using 'we'. Do NOT guess or assume. " | |
| "If information is not found, reply politely: " | |
| "phraphse according to your intellgence 'No information is available regarding to this . You may book an appointment or speak to our sales agent for more details.' praphrase it " | |
| "Make only ONE suggestion_ragtool query that fully represents the user’s request. " | |
| "All company-related answers must come strictly from the suggestion_ragtool tool. " | |
| "Do not create or assume any details. Always use the correct company name. " | |
| "The suggestion_ragtool result is your official answer. " | |
| "Respond in under not more than 80 words, in a friendly customer-service tone. " | |
| "Never leave incomplete replies and never ignore earlier conversation context. " | |
| "As a customer support agent, always answer using official company information found through the suggestion_ragtool tool. for partcular question liek greeting and user info if you have so do not use tool reply by self " | |
| f"Current system time : {current_time}, date: {current_date}, day: {current_day}. " | |
| ), | |
| model=google_model, | |
| tools=[ | |
| suggestion_ragtool | |
| ], | |
| model_settings=ModelSettings( | |
| temperature=1, | |
| top_p=1, | |
| max_tokens=2048, | |
| ), | |
| ) | |
| return information_agent | |