Skip to content

Commit 0e85ed7

Browse files
Fixe on Pydantic model for alerts (#976)
Closes: #969 Some small fixes all related with fixing alerts both when adding from secrets and when retrieving them through the endpoint `http://localhost:8989/api/v1/workspaces/openai/messages`
1 parent 619fc3d commit 0e85ed7

File tree

9 files changed

+33
-28
lines changed

9 files changed

+33
-28
lines changed

src/codegate/api/v1.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from codegate import __version__
1313
from codegate.api import v1_models, v1_processing
1414
from codegate.db.connection import AlreadyExistsError, DbReader
15-
from codegate.pipeline.base import AlertSeverity
15+
from codegate.db.models import AlertSeverity
1616
from codegate.providers import crud as provendcrud
1717
from codegate.workspaces import crud
1818

src/codegate/api/v1_models.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import datetime
2+
import json
23
from enum import Enum
34
from typing import Any, Dict, List, Optional, Union
45

@@ -154,11 +155,16 @@ class Alert(pydantic.BaseModel):
154155

155156
@staticmethod
156157
def from_db_model(db_model: db_models.Alert) -> "Alert":
158+
try:
159+
trigger_string = json.loads(db_model.trigger_string)
160+
except Exception:
161+
trigger_string = db_model.trigger_string
162+
snippet = json.loads(db_model.code_snippet) if db_model.code_snippet else None
157163
return Alert(
158164
id=db_model.id,
159165
prompt_id=db_model.prompt_id,
160-
code_snippet=db_model.code_snippet,
161-
trigger_string=db_model.trigger_string,
166+
code_snippet=snippet,
167+
trigger_string=trigger_string,
162168
trigger_type=db_model.trigger_type,
163169
trigger_category=db_model.trigger_category,
164170
timestamp=db_model.timestamp,
@@ -169,7 +175,7 @@ def from_db_model(db_model: db_models.Alert) -> "Alert":
169175
code_snippet: Optional[CodeSnippet]
170176
trigger_string: Optional[Union[str, dict]]
171177
trigger_type: str
172-
trigger_category: Optional[str]
178+
trigger_category: db_models.AlertSeverity
173179
timestamp: datetime.datetime
174180

175181

src/codegate/db/fim_cache.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
from pydantic import BaseModel
99

1010
from codegate.config import Config
11-
from codegate.db.models import Alert
12-
from codegate.pipeline.base import AlertSeverity, PipelineContext
11+
from codegate.db.models import Alert, AlertSeverity
12+
from codegate.pipeline.base import PipelineContext
1313

1414
logger = structlog.get_logger("codegate")
1515

src/codegate/db/models.py

+12-7
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,19 @@
55
from pydantic import BaseModel, StringConstraints
66

77

8+
class AlertSeverity(str, Enum):
9+
INFO = "info"
10+
CRITICAL = "critical"
11+
12+
813
class Alert(BaseModel):
9-
id: Any
10-
prompt_id: Any
11-
code_snippet: Optional[Any]
12-
trigger_string: Optional[Any]
13-
trigger_type: Any
14-
trigger_category: Optional[Any]
15-
timestamp: Any
14+
id: str
15+
prompt_id: str
16+
code_snippet: Optional[str]
17+
trigger_string: Optional[str]
18+
trigger_type: str
19+
trigger_category: AlertSeverity
20+
timestamp: datetime.datetime
1621

1722

1823
class Output(BaseModel):

src/codegate/pipeline/base.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,22 @@
1-
import dataclasses
21
import datetime
32
import json
43
import uuid
54
from abc import ABC, abstractmethod
65
from dataclasses import dataclass, field
7-
from enum import Enum
86
from typing import Any, Dict, List, Optional
97

108
import structlog
119
from litellm import ChatCompletionRequest, ModelResponse
1210
from pydantic import BaseModel
1311

1412
from codegate.clients.clients import ClientType
15-
from codegate.db.models import Alert, Output, Prompt
13+
from codegate.db.models import Alert, AlertSeverity, Output, Prompt
1614
from codegate.extract_snippets.message_extractor import CodeSnippet
1715
from codegate.pipeline.secrets.manager import SecretsManager
1816

1917
logger = structlog.get_logger("codegate")
2018

2119

22-
class AlertSeverity(Enum):
23-
INFO = "info"
24-
CRITICAL = "critical"
25-
26-
2720
@dataclass
2821
class PipelineSensitiveData:
2922
manager: SecretsManager
@@ -80,7 +73,7 @@ def add_alert(
8073
logger.warning("No code snippet or trigger string provided for alert. Will not create")
8174
return
8275

83-
code_snippet_str = json.dumps(dataclasses.asdict(code_snippet)) if code_snippet else None
76+
code_snippet_str = code_snippet.model_dump_json() if code_snippet else None
8477

8578
self.alerts_raised.append(
8679
Alert(

src/codegate/pipeline/codegate_context_retriever/codegate.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
from litellm import ChatCompletionRequest
66

77
from codegate.clients.clients import ClientType
8+
from codegate.db.models import AlertSeverity
89
from codegate.extract_snippets.factory import MessageCodeExtractorFactory
910
from codegate.pipeline.base import (
10-
AlertSeverity,
1111
PipelineContext,
1212
PipelineResult,
1313
PipelineStep,

src/codegate/pipeline/comment/output.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
from litellm import ModelResponse
66
from litellm.types.utils import Delta, StreamingChoices
77

8+
from codegate.db.models import AlertSeverity
89
from codegate.extract_snippets.message_extractor import (
910
CodeSnippet,
1011
DefaultCodeSnippetExtractor,
1112
)
12-
from codegate.pipeline.base import AlertSeverity, PipelineContext
13+
from codegate.pipeline.base import PipelineContext
1314
from codegate.pipeline.output import OutputPipelineContext, OutputPipelineStep
1415
from codegate.storage import StorageEngine
1516
from codegate.utils.package_extractor import PackageExtractor

src/codegate/pipeline/secrets/secrets.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
from abc import abstractmethod
33
from typing import List, Optional, Tuple
44

5-
from codegate.extract_snippets.factory import MessageCodeExtractorFactory
65
import structlog
76
from litellm import ChatCompletionRequest, ChatCompletionSystemMessage, ModelResponse
87
from litellm.types.utils import Delta, StreamingChoices
98

109
from codegate.config import Config
10+
from codegate.db.models import AlertSeverity
11+
from codegate.extract_snippets.factory import MessageCodeExtractorFactory
1112
from codegate.pipeline.base import (
12-
AlertSeverity,
1313
CodeSnippet,
1414
PipelineContext,
1515
PipelineResult,

tests/db/test_fim_cache.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import pytest
77

88
from codegate.db.fim_cache import CachedFim, FimCache
9-
from codegate.db.models import Alert
10-
from codegate.pipeline.base import AlertSeverity, PipelineContext
9+
from codegate.db.models import Alert, AlertSeverity
10+
from codegate.pipeline.base import PipelineContext
1111

1212
fim_python_message = """
1313
# Path: folder/testing_file.py

0 commit comments

Comments
 (0)