Coder preparations
This commit is contained in:
@@ -5,9 +5,12 @@ from contextlib import asynccontextmanager
|
||||
import httpx
|
||||
from dotenv import load_dotenv
|
||||
from fastapi import FastAPI, HTTPException
|
||||
|
||||
from agents.coders.BaseCoder import CoderAgent
|
||||
from agents.issue_triage.IssueTriageAgent import IssueTriageAgent
|
||||
from agents.issue_triage.context_builder import YouTrackContextBuilder
|
||||
from agents.registry import AgentRegistry
|
||||
from common.gitea_mcp_client import GiteaMCPClient
|
||||
from common.llm_client import LLMClient
|
||||
from common.youtrack_mcp_client import YouTrackMCPClient, IssueNotFound
|
||||
|
||||
@@ -23,7 +26,7 @@ def env(key: str) -> str:
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
mcp = await YouTrackMCPClient(
|
||||
app.state.youtrack_mcp = await YouTrackMCPClient(
|
||||
str(os.getenv('YOUTRACK_MCP_SERVER')),
|
||||
str(os.getenv('YOUTRACK_MCP_TOKEN')),
|
||||
).connect()
|
||||
@@ -43,20 +46,20 @@ async def lifespan(app: FastAPI):
|
||||
)
|
||||
|
||||
app.state.issue_reader_agent = IssueTriageAgent(
|
||||
YouTrackContextBuilder(mcp, http_for_attachments),
|
||||
YouTrackContextBuilder(app.state.youtrack_mcp, http_for_attachments),
|
||||
LLMClient(
|
||||
base_url=env("LLM_ADDRESS"),
|
||||
api_key=env("LLM_API_KEY"),
|
||||
model=env("LLM_MODEL"),
|
||||
),
|
||||
AgentRegistry(),
|
||||
mcp
|
||||
app.state.youtrack_mcp
|
||||
)
|
||||
|
||||
yield
|
||||
|
||||
# ---- shutdown ----
|
||||
await mcp.close()
|
||||
await app.state.youtrack_mcp.close()
|
||||
app = FastAPI(lifespan=lifespan)
|
||||
|
||||
@app.get("/")
|
||||
@@ -84,3 +87,32 @@ async def decomposing_issue(issue: str):
|
||||
except Exception as e:
|
||||
logger.exception("An unexpected error occurred")
|
||||
return {"error": str(e)}
|
||||
|
||||
@app.get("/code_issue")
|
||||
async def code_issue(issue: str):
|
||||
issue_agent: IssueTriageAgent = app.state.issue_reader_agent
|
||||
gitea_mcp_client = GiteaMCPClient()
|
||||
coder_agent: CoderAgent = CoderAgent(
|
||||
str(os.getenv("CODER_ID")),
|
||||
issue_agent.ctx_builder,
|
||||
issue_agent.llm,
|
||||
issue_agent.agent_registry,
|
||||
issue_agent.youtrack_mcp,
|
||||
gitea_mcp_client
|
||||
)
|
||||
|
||||
try:
|
||||
logger.info(f"Resolve an issue: {issue}")
|
||||
issue_ctx = await issue_agent.ctx_builder.build(issue)
|
||||
if issue_ctx:
|
||||
response = await coder_agent.fix_an_issue(issue_ctx)
|
||||
logger.info("Task planning successful.")
|
||||
return {"status": "ok", "response": response}
|
||||
except IssueNotFound:
|
||||
logger.error(f"Issue {issue} not found.")
|
||||
raise HTTPException(status_code=404, detail=f"Issue {issue} not found")
|
||||
except Exception as e:
|
||||
logger.exception("An unexpected error occurred")
|
||||
return {"error": str(e)}
|
||||
|
||||
return {"error": "No context was created"}
|
||||
Reference in New Issue
Block a user