Type fixes

This commit is contained in:
Storme-bit
2026-04-05 06:42:30 -07:00
parent 6084efeea4
commit 8765dc3c2d
2 changed files with 100 additions and 4 deletions

View File

@@ -9,7 +9,8 @@
The main entry point for all clients. Assembles context packages from The main entry point for all clients. Assembles context packages from
memory, routes prompts to inference, and writes new episodes back to memory, routes prompts to inference, and writes new episodes back to
memory after each interaction. memory after each interaction. Clients never talk directly to the memory
or inference services — all traffic flows through orchestration.
## Dependencies ## Dependencies
@@ -27,10 +28,105 @@ memory after each interaction.
| EMBEDDING_SERVICE_URL | No | http://localhost:3003 | Embedding service URL | | EMBEDDING_SERVICE_URL | No | http://localhost:3003 | Embedding service URL |
| INFERENCE_SERVICE_URL | No | http://localhost:3001 | Inference service URL | | INFERENCE_SERVICE_URL | No | http://localhost:3001 | Inference service URL |
## Internal Structure
src/
├── services/
│ ├── memory.js # HTTP wrapper functions for memory service calls
│ └── inference.js # HTTP wrapper functions for inference service calls
├── chat/
│ └── index.js # Core pipeline logic — context assembly and coordination
├── routes/
│ └── chat.js # Express route handlers
└── index.js # Express app entry point
The `services/` layer wraps all downstream HTTP calls in named functions,
keeping the pipeline logic in `chat/index.js` readable and ensuring that
URL or endpoint changes have a single place to be updated.
## Chat Pipeline
When a request hits `POST /chat`, the following steps run in order:
1. **Session resolution** — looks up the session by `externalId` in the memory
service. If not found, auto-creates a new session. Clients can generate a
UUID for new conversations and pass it directly — no pre-creation step needed.
2. **Memory retrieval** — fetches the most recent episodes for the session
(default: 10) from the memory service to use as conversational context.
3. **Prompt assembly** — combines a system prompt, the retrieved episodes, and
the current user message into a single prompt string.
4. **Inference** — sends the assembled prompt to the inference service and
waits for the response.
5. **Episode write** — writes the new exchange (user message + AI response)
back to the memory service as a fire-and-forget operation. The client
receives the response immediately without waiting for the write to complete.
6. **Response** — returns the AI response, model name, session ID, and token
count to the client.
## Prompt Structure
The prompt sent to the inference service follows this structure:
[System prompt]
Here are some relevant memories from your past conversations:
User: {past user message}
Assistant: {past ai response}
... (up to 10 recent episodes)
--- End of recent memories ---
User: {current message}
Assistant:
## Endpoints ## Endpoints
### Health
| Method | Path | Description | | Method | Path | Description |
|---|---|---| |---|---|---|
| GET | /health | Service health check | | GET | /health | Service health check — reports downstream service URLs |
> Further endpoints will be documented as the service is built out. ### Chat
| Method | Path | Description |
|---|---|---|
| POST | /chat | Send a message and receive a response |
---
**POST /chat**
Request body:
```json
{
"sessionId": "your-session-uuid",
"message": "Hello, my name is Tim.",
"model": "companion:latest",
"temperature": 0.7
}
```
`model` and `temperature` are optional — fall back to inference service defaults
if omitted.
Response:
```json
{
"sessionId": "your-session-uuid",
"response": "Hello Tim! How can I help you today?",
"model": "companion:latest",
"tokenCount": 87
}
```
| Field | Description |
|---|---|
| `sessionId` | Echo of the provided session ID |
| `response` | The AI's response text |
| `model` | Model name as reported by the inference service |
| `tokenCount` | Combined prompt + completion token count |
> Note: If `sessionId` does not exist in the memory service, a new session
> is automatically created. Clients can safely generate a UUID for new
> conversations and pass it on the first message.

View File

@@ -74,7 +74,7 @@ function getRelationshipsByEntity(entityId) {
} }
// Delete a specific relationship by (from_id, to_id, label) // Delete a specific relationship by (from_id, to_id, label)
function deleteRelationship(fromid, toId, label) { function deleteRelationship(fromId, toId, label) {
const db = getDB(); const db = getDB();
db.prepare(`DELETE FROM relationships WHERE from_id = ? AND to_id = ? AND label = ?`).run(fromId, toId, label); db.prepare(`DELETE FROM relationships WHERE from_id = ? AND to_id = ? AND label = ?`).run(fromId, toId, label);