Skip to content

Commit 37a14f0

Browse files
authored
Merge pull request #810 from macrocosm-os/release/v3.0.5
Bump project version to 3.0.5
2 parents 40c9c67 + a8ce12a commit 37a14f0

File tree

11 files changed

+485
-171
lines changed

11 files changed

+485
-171
lines changed

apex/services/deep_research/deep_research_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
class DeepResearchBase(LLMBase):
77
async def invoke(
88
self, messages: list[dict[str, str]], body: dict[str, Any] | None = None
9-
) -> tuple[str, list[dict[str, str]]]:
9+
) -> tuple[str, list[dict[str, str]], list[dict[str, Any]]]:
1010
raise NotImplementedError

apex/services/deep_research/deep_research_langchain.py

Lines changed: 340 additions & 51 deletions
Large diffs are not rendered by default.

apex/services/llm/llm.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def __init__(self, base_url: str, model: str, key: str):
1414

1515
async def invoke(
1616
self, messages: list[dict[str, str]], body: dict[str, Any] | None = None
17-
) -> tuple[str, list[dict[str, str]]]:
17+
) -> tuple[str, list[dict[str, str]], list[dict[str, Any]]]:
1818
headers = {
1919
"Authorization": "Bearer " + self._key,
2020
"Content-Type": "application/json",
@@ -35,7 +35,8 @@ async def invoke(
3535

3636
data = await response.json()
3737
content = data.get("choices", [{}])[0].get("message", {}).get("content", "")
38-
return str(content), []
38+
# This base LLM does not build multi-step chains; return empty reasoning_traces
39+
return str(content), [], []
3940

4041
def __str__(self) -> str:
4142
return f"{self.__class__.__name__}({self._base_url}, {self._model})"

apex/services/llm/llm_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44
class LLMBase:
55
async def invoke(
66
self, messages: list[dict[str, str]], body: dict[str, Any] | None = None
7-
) -> tuple[str, list[dict[str, str]]]:
7+
) -> tuple[str, list[dict[str, str]], list[dict[str, Any]]]:
88
raise NotImplementedError

apex/validator/generate_query.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,14 @@
1919
async def generate_query(llm: LLMBase, websearch: WebSearchBase) -> str:
2020
random_words = " ".join(random.sample(get_english_words(), 3))
2121
# Perform a lightweight search and pick a single result as context.
22-
search_results = await websearch.search(random_words, max_results=5)
23-
search_website = random.choice(search_results)
24-
search_content = search_website.content
22+
try:
23+
search_results = await websearch.search(random_words, max_results=5)
24+
search_website = random.choice(search_results)
25+
search_content = search_website.content
26+
except Exception as exc:
27+
logger.debug(f"Error during web search: {exc}")
28+
search_content = ""
2529
query = QUERY_PROMPT_TEMPLATE.format(context=search_content)
26-
query_response, _ = await llm.invoke([{"role": "user", "content": query}])
30+
query_response, _, _ = await llm.invoke([{"role": "user", "content": query}])
2731
logger.debug(f"Generated query.\nPrompt: '{query}'\nResponse: '{query_response}'")
2832
return query_response

apex/validator/generate_reference.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
from typing import Any
2+
13
from loguru import logger
24

35
from apex.services.deep_research.deep_research_base import DeepResearchBase
46

57

6-
async def generate_reference(llm: DeepResearchBase, query: str) -> tuple[str, list[dict[str, str]]]:
8+
async def generate_reference(
9+
llm: DeepResearchBase, query: str
10+
) -> tuple[str, list[dict[str, str]], list[dict[str, Any]]]:
711
"""Generate a reference response for the given prompt.
812
913
Args:
@@ -22,13 +26,9 @@ async def generate_reference(llm: DeepResearchBase, query: str) -> tuple[str, li
2226
}
2327
user_message: dict[str, str] = {
2428
"role": "user",
25-
"content": (
26-
f"Research Question: {query}\n\n"
27-
"Please think through the answer carefully, annotate each step with citations like [1], [2], etc., "
28-
'and conclude with a "References:" list mapping each [n] to its source URL or title.'
29-
),
29+
"content": query,
3030
}
3131

32-
response, tool_history = await llm.invoke([system_message, user_message])
32+
response, tool_history, reasoning_traces = await llm.invoke([system_message, user_message])
3333
logger.debug(f"Generated reference.\nPrompt: '{user_message}'\nResponse: '{response}'")
34-
return response, tool_history
34+
return response, tool_history, reasoning_traces

apex/validator/logger_wandb.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,15 @@ async def log(
4646
reference: str | None = None,
4747
discriminator_results: MinerDiscriminatorResults | None = None,
4848
tool_history: list[dict[str, str]] | None = None,
49+
reasoning_traces: list[dict[str, Any]] | None = None,
4950
) -> None:
5051
"""Log an event to wandb."""
5152
if self.run:
5253
if discriminator_results:
5354
processed_event = self.process_event(discriminator_results.model_dump())
5455
processed_event["reference"] = reference
5556
processed_event["tool_history"] = tool_history
57+
processed_event["reasoning_trace"] = reasoning_traces
5658
self.run.log(processed_event)
5759

5860
def process_event(self, event: Mapping[str, Any]) -> dict[str, Any]:

apex/validator/pipeline.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,15 @@ async def run_single(self, task: QueryTask) -> str:
8484

8585
reference = None
8686
tool_history: list[dict[str, str]] = []
87+
reasoning_traces: list[dict[str, Any]] = []
8788
if random.random() < self.reference_rate:
8889
try:
8990
generator_results = None
9091
ground_truth = 0
9192
logger.debug(f"Generating task reference for query: {query[:20]}..")
92-
reference, tool_history = await generate_reference(llm=self.deep_research, query=query)
93+
reference, tool_history, reasoning_traces = await generate_reference(
94+
llm=self.deep_research, query=query
95+
)
9396
except BaseException as exc:
9497
logger.exception(f"Failed to generate reference: {exc}")
9598

@@ -100,7 +103,9 @@ async def run_single(self, task: QueryTask) -> str:
100103
if random.random() < self.redundancy_rate:
101104
try:
102105
logger.debug(f"Generating redundant task reference for query: {query[:20]}..")
103-
reference, tool_history = await generate_reference(llm=self.deep_research, query=query)
106+
reference, tool_history, reasoning_traces = await generate_reference(
107+
llm=self.deep_research, query=query
108+
)
104109
except BaseException as exc:
105110
logger.warning(f"Failed to generate redundant reference: {exc}")
106111

@@ -111,7 +116,10 @@ async def run_single(self, task: QueryTask) -> str:
111116

112117
if self.logger_wandb:
113118
await self.logger_wandb.log(
114-
reference=reference, discriminator_results=discriminator_results, tool_history=tool_history
119+
reference=reference,
120+
discriminator_results=discriminator_results,
121+
tool_history=tool_history,
122+
reasoning_traces=reasoning_traces,
115123
)
116124

117125
if self._debug:

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "apex"
3-
version = "3.0.4"
3+
version = "3.0.5"
44
description = "Bittensor Subnet 1: Apex"
55
readme = "README.md"
66
requires-python = "~=3.11"
@@ -36,6 +36,7 @@ dependencies = [
3636
"pytest-mock>=3.14.1",
3737
"wandb>=0.21.1",
3838
"ruff>=0.12.5",
39+
"langchain-experimental>=0.3.4",
3940
]
4041

4142

0 commit comments

Comments
 (0)