πŸŒπŸ’
Initial commit
3c10197
raw
history blame
4.05 kB
import os
from dotenv import load_dotenv
load_dotenv() # Load environment variables from .env file
import gradio as gr
from threading import Thread
import tiktoken
import logging
from src.config import Config
from src.logger import Logger
from src.project import ProjectManager
from src.state import AgentState
from src.agents import Agent
# Initialize core components
manager = ProjectManager()
AgentState = AgentState()
config = Config()
logger = Logger()
TIKTOKEN_ENC = tiktoken.get_encoding("cl100k_base")
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def process_message(message, base_model="gpt-3.5-turbo", project_name="default", search_engine="duckduckgo"):
try:
agent = Agent(base_model=base_model, search_engine=search_engine.lower())
state = AgentState.get_latest_state(project_name)
if not state:
agent.execute(message, project_name)
else:
if AgentState.is_agent_completed(project_name):
agent.subsequent_execute(message, project_name)
else:
agent.execute(message, project_name)
# Get the latest messages
messages = manager.get_messages(project_name)
return messages[-1]["message"] if messages else "No response generated"
except Exception as e:
logger.error(f"Error processing message: {str(e)}")
return f"An error occurred: {str(e)}"
def create_gradio_interface():
with gr.Blocks(title="Devika AI Assistant", theme=gr.themes.Soft()) as interface:
gr.Markdown("""
# πŸ€– Devika AI Assistant
Devika is an advanced AI coding assistant that helps you with:
- Writing and debugging code
- Creating new projects
- Answering programming questions
- And much more!
Simply type your request below and Devika will help you out.
""")
with gr.Row():
with gr.Column(scale=2):
message_input = gr.Textbox(
label="Your Message",
placeholder="Type your coding request here...",
lines=3
)
with gr.Row():
model_dropdown = gr.Dropdown(
choices=["gpt-3.5-turbo", "gpt-4", "claude-3-opus"],
value="gpt-3.5-turbo",
label="Model"
)
search_engine_dropdown = gr.Dropdown(
choices=["DuckDuckGo", "Bing", "Google"],
value="DuckDuckGo",
label="Search Engine"
)
submit_btn = gr.Button("Send Message", variant="primary")
with gr.Column(scale=3):
output_box = gr.Markdown(label="Devika's Response")
# Add examples
gr.Examples(
examples=[
["Create a React component for a todo list", "gpt-3.5-turbo", "DuckDuckGo"],
["Help me understand how to use Python decorators", "gpt-3.5-turbo", "DuckDuckGo"],
["Write a Node.js API endpoint for user authentication", "gpt-3.5-turbo", "DuckDuckGo"]
],
inputs=[message_input, model_dropdown, search_engine_dropdown],
outputs=output_box,
fn=lambda x, y, z: process_message(x, y, "default", z),
cache_examples=True
)
submit_btn.click(
fn=process_message,
inputs=[message_input, model_dropdown, gr.Textbox(value="default", visible=False), search_engine_dropdown],
outputs=output_box
)
return interface
# Create and launch the Gradio interface
interface = create_gradio_interface()
if __name__ == "__main__":
interface.launch(
server_name="0.0.0.0",
server_port=7860,
share=False,
debug=False
)