nora-lib 0.0.6.dev1__tar.gz → 0.0.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/PKG-INFO +1 -1
  2. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/context/context_service.py +2 -12
  3. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/interactions/interactions_service.py +1 -76
  4. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/interactions/models.py +12 -16
  5. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib.egg-info/PKG-INFO +1 -1
  6. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/setup.py +1 -1
  7. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/README.md +0 -0
  8. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/__init__.py +0 -0
  9. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/context/__init__.py +0 -0
  10. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/context/models.py +0 -0
  11. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/interactions/__init__.py +0 -0
  12. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/py.typed +0 -0
  13. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/tasks/__init__.py +0 -0
  14. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/tasks/models.py +0 -0
  15. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib/tasks/state.py +0 -0
  16. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib.egg-info/SOURCES.txt +0 -0
  17. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib.egg-info/dependency_links.txt +0 -0
  18. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib.egg-info/requires.txt +0 -0
  19. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/nora_lib.egg-info/top_level.txt +0 -0
  20. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/pyproject.toml +0 -0
  21. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/setup.cfg +0 -0
  22. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/tests/tasks/__init__.py +0 -0
  23. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/tests/tasks/test_state.py +0 -0
  24. {nora_lib-0.0.6.dev1 → nora_lib-0.0.7}/tests/test_placeholder.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nora_lib
3
- Version: 0.0.6.dev1
3
+ Version: 0.0.7
4
4
  Summary: For making and coordinating agents and tools
5
5
  Home-page: https://github.com/allenai/nora_lib
6
6
  Requires-Python: >=3.9
@@ -1,17 +1,7 @@
1
- from datetime import datetime, timezone
2
- from typing import List, Optional
3
- from uuid import UUID
1
+ from typing import Optional
4
2
 
5
3
  from nora_lib.interactions.interactions_service import InteractionsService
6
- from nora_lib.interactions.models import (
7
- ReturnedMessage,
8
- ReturnedAgentContextMessage,
9
- ReturnedAgentContextEvent,
10
- EventType,
11
- AgentMessageData,
12
- Event,
13
- )
14
- from nora_lib.context.models import WrappedTaskObject
4
+ from nora_lib.interactions.models import ReturnedMessage
15
5
 
16
6
 
17
7
  class ContextService:
@@ -1,17 +1,13 @@
1
- from datetime import datetime
2
- import logging
3
1
  import requests
4
- from typing import List, Optional
2
+ from typing import Optional
5
3
  import json
6
4
 
7
5
  from nora_lib.interactions.models import (
8
6
  AnnotationBatch,
9
7
  Event,
10
- EventType,
11
8
  Message,
12
9
  ReturnedMessage,
13
10
  ThreadRelationsResponse,
14
- ThreadForkEventData,
15
11
  )
16
12
 
17
13
 
@@ -98,42 +94,6 @@ class InteractionsService:
98
94
  response.raise_for_status()
99
95
  return response.json()
100
96
 
101
- def fetch_messages_and_agent_context_events_for_thread(
102
- self, message_id: str, event_type: str
103
- ) -> List[ReturnedMessage]:
104
- """Build a history of messages for a given message including associated events.
105
- This includes messages from pre-forked threads."""
106
- messages_with_events: List[ReturnedMessage] = []
107
-
108
- messages_for_thread: ThreadRelationsResponse = (
109
- self.fetch_thread_messages_and_events_for_message(
110
- message_id, [event_type, EventType.THREAD_FORK.value]
111
- )
112
- )
113
- messages_with_events.extend(messages_for_thread.messages)
114
-
115
- # Process any thread_fork events
116
- try:
117
- for msg in messages_for_thread.messages:
118
- for event in msg.events:
119
- if event.type == EventType.THREAD_FORK.value:
120
- event_data = ThreadForkEventData.model_validate(event.data)
121
- forked_thread: ThreadRelationsResponse = (
122
- self.fetch_thread_messages_and_events_for_message(
123
- event_data.previous_message_id, [event_type]
124
- )
125
- )
126
- messages_with_events.extend(forked_thread.messages)
127
- except Exception as e: # pylint: disable=broad-except
128
- logging.exception(
129
- "Failed to fetch forked thread messages for message %s: %s",
130
- message_id,
131
- e,
132
- )
133
-
134
- messages_with_events.sort(key=lambda x: x.ts)
135
- return messages_with_events
136
-
137
97
  def fetch_thread_messages_and_events_for_message(
138
98
  self, message_id: str, event_types: list[str]
139
99
  ) -> ThreadRelationsResponse:
@@ -182,41 +142,6 @@ class InteractionsService:
182
142
  response.raise_for_status()
183
143
  return response.json()
184
144
 
185
- def fetch_messages_and_events_for_forked_thread(
186
- self, message_id: str, event_type: str
187
- ) -> List[ReturnedMessage]:
188
- """Build a history of messages for a given message including associated events.
189
- This includes messages from pre-forked threads."""
190
- returned_messages: List[ReturnedMessage] = []
191
-
192
- messages_for_thread: ThreadRelationsResponse = (
193
- self.fetch_thread_messages_and_events_for_message(message_id, [event_type])
194
- )
195
- if messages_for_thread.messages:
196
- returned_messages.extend(messages_for_thread.messages)
197
-
198
- # Lookup any thread_fork events (conversation across surfaces)
199
- thread_fork_events = self.fetch_messages_and_events_for_thread(
200
- messages_for_thread.thread_id, EventType.THREAD_FORK.value
201
- )
202
- for forked_thread_event in thread_fork_events.get("thread", {}).get(
203
- "events", []
204
- ):
205
- event_data = ThreadForkEventData.model_validate(
206
- forked_thread_event.get("data", {})
207
- )
208
- forked_thread: ThreadRelationsResponse = (
209
- self.fetch_thread_messages_and_events_for_message(
210
- event_data.previous_message_id, [event_type]
211
- )
212
- )
213
- if forked_thread.messages:
214
- returned_messages.extend(forked_thread.messages)
215
-
216
- returned_messages.sort(key=lambda x: x.ts)
217
-
218
- return returned_messages
219
-
220
145
  def fetch_events_for_message(
221
146
  self,
222
147
  message_id: str,
@@ -2,6 +2,7 @@
2
2
  Model for interactions to be sent to the interactions service.
3
3
  """
4
4
 
5
+ import json
5
6
  from datetime import datetime
6
7
  from enum import Enum
7
8
  from typing import Dict, List, Optional, Tuple
@@ -54,15 +55,6 @@ class Message(BaseModel):
54
55
  return ts.isoformat()
55
56
 
56
57
 
57
- class EventType(str, Enum):
58
- """Event types for the interactions service"""
59
-
60
- AGENT_CONTEXT = "agent:message_context"
61
- S2_ANNOTATION = "s2_annotation"
62
- THREAD_FORK = "thread_fork"
63
- UI_INTERACTION = "ui_interaction"
64
-
65
-
66
58
  class Event(BaseModel):
67
59
  """event object to be sent to the interactions service; requires association with a message, thread or channel id"""
68
60
 
@@ -89,16 +81,26 @@ class Event(BaseModel):
89
81
  class ReturnedMessage(BaseModel):
90
82
  """Message format returned by interaction service"""
91
83
 
92
- message_id: str
93
84
  actor_id: UUID
94
85
  text: str
95
86
  ts: datetime
87
+ message_id: Optional[str] = None
96
88
  annotated_text: Optional[str] = None
97
89
  events: List[Event] = Field(default_factory=list)
98
90
  thread_id: Optional[str] = None
99
91
  channel_id: Optional[str] = None
100
92
  annotations: List[Annotation] = Field(default_factory=list)
101
93
 
94
+ @classmethod
95
+ def from_event(cls, event: Event) -> "ReturnedMessage":
96
+ """Convert an event to a message"""
97
+ return ReturnedMessage(
98
+ actor_id=event.actor_id,
99
+ text=json.dumps(event.data),
100
+ ts=event.timestamp,
101
+ message_id=event.message_id,
102
+ )
103
+
102
104
 
103
105
  class AgentMessageData(BaseModel):
104
106
  """capture requests to and responses from tools within Events"""
@@ -130,12 +132,6 @@ class ReturnedAgentContextMessage(BaseModel):
130
132
  events: List[ReturnedAgentContextEvent] = Field(default_factory=list)
131
133
 
132
134
 
133
- class ThreadForkEventData(BaseModel):
134
- """Event data for a thread fork event"""
135
-
136
- previous_message_id: str
137
-
138
-
139
135
  class ThreadRelationsResponse(BaseModel):
140
136
  """Thread format returned by interaction service for thread relations in a search response"""
141
137
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: nora_lib
3
- Version: 0.0.6.dev1
3
+ Version: 0.0.7
4
4
  Summary: For making and coordinating agents and tools
5
5
  Home-page: https://github.com/allenai/nora_lib
6
6
  Requires-Python: >=3.9
@@ -7,7 +7,7 @@ dev_requirements = ["mypy", "pytest", "black", "types-requests"]
7
7
 
8
8
  setuptools.setup(
9
9
  name="nora_lib",
10
- version="0.0.6.dev1",
10
+ version="0.0.7",
11
11
  description="For making and coordinating agents and tools",
12
12
  url="https://github.com/allenai/nora_lib",
13
13
  packages=setuptools.find_packages(exclude=(["tests"])),
File without changes
File without changes
File without changes